2016-04-13 34 views
1

こんにちは、私はscikit-learnで機械学習ではかなり新しいですが、私は質問があります。Sklearn - svm重み付け機能

重要度や重みの高いベクターデータの一部の機能をsvmで認識させることは可能ですか?/

ここで私が何をしたいの例です:私は正しいサームは知らない

は、我々は2次元配列にvecotrsの束を持っているとしましょう:

dt = [ 
[x1, y1, z1, q1], 
[x2, y2, z2, q2], 
[x3, y3, z3, q3], 
[x4, y4, z4, q4]] 

と対象データベクトル:

target = [1,0,0,1] 

たとえば、dtのベクトルのすべてのq個の機能を他の機能よりも重要なものにする方法を知りたいと思います。

データをセットでバランスさせる方法や、sample_weightを設定する方法はわかっていますが、どちらもこの問題を解決できません。

乾杯

答えて

1

あなたが分類にsklearn.svm.SVCを使用する場合は、分類器オブジェクトのcoef_ atributeにアクセスすることができます。たとえば、

classifier = SVC(C=1.0, kernel='linear', random_state=241) 
classifier.fit(dt, target) 
coef = classifier.coef_ # here the weights of the features will be stored 

http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html - 詳細については、ドキュメントをご覧ください。

+0

私は重量機能を表すデータにアクセスする方法を理解していますが、変更できる方法はあります。ドキュメントは、このcoef_が読み取り専用のプロパティであることを明確に述べています。私は自分の分級機に力でより重要な機能のいくつかを取らせたいと思っています。 – Domagoj

+1

私は、ライブラリを使用せずに仮定を表現することができます。 SVM - 線形の方法で、フィーチャスケールに敏感です。 StandartScaler(http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html)を使用して、それらを1つのスケールに合わせることができます(必要ではありませんが、場合によっては、アルゴリズム)。 次に、自分でトレーニングデータを前処理し、重要でないと見なされるすべてのフィーチャをcoef <1でスケーリングすることができます(このスケーリングをテストセットまたは\と実際のデータに適用するために保存することを忘れないでください)。 さらに実験が必要です。 – mrEvgenX

+0

このアプローチを試してみます – Domagoj

関連する問題