Saltar al contenido

Predecir datos de varias etiquetas con sklearn

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)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *