Matriz de Confusión
Al realizar una predicción para un problema de clasificación binaria, solo existen cuatro resultados posibles:
En la imagen anterior, los valores reales (etiquetas verdaderas) están ordenados de arriba hacia abajo en orden descendente, mientras que los valores predichos están ordenados de izquierda a derecha en orden ascendente. Esta es la disposición predeterminada utilizada por scikit-learn al mostrar matrices de confusión.
Diferentes bibliotecas o visualizaciones pueden utilizar una disposición diferente; por ejemplo, colocar los valores reales en el eje x y los valores predichos en el eje y. Sin embargo, la única diferencia es la disposición; los valores en la matriz permanecen iguales.
Estos resultados se denominan verdadero positivo (TP), verdadero negativo (TN), falso positivo (FP) y falso negativo (FN). "verdadero" o "falso" indica si la predicción es correcta, mientras que "positivo" o "negativo" se refiere a si la clase predicha es 1 o 0.
Esto significa que existen dos tipos de errores que se pueden cometer: falsos positivos y falsos negativos. La predicción de falso positivo también se conoce como error de tipo 1, mientras que la predicción de falso negativo se denomina error de tipo 2.
Matriz de confusión
La primera forma de analizar el rendimiento del modelo es organizar las predicciones en una matriz de confusión como la siguiente:
Puede construir una matriz de confusión en Python utilizando la función confusion_matrix() de sklearn:
from sklearn.metrics import confusion_matrix
conf_matrix = confusion_matrix(y_true, y_pred)
Para una mejor visualización, puede utilizar la función heatmap() de seaborn:
sns.heatmap(conf_matrix)
Aquí tienes un ejemplo de cómo calcular la matriz de confusión para una predicción de Random Forest en el conjunto de datos Titanic:
12345678910111213141516import pandas as pd import seaborn as sns from sklearn.metrics import confusion_matrix from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split # Read the data and assign the variables df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b71ff7ac-3932-41d2-a4d8-060e24b00129/titanic.csv') X, y = df.drop('Survived', axis=1), df['Survived'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1) # Build and train a Random Forest and predict target for a test set random_forest = RandomForestClassifier().fit(X_train, y_train) y_pred = random_forest.predict(X_test) # Build a confusion matrix conf_matrix = confusion_matrix(y_test, y_pred) sns.heatmap(conf_matrix, annot=True);
También es posible graficar los porcentajes en lugar del conteo de instancias utilizando el parámetro normalize:
conf_matrix = confusion_matrix(y_true, y_pred, normalize='all')
12345678910111213141516import pandas as pd import seaborn as sns from sklearn.metrics import confusion_matrix from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split # Read the data and assign the variables df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b71ff7ac-3932-41d2-a4d8-060e24b00129/titanic.csv') X, y = df.drop('Survived', axis=1), df['Survived'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1) # Build and train a Random Forest and predict target for a test set random_forest = RandomForestClassifier().fit(X_train, y_train) y_pred = random_forest.predict(X_test) # Build a confusion matrix conf_matrix = confusion_matrix(y_test, y_pred, normalize='all') sns.heatmap(conf_matrix, annot=True);
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Awesome!
Completion rate improved to 4.17
Matriz de Confusión
Desliza para mostrar el menú
Al realizar una predicción para un problema de clasificación binaria, solo existen cuatro resultados posibles:
En la imagen anterior, los valores reales (etiquetas verdaderas) están ordenados de arriba hacia abajo en orden descendente, mientras que los valores predichos están ordenados de izquierda a derecha en orden ascendente. Esta es la disposición predeterminada utilizada por scikit-learn al mostrar matrices de confusión.
Diferentes bibliotecas o visualizaciones pueden utilizar una disposición diferente; por ejemplo, colocar los valores reales en el eje x y los valores predichos en el eje y. Sin embargo, la única diferencia es la disposición; los valores en la matriz permanecen iguales.
Estos resultados se denominan verdadero positivo (TP), verdadero negativo (TN), falso positivo (FP) y falso negativo (FN). "verdadero" o "falso" indica si la predicción es correcta, mientras que "positivo" o "negativo" se refiere a si la clase predicha es 1 o 0.
Esto significa que existen dos tipos de errores que se pueden cometer: falsos positivos y falsos negativos. La predicción de falso positivo también se conoce como error de tipo 1, mientras que la predicción de falso negativo se denomina error de tipo 2.
Matriz de confusión
La primera forma de analizar el rendimiento del modelo es organizar las predicciones en una matriz de confusión como la siguiente:
Puede construir una matriz de confusión en Python utilizando la función confusion_matrix() de sklearn:
from sklearn.metrics import confusion_matrix
conf_matrix = confusion_matrix(y_true, y_pred)
Para una mejor visualización, puede utilizar la función heatmap() de seaborn:
sns.heatmap(conf_matrix)
Aquí tienes un ejemplo de cómo calcular la matriz de confusión para una predicción de Random Forest en el conjunto de datos Titanic:
12345678910111213141516import pandas as pd import seaborn as sns from sklearn.metrics import confusion_matrix from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split # Read the data and assign the variables df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b71ff7ac-3932-41d2-a4d8-060e24b00129/titanic.csv') X, y = df.drop('Survived', axis=1), df['Survived'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1) # Build and train a Random Forest and predict target for a test set random_forest = RandomForestClassifier().fit(X_train, y_train) y_pred = random_forest.predict(X_test) # Build a confusion matrix conf_matrix = confusion_matrix(y_test, y_pred) sns.heatmap(conf_matrix, annot=True);
También es posible graficar los porcentajes en lugar del conteo de instancias utilizando el parámetro normalize:
conf_matrix = confusion_matrix(y_true, y_pred, normalize='all')
12345678910111213141516import pandas as pd import seaborn as sns from sklearn.metrics import confusion_matrix from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split # Read the data and assign the variables df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b71ff7ac-3932-41d2-a4d8-060e24b00129/titanic.csv') X, y = df.drop('Survived', axis=1), df['Survived'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1) # Build and train a Random Forest and predict target for a test set random_forest = RandomForestClassifier().fit(X_train, y_train) y_pred = random_forest.predict(X_test) # Build a confusion matrix conf_matrix = confusion_matrix(y_test, y_pred, normalize='all') sns.heatmap(conf_matrix, annot=True);
¡Gracias por tus comentarios!