これはどのように行われますか?私はSklearnを使ってSVMをトレーニングしています。私のクラスはアンバランスです。私の問題は、マルチクラスであることに注意してくださいので、私はOneVsRestClassifier使用していますMULTILABEL:バランスクラスにマルチラベルSVMにウェイトを割り当てる
mlb = MultiLabelBinarizer()
y = mlb.fit_transform(y_train)
clf = OneVsRestClassifier(svm.SVC(kernel='rbf'))
clf = clf.fit(x, y)
pred = clf.predict(x_test)
私はアンバランスなクラスを説明するためにどこかに「sample_weight」パラメータを追加することはできますか?
私はSVMにclass_weight辞書を追加すると、私はエラーを取得する:
ValueError: Class label 2 not present
私はMLBを使用してバイナリに私のラベルを変換しているためです。しかし、私はラベルを変換しない場合は、私が取得:
ValueError: You appear to be using a legacy multi-label data representation. Sequence of sequences are no longer supported; use a binary array or sparse matrix instead.
class_weightは重量にクラスラベルをマッピング、辞書です:{1:1,2:1,3:3 ...}
ここでは、xとyの詳細は次のとおり
print(X[0])
[ 0.76625633 0.63062721 0.01954162 ..., 1.1767817 0.249034 0.23544988]
print(type(X))
<type 'numpy.ndarray'>
print(y[0])
print(type(y))
[1, 2, 3, 4, 5, 6, 7]
<type 'numpy.ndarray'>
なおMLB = MultiLabelBinarizer()。 y = mlb.fit_transform(y_train)は、yをバイナリ配列に変換します。
ValueError: You appear to be using a legacy multi-label data representation. Sequence of sequences are no longer supported; use a binary array or sparse matrix instead.
したがって、問題は、スパース行列にラベル(np.array)を変換に帰着する:
は推奨的回答は、エラーを生成します。
from scipy import sparse
y_sp = sparse.csr_matrix(y)
これはエラーを生成します。
TypeError: no supported conversion for types: (dtype('O'),)
私はこのための新しいクエリを開きます。
は、あなたが提供できる属性で正常に動作しますxの要素とy? 'print type(x [0])print x [0]'と 'print type(y [0])print y [0]' – dooms
ここで、yはバイナリではありません。 'mlb.classes_'が値2が存在する配列があるかどうかを確認してください。 – dooms
私はラベルをバイナリに変換しようとしました。上記のエラーが生成されます。ValueError:クラスラベル2が存在しません(すべてのラベルがバイナリ形式です)。バイナリに変換しないと、エラーが表示されます。ValueError:従来の複数ラベルのデータ表現を使用しているようです。シーケンスのシーケンスはサポートされなくなりました。代わりに、バイナリ配列またはスパース行列を使用してください。 –