2017-03-06 7 views
0

私はscikit learnを使ってマルチクラスのデータセットの確率を計算しようとしています。しかし、何らかの理由で、私はすべての例について同じ確率を得ています。何が起きているのか?これは私のモデル、図書館の私の使用、または何か他のものと関係がありますか?助けをよろしく!なぜSVMの私の結果はすべてscikitで同じですか?

svm_model = svm.SVC(probability=True, kernel='rbf',C=1, decision_function_shape='ovr', gamma=0.001,verbose=100) 
svm_model.fit(train_X,train_y) 
preds= svm_model.predict_proba(test_X) 

train_Xこの

array([[2350, 5550, 2750.0, ..., 23478, 1, 3], 
     [2500, 5500, 3095.5, ..., 23674, 0, 3], 
     [3300, 6900, 3600.0, ..., 6529, 0, 3], 
     ..., 
     [2150, 6175, 2500.0, ..., 11209, 0, 3], 
     [2095, 5395, 2595.4, ..., 10070, 0, 3], 
     [1650, 2850, 2000.0, ..., 25463, 1, 3]], dtype=object) 

train_yこの

0  1 
1  2 
10  2 
100  2 
1000  2 
10000 2 
10001 2 
10002 2 
10003 2 
10004 2 
10005 2 
10006 2 
10007 2 
10008 1 
10009 1 
1001  2 
10010 2 

test_Xのように見えるように、この

array([[2190, 3937, 2200.5, ..., 24891, 1, 5], 
     [2695, 7000, 2850.0, ..., 5491, 1, 4], 
     [2950, 12000, 4039.5, ..., 22367, 0, 4], 
     ..., 
     [2850, 5200, 3000.0, ..., 15576, 1, 1], 
     [3200, 16000, 4100.0, ..., 1320, 0, 3], 
     [2100, 3750, 2400.0, ..., 6022, 0, 1]], dtype=object) 

私の結果のように見えます見えます

のように見えます3210
array([[ 0.07819139, 0.22727628, 0.69453233], 
     [ 0.07819139, 0.22727628, 0.69453233], 
     [ 0.07819139, 0.22727628, 0.69453233], 
     ..., 
     [ 0.07819139, 0.22727628, 0.69453233], 
     [ 0.07819139, 0.22727628, 0.69453233], 
     [ 0.07819139, 0.22727628, 0.69453233]]) 
+0

「train_y」に2つの列があるのはなぜですか? – lejlot

+0

Train_yにはインデックスの列があります – user1507889

答えて

3

前処理から開始します。

データをゼロ平均と単位分散に標準化することは非常に重要です。 scikit-学ぶドキュメントがthisを言う:非常にあなたのデータをスケーリングすることが推奨されて

サポート・ベクター・マシン・アルゴリズムは、スケール不変ではありません。たとえば、入力ベクトルXの各属性を[0,1]または[-1、+ 1]にスケーリングするか、平均0と分散1を持つように標準化します。テストベクトルには同じスケーリングを適用する必要があります。意味のある結果を得る。

  • sklearns Section on Preprocessing
  • sklearns StandardScalerをスケーリングおよび正規化の詳細については、セクションの前処理データを参照してください。

この後の次のステップは、パラメータ調整(C、gammaおよびco)です。これは通常GridSearchによって行われます。 しかし、私は通常カーネルSVMを試す前に単純なLinearSVMを試してみることを期待しています。(ハイパーパラメータが少なく、計算時間が少なく、最適でないパラメータチェイスを一般化する)

+0

ありがとう!私はgridsearchをやろうとしましたが、本当に長い時間がかかります。それをスピードアップするためのベストプラクティス。 – user1507889

+0

コースの粗いグリッドから始まり、初期値が良好です。ドキュメントを読む。彼らは非常に良いし、分類子に応じていくつかの値をお勧めします。ただし、前処理を修復する前にこれを行わないでください。 – sascha

関連する問題