私は、Spark 2.0.0を使ってバイナリ分類のために訓練されたSVMモデルに問題があります。 まったく同じデータセットを使って、scikit-learnとMLlibを使って同じロジックを辿ってきました。scikit-learnとmllibの予測の違いpython
svc_model = SVC()
svc_model.fit(X_train, y_train)
print "supposed to be 1"
print svc_model.predict([15 ,15,0,15,15,4,12,8,0,7])
print svc_model.predict([15.0,15.0,15.0,7.0,7.0,15.0,15.0,0.0,12.0,15.0])
print svc_model.predict([15.0,15.0,7.0,0.0,7.0,0.0,15.0,15.0,15.0,15.0])
print svc_model.predict([7.0,0.0,15.0,15.0,15.0,15.0,7.0,7.0,15.0,15.0])
print "supposed to be 0"
print svc_model.predict([18.0, 15.0, 7.0, 7.0, 15.0, 0.0, 15.0, 15.0, 15.0, 15.0])
print svc_model.predict([ 11.0,13.0,7.0,10.0,7.0,13.0,7.0,19.0,7.0,7.0])
print svc_model.predict([ 15.0, 15.0, 18.0, 7.0, 15.0, 15.0, 15.0, 18.0, 7.0, 15.0])
print svc_model.predict([ 15.0, 15.0, 8.0, 0.0, 0.0, 8.0, 15.0, 15.0, 15.0, 7.0])
、それが返されます:スパークのために
supposed to be 1
[0]
[1]
[1]
[1]
supposed to be 0
[0]
[0]
[0]
[0]
がやっている:scikitについては は、私は次のコードを持って学ぶ返し
model_svm = SVMWithSGD.train(trainingData, iterations=100)
print "supposed to be 1"
print model_svm.predict(Vectors.dense(15.0,15.0,0.0,15.0,15.0,4.0,12.0,8.0,0.0,7.0))
print model_svm.predict(Vectors.dense(15.0,15.0,15.0,7.0,7.0,15.0,15.0,0.0,12.0,15.0))
print model_svm.predict(Vectors.dense(15.0,15.0,7.0,0.0,7.0,0.0,15.0,15.0,15.0,15.0))
print model_svm.predict(Vectors.dense(7.0,0.0,15.0,15.0,15.0,15.0,7.0,7.0,15.0,15.0))
print "supposed to be 0"
print model_svm.predict(Vectors.dense(18.0, 15.0, 7.0, 7.0, 15.0, 0.0, 15.0, 15.0, 15.0, 15.0))
print model_svm.predict(Vectors.dense(11.0,13.0,7.0,10.0,7.0,13.0,7.0,19.0,7.0,7.0))
print model_svm.predict(Vectors.dense(15.0, 15.0, 18.0, 7.0, 15.0, 15.0, 15.0, 18.0, 7.0, 15.0))
print model_svm.predict(Vectors.dense(15.0, 15.0, 8.0, 0.0, 0.0, 8.0, 15.0, 15.0, 15.0, 7.0))
:
supposed to be 1
1
1
1
1
supposed to be 0
1
1
1
1
私のポーを維持しようとしている私のテストデータは3521レコードと私のトレーニングデータ8356レコードをバランスさせています。評価のために、シキット学習モデルに適用された交差検証は98%の精度を与え、ROC下の面積を0.5とすると、PR下の値は0.74であり、 0.47の訓練誤差です。
また、しきい値をクリアして0.5に戻そうとしましたが、これ以上の結果は得られませんでした。ときどき私が列車テストの分割を変更しているときには、1つの正しい予測を除いて、すなわち1つの正しいゼロ予測を除いてすべてゼロを得るかもしれない。 誰もこの問題にアプローチする方法を知っていますか?
私は、私のデータセットが両方のケースで全く同じであることを何度もチェックしました。それは意志出力生予測スコアを予測するよう
しかし、私は "良い"結果に一致したい。 skicit学習法を変更すると全体の分類が壊れてしまいます。同じ方法で実行できるmllibライブラリがありますか? – Kratos
@Kratos私はmllibに精通していません。カーネルSVMをmllib(https://issues.apache.org/jira/browse/SPARK-4638)に追加するというプルリクエストがあるようですが、それは古いものであり、管理者はそれを閉じました。私は問題の1つは、RBFカーネルを持つSVMは、トレーニングの例の数にうまく対応していないということです(sklearn docsは複雑さが二次的であると言う)。私は、ランダムなフォレスト(勾配ブースティングのような他の関連する方法)やニューラルネットワークを試してみるほうがよいと考えています。 –
ありがとうございました。私は本当に立ち往生した:) – Kratos