¿Puedo obtener una lista de predicciones erróneas en la función de puntuación de SVM en scikit-learn?

Podemos usar svm.SVC.score() para evaluar la precisión del modelo SVM. Quiero obtener la clase predicha y la clase real en caso de predicciones erróneas. ¿Cómo puedo lograr esto en scikit-learn ?

El enfoque más simple es simplemente iterar sobre sus predicciones (y corregir las clasificaciones) y hacer lo que quiera con el resultado (en el siguiente ejemplo, lo imprimiré en stdout).

Asummos que sus datos están en entradas, tags, y que su SVM entrenado está en clf, entonces puede hacerlo

 predictions = clf.predict(inputs) for input, prediction, label in zip(inputs, predictions, labels): if prediction != label: print(input, 'has been classified as ', prediction, 'and should be ', label) 

Depende de la forma en que desee que estén las predicciones incorrectas. Para la mayoría de los casos de uso, una matriz de confusión debería ser suficiente.

Una matriz de confusión es una gráfica de la clase real frente a la clase predicha, de modo que la diagonal de la gráfica son todas las predicciones correctas, y las celdas restantes son las predicciones incorrectas.

Matriz de confusión

Puede ver un mejor ejemplo de una matriz de confusión en el ejemplo de la Matriz de Confusión de sklearn.

Si solo desea una lista de todos los valores mal clasificados con sus clases predichas y reales, puede hacer algo como lo siguiente.

Simplemente seleccione todas las filas de datos donde las clases reales y pronosticadas no sean iguales.

 import numpy as np import pandas as pd X = np.array([0.1, 0.34, 0.2, 0.98]) y = np.array(["A", "B", "A", "C"]) y_pred = np.array(["A", "C", "B", "C"]) df = pd.DataFrame(X, columns=["X"]) df["actual"] = y df["predicted"] = y_pred incorrect = df[df["actual"] != df["predicted"]] 

En este caso incorrect contendría las siguientes entradas.

  X actual predicted 1 0.34 BC 2 0.20 AB 

Puedes hacer directamente una matriz de confusión usando sklearn. Da una matriz (2×2).

 from sklearn import metrics my_matrix = metrics.confusion_matrix(Y_test, Y_predicted) 

Y_test: Array de tu clase de prueba

Y_predicted: matriz de predicciones de tu modelo

Las celdas de la matriz de confusión le darán: valores positivos verdaderos, valores positivos falsos, valores negativos falsos y valores negativos verdaderos.

Por favor, eche un vistazo a esto .