2016-05-06 6 views
3

でマルチラベルデータを予測、OneVsRest分類器は、マルチラベル分類をサポートしていますhttp://scikit-learn.org/stable/modules/multiclass.html#multilabel-learningは、ドキュメントによるとsklearn

は、ここで私が実行しようとしているコードです:

from sklearn import metrics 
from sklearn.preprocessing import MultiLabelBinarizer 
from sklearn.multiclass import OneVsRestClassifier 
from sklearn.cross_validation import train_test_split 
from sklearn.svm import SVC 

x = [[1,2,3],[3,3,2],[8,8,7],[3,7,1],[4,5,6]] 
y = [['bar','foo'],['bar'],['foo'],['foo','jump'],['bar','fox','jump']] 

y_enc = MultiLabelBinarizer().fit_transform(y) 

train_x, train_y, test_x, test_y = train_test_split(x, y_enc, test_size=0.33) 

clf = OneVsRestClassifier(SVC()) 
clf.fit(train_x, train_y) 
predictions = clf.predict_proba(test_x) 

my_metrics = metrics.classification_report(test_y, predictions) 
print my_metrics 

私は次のエラーを取得する:

Traceback (most recent call last): 
    File "multilabel.py", line 178, in <module> 
    clf.fit(train_x, train_y) 
    File "/sklearn/lib/python2.6/site-packages/sklearn/multiclass.py", line 277, in fit 
    Y = self.label_binarizer_.fit_transform(y) 
    File "/sklearn/lib/python2.6/site-packages/sklearn/base.py", line 455, in fit_transform 
    return self.fit(X, **fit_params).transform(X) 
    File "/sklearn/lib/python2.6/site-packages/sklearn/preprocessing/label.py", line 302, in fit 
    raise ValueError("Multioutput target data is not supported with " 
ValueError: Multioutput target data is not supported with label binarization 

MultiLabelBinarizerを使用していない場合、同じエラーが発生するため、問題ではないと想定しています。誰もがマルチラベルデータにこの分類子を使用する方法を知っていますか?

答えて

4

train_test_split()出力が正しくありません。この行を変更します。これに

train_x, train_y, test_x, test_y = train_test_split(x, y_enc, test_size=0.33)

を:また

train_x, test_x, train_y, test_y = train_test_split(x, y_enc, test_size=0.33)

を、代わりに、クラス予測の確率を使用するには、SVC(probability = True)SVC()を変更し、clf.predictclf.predict_probaを変更する必要があります。

はすべて一緒にそれを置く:私はそれを実行したときに

from sklearn import metrics 
from sklearn.preprocessing import MultiLabelBinarizer 
from sklearn.multiclass import OneVsRestClassifier 
from sklearn.cross_validation import train_test_split 
from sklearn.svm import SVC 


x = [[1,2,3],[3,3,2],[8,8,7],[3,7,1],[4,5,6]] 
y = [['bar','foo'],['bar'],['foo'],['foo','jump'],['bar','fox','jump']] 

mlb = MultiLabelBinarizer() 
y_enc = mlb.fit_transform(y) 

train_x, test_x, train_y, test_y = train_test_split(x, y_enc, test_size=0.33) 

clf = OneVsRestClassifier(SVC(probability=True)) 
clf.fit(train_x, train_y) 
predictions = clf.predict(test_x) 

my_metrics = metrics.classification_report(test_y, predictions) 
print my_metrics 

これは私にエラーを与えません。

+0

テキストのリストからx DataFrameをどのように派生させますか? – MyopicVisage

2

OneVsRestClassifierで「ValueError:複数出力のターゲットデータがラベルの二値化でサポートされていません」というエラーが発生しました。私の問題は、np.array()でキャストした後、 "list"というトレーニングデータのタイプが原因で発生しました。

関連する問題