Matriz de Confusão
Ao fazer uma previsão para um problema de classificação binária, existem apenas quatro resultados possíveis:
Na imagem acima, os valores reais (rótulos verdadeiros) estão ordenados de cima para baixo em ordem decrescente, enquanto os valores previstos estão ordenados da esquerda para a direita em ordem crescente. Este é o layout padrão utilizado pelo scikit-learn ao exibir matrizes de confusão.
Diferentes bibliotecas ou visualizações podem utilizar um arranjo diferente – por exemplo, colocando os valores reais no eixo x e os valores previstos no eixo y. No entanto, a única diferença é o layout; os valores na matriz permanecem os mesmos.
Esses resultados são chamados de verdadeiro positivo (TP), verdadeiro negativo (TN), falso positivo (FP) e falso negativo (FN). "verdadeiro" ou "falso" indica se a previsão está correta, enquanto "positivo" ou "negativo" refere-se a se a classe prevista é 1 ou 0.
Isso significa que existem dois tipos de erros que podem ser cometidos: falsos positivos e falsos negativos. A previsão de falso positivo também é conhecida como erro tipo 1, enquanto a previsão de falso negativo é chamada de erro tipo 2.
Matriz de Confusão
A primeira maneira de analisar o desempenho do modelo é organizar as previsões em uma matriz de confusão como esta:
Você pode construir uma matriz de confusão em Python usando a função confusion_matrix() do sklearn:
from sklearn.metrics import confusion_matrix
conf_matrix = confusion_matrix(y_true, y_pred)
Para melhor visualização, é possível utilizar a função heatmap() do seaborn:
sns.heatmap(conf_matrix)
Aqui está um exemplo de como calcular a matriz de confusão para uma previsão de Random Forest no conjunto de dados 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);
Também é possível plotar as porcentagens em vez das contagens de instâncias utilizando o 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);
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Awesome!
Completion rate improved to 4.17
Matriz de Confusão
Deslize para mostrar o menu
Ao fazer uma previsão para um problema de classificação binária, existem apenas quatro resultados possíveis:
Na imagem acima, os valores reais (rótulos verdadeiros) estão ordenados de cima para baixo em ordem decrescente, enquanto os valores previstos estão ordenados da esquerda para a direita em ordem crescente. Este é o layout padrão utilizado pelo scikit-learn ao exibir matrizes de confusão.
Diferentes bibliotecas ou visualizações podem utilizar um arranjo diferente – por exemplo, colocando os valores reais no eixo x e os valores previstos no eixo y. No entanto, a única diferença é o layout; os valores na matriz permanecem os mesmos.
Esses resultados são chamados de verdadeiro positivo (TP), verdadeiro negativo (TN), falso positivo (FP) e falso negativo (FN). "verdadeiro" ou "falso" indica se a previsão está correta, enquanto "positivo" ou "negativo" refere-se a se a classe prevista é 1 ou 0.
Isso significa que existem dois tipos de erros que podem ser cometidos: falsos positivos e falsos negativos. A previsão de falso positivo também é conhecida como erro tipo 1, enquanto a previsão de falso negativo é chamada de erro tipo 2.
Matriz de Confusão
A primeira maneira de analisar o desempenho do modelo é organizar as previsões em uma matriz de confusão como esta:
Você pode construir uma matriz de confusão em Python usando a função confusion_matrix() do sklearn:
from sklearn.metrics import confusion_matrix
conf_matrix = confusion_matrix(y_true, y_pred)
Para melhor visualização, é possível utilizar a função heatmap() do seaborn:
sns.heatmap(conf_matrix)
Aqui está um exemplo de como calcular a matriz de confusão para uma previsão de Random Forest no conjunto de dados 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);
Também é possível plotar as porcentagens em vez das contagens de instâncias utilizando o 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);
Obrigado pelo seu feedback!