Матриця Плутанини
Свайпніть щоб показати меню
Під час здійснення передбачення для задачі бінарної класифікації існує лише чотири можливі результати:
На зображенні вище фактичні значення (істинні мітки) впорядковані зверху вниз у спадному порядку, а передбачені значення впорядковані зліва направо у зростаючому порядку. Це стандартне розташування, яке використовується у scikit-learn для відображення матриць плутанини.
Різні бібліотеки або візуалізації можуть використовувати інше розташування — наприклад, розміщувати фактичні значення на осі x, а передбачені значення на осі y. Однак відмінність полягає лише у розташуванні; значення у матриці залишаються незмінними.
Ці результати називаються істинно позитивний (TP), істинно негативний (TN), хибно позитивний (FP) та хибно негативний (FN). "істинно" або "хибно" вказує, чи є передбачення правильним, а "позитивний" або "негативний" стосується того, чи є передбачений клас 1 або 0.
Це означає, що існує два типи помилок: хибно позитивні та хибно негативні. Хибно позитивне передбачення також відоме як помилка 1 типу, а хибно негативне передбачення називають помилкою 2 типу.
Матриця плутанини
Перший спосіб оцінити ефективність моделі — організувати передбачення у матрицю плутанини наступним чином:
Ви можете побудувати матрицю плутанини в Python за допомогою функції confusion_matrix() з пакету sklearn:
from sklearn.metrics import confusion_matrix
conf_matrix = confusion_matrix(y_true, y_pred)
Для кращої візуалізації можна використати функцію heatmap() з пакету seaborn:
sns.heatmap(conf_matrix)
Ось приклад обчислення матриці плутанини для прогнозу Random Forest на наборі даних 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);
Можна також побудувати відсоткові значення замість кількості екземплярів, використовуючи параметр 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);
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат