web-dev-qa-db-ja.com

scikit-learnを使用した特徴選択

私は機械学習の新人です。 Scikit Learn SVMを使用して分類用のデータを準備しています。最高の機能を選択するために、次の方法を使用しました。

SelectKBest(chi2, k=10).fit_transform(A1, A2)

データセットが負の値で構成されているため、次のエラーが発生します。

ValueError                                Traceback (most recent call last)

/media/5804B87404B856AA/TFM_UC3M/test2_v.py in <module>()
----> 1 
      2 
      3 
      4 
      5 

/usr/local/lib/python2.6/dist-packages/sklearn/base.pyc in fit_transform(self, X, y,     **fit_params)
    427         else:
    428             # fit method of arity 2 (supervised transformation)

--> 429             return self.fit(X, y, **fit_params).transform(X)
    430 
    431 

/usr/local/lib/python2.6/dist-packages/sklearn/feature_selection/univariate_selection.pyc in fit(self, X, y)
    300         self._check_params(X, y)
    301 
--> 302         self.scores_, self.pvalues_ = self.score_func(X, y)
    303         self.scores_ = np.asarray(self.scores_)
    304         self.pvalues_ = np.asarray(self.pvalues_)

/usr/local/lib/python2.6/dist-  packages/sklearn/feature_selection/univariate_selection.pyc in chi2(X, y)
    190     X = atleast2d_or_csr(X)
    191     if np.any((X.data if issparse(X) else X) < 0):
--> 192         raise ValueError("Input X must be non-negative.")
    193 
    194     Y = LabelBinarizer().fit_transform(y)

ValueError: Input X must be non-negative.

データを変換するにはどうしたらいいですか?

24
sara

エラーメッセージInput X must be non-negativeそれはすべてを言います: ピアソンのカイ二乗検定(適合度) は負の値には適用されません。カイ二乗検定は周波数分布を想定しており、周波数を負の数にすることはできないため、これは論理的です。したがって、 sklearn.feature_selection.chi2 は、入力が負でないことを表明します。

あなたの特徴は「加速度計信号の最小、最大、平均、中央値、FFT」であると言っています。多くの場合、各機能をシフトしてすべてをポジティブにするか、正規化して[0, 1] EdChumによって提案された間隔。

何らかの理由でデータ変換が不可能な場合(たとえば、負の値は重要な要素です)、特徴をスコアリングするために別の統計を選択する必要があります。

この手順の要点は別のメソッドの機能を準備することなので、だれかを選ぶことは大したことではなく、最終結果は通常同じか非常に近いものになります。

24
Maxim