3

sci-kit learn(バージョン0.11とPythonバージョン2.7.3)を使用して、svmlight形式のバイナリ分類データセットから上位K個の機能を選択しています。

選択した機能の機能ID値を特定しようとしています。これは非常に簡単だと思いました-そしておそらくそうかもしれません!(feature-idとは、ここで説明するように、機能値の前の数値を意味します)

次のコードは、私がこれをどのように試みているかを正確に示しています。

from sklearn.datasets import load_svmlight_file
from sklearn.feature_selection import SelectKBest

svmlight_format_train_file = 'contrived_svmlight_train_file.txt' #I present the contents of this file below

X_train_data, Y_train_data = load_svmlight_file(svmlight_format_train_file)

featureSelector = SelectKBest(score_func=chi2,k=2)

featureSelector.fit(X_train_data,Y_train_data)

assumed_to_be_the_feature_ids_of_the_top_k_features = list(featureSelector.get_support(indices=True)) #indices=False just gives me a list of True,False etc...

print assumed_to_be_the_feature_ids_of_the_top_k_features #this gives: [0, 2]

明らかにassumed_to_be_the_feature_ids_of_the_top_k_features 、feature-id値に対応することはできません-(以下を参照)私の入力ファイルのfeature-id値は1から始まるためです。

さて、assumed_to_be_the_feature_ids_of_the_top_k_features実際には、値の昇順でソートされた機能ID値のリストインデックスに対応しているのではないかと思います。私の場合、インデックス0はfeature-id=1etcに対応します-コードがそれを教えてくれてfeature-id=1feature-id=3選択されたように。

ただし、誰かがこれを確認または拒否できれば幸いです。

前もって感謝します。

contrived_svmlight_train_file.txtの内容:

1 1:1.000000 2:1.000000 4:1.000000 6:1.000000#mA
1 1:1.000000 2:1.000000#mB
0 5:1.000000#mC
1 1:1.000000 2:1.000000#mD
0 3:1.000000 4:1.000000#mE
0 3:1.000000#mF
0 2:1.000000 4:1.000000 5:1.000000 6:1.000000#mG
0 2:1.000000#mH

PS正しくフォーマットされていないことをお詫びします(ここで初めて)。これが読みやすく、理解しやすいことを願っています。

4

1 に答える 1

2

明らかにassumed_to_be_the_feature_ids_of_the_top_k_features、feature-id 値に対応することはできません。入力ファイルの feature-id 値は 1 から始まるため (以下を参照)。

実際、そうです。SVMlight フォーマット ローダーは、入力ファイルに 1 から始まるインデックスがあることを検出し、列を無駄にしないようにすべてのインデックスから 1 を減算します。それが望ましくない場合は、 に渡しzero_based=Trueload_svmlight_file、実際にはゼロベースであるふりをして、余分な列を挿入します。詳細については、そのドキュメントを参照してください。

于 2012-10-10T23:49:35.440 に答える