SVMでマルチラベル分類を実行しようとしています。 私はほぼ8kの特徴を持っていて、長さが約400のyベクトルも持っています。私はすでにYベクトルを二値化していますので、私はMultiLabelBinarizer()
を使用しませんでした。Scikit-Learn:すべてのトレーニング例にラベルxが含まれていません
私はこのコードを実行している:
X = np.genfromtxt('data_X', delimiter=";")
Y = np.genfromtxt('data_y', delimiter=";")
training_X = X[:2600,:]
training_y = Y[:2600,:]
test_sample = X[2600:2601,:]
test_result = Y[2600:2601,:]
classif = OneVsRestClassifier(SVC(kernel='rbf'))
classif.fit(training_X, training_y)
print(classif.predict(test_sample))
print(test_result)
すべてのフィッティングプロセスの後に、それは予測部に来るとき、それは(xは400である私のyベクトルの長さの範囲内で、いくつかの異なる数である)Label not x is present in all training examples
を語ります。その後、予測されたyベクトルが得られ、これは常に長さ400のゼロベクトル(yベクトル長)です。 私はscikit-learnでも機械学習でも新しいです。私はここで問題を理解することができませんでした。何が問題なのですか、それを修正するために何をすべきですか?おかげさまで
こんにちは、有用なものがたくさんあります。私は 'Y.sum(axis = 0).all()'を試み、Trueを返しました。また、私は 'Y.mean(axis = 0).max()'を試して、 '0.315981070258'を返しました。私はまだ 'clf.decision_function'を実装すべきですか?あなたはそれについてもっと具体的にすることができますか、どのように実装するのですか?申し訳ありませんが、私はこれらのもので非常に新しいので、私は 'decision_function'と何をするべきかを理解できませんでした。 – malisit
私は、すべてのゼロ予測を得ていて、そこに1があるはずであることを知っている場合は、代わりに意思決定値を取得し、それがある閾値を上回るたびに1を予測することができます。予測ラベルは '(decision_value> threshold).astype(float)'となります。 0は、分類器が使用している閾値であり、陽性を得ていない閾値であるため、閾値は0未満である。また、インスタンスごとに少なくとも1つの正のラベルがあることがわかっている場合は、DVが最も高いラベルを選択できます(それでも負の値になります)。 – Dthal
ありがとう! GitHubで提供した直感とコードが本当に助けになりました。 – malisit