7

Python モジュール scikit-learn を使用して、svmlight 形式の回帰 (つまり、連続値の応答値) データセットに単変量特徴選択法を適用しようとしています。

scikit-learn バージョン 0.11 を使用しています。

最初のアプローチは失敗し、2番目のアプローチはおもちゃのデータセットで機能しましたが、実際のデータセットでは意味のない結果になると思います。

回帰データセットの上位 N 個の特徴を選択するために適用できる、適切な単変量特徴選択アプローチに関するアドバイスをお願いします。(a) f_regression 関数を機能させる方法を考え出すか、(b) 別の提案を聞きたいです。

上記の 2 つのアプローチ:

  1. sklearn.feature_selection.f_regression(X,Y)を使ってみました。

これは次のエラー メッセージで失敗しました:

  1. chi2(X,Y)を使ってみました。これは「うまくいきました」が、おもちゃのデータセットの 0.1 と 1.8 の 2 つの応答値がクラス ラベルとして扱われていたためだと思います。おそらく、これは実際のデータセットに対して意味のあるカイ 2 乗統計を生成せず、可能な応答値が多数存在し、[特定の応答値とテスト対象の属性の値を持つ] 各セルの数が次のようになります。低い?

このメッセージの最後に貼り付けられた私のおもちゃのデータセットを見つけてください。

次のコード スニペットは、上で説明した結果を提供するはずです。

from sklearn.datasets import load_svmlight_file

X_train_data, Y_train_data = load_svmlight_file(svmlight_format_train_file) #i.e. change this to the name of my toy dataset file

from sklearn.feature_selection import SelectKBest
featureSelector = SelectKBest(score_func="one of the two functions I refer to above",k=2) #sorry, I hope this message is clear
featureSelector.fit(X_train_data,Y_train_data)
print [1+zero_based_index for zero_based_index in list(featureSelector.get_support(indices=True))] #This should print the indices of the top 2 features

前もって感謝します。

リチャード

私の考案したsvmlightファイルの内容 - 明確にするために追加の空白行が挿入されています:

1.8 1:1.000000 2:1.000000 4:1.000000 6:1.000000#mA

1.8 1:1.000000 2:1.000000#mB

0.1 5:1.000000#mC

1.8 1:1.000000 2:1.000000#mD

0.1 3:1.000000 4:1.000000#mE

0.1 3:1.000000#mF

1.8 2:1.000000 4:1.000000 5:1.000000 6:1.000000#mG

1.8 2:1.000000#mH

4

2 に答える 2

5

larsmans が指摘したように、chi2 は回帰データを使用した特徴選択には使用できません。

scikit-learn バージョン 0.13 に更新すると、次のコードは、上記のおもちゃのデータセットの (f_regression テストに従って) 上位 2 つの機能を選択しました。

def f_regression(X,Y):
   import sklearn
   return sklearn.feature_selection.f_regression(X,Y,center=False) #center=True (the default) would not work ("ValueError: center=True only allowed for dense data") but should presumably work in general

from sklearn.datasets import load_svmlight_file

X_train_data, Y_train_data = load_svmlight_file(svmlight_format_train_file) #i.e. change this to  the name of my toy dataset file

from sklearn.feature_selection import SelectKBest
featureSelector = SelectKBest(score_func=f_regression,k=2)
featureSelector.fit(X_train_data,Y_train_data)
print [1+zero_based_index for zero_based_index in list(featureSelector.get_support(indices=True))]
于 2013-03-24T19:02:02.813 に答える
1

L1/Lasso 正則化による特徴選択を試みることもできます。このために特別に設計されたクラスRandomizedLassoは、データの複数のサブサンプルで LassoRegression をトレーニングし、これらのモデルによって最も頻繁に選択される機能を選択します。を使用するかLassoLassoLarsまたはSGDClassifierリサンプリングの利点なしで同じことを行うこともできますが、より高速です。

于 2014-05-12T03:33:13.230 に答える