Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Matriz de Confusão | Comparando Modelos
Classificação com Python

bookMatriz 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.

Note
Nota

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:

12345678910111213141516
import 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);
copy

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')
12345678910111213141516
import 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);
copy
question mark

Qual é o propósito da matriz de confusão?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 5. Capítulo 1

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Awesome!

Completion rate improved to 4.17

bookMatriz 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.

Note
Nota

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:

12345678910111213141516
import 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);
copy

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')
12345678910111213141516
import 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);
copy
question mark

Qual é o propósito da matriz de confusão?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 5. Capítulo 1
some-alt