Solución:
Tu train_test_split()
la salida no es correcta. Cambie esta línea:
train_x, train_y, test_x, test_y = train_test_split(x, y_enc, test_size=0.33)
A esto:
train_x, test_x, train_y, test_y = train_test_split(x, y_enc, test_size=0.33)
Además, para usar probabilidades en lugar de predicciones de clase, deberá cambiar SVC()
para SVC(probability = True)
y cambio clf.predict_proba
para clf.predict
.
Poniendolo todo junto:
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
Esto no me da errores cuando lo ejecuto.
También experimenté “ValueError: Los datos de destino de salida múltiple no son compatibles con la binarización de etiquetas” con OneVsRestClassifier. Mi problema fue causado por el tipo de datos de entrenamiento que era “lista”, después de lanzar con np.array (), funciona.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)