«Анализ данных Pandas» (7) — оценка модели

анализ данных
«Анализ данных Pandas» (7) — оценка модели

Глава 3 Построение и оценка модели — Оценка

Согласно моделированию предыдущей модели, мы знаем, как использовать библиотеку sklearn для завершения моделирования, а также известное нам разделение набора данных и так далее. Так как же узнать, хороша модель или нет? Чтобы мы могли с уверенностью использовать результаты, данные мне моделью? Тогда сегодняшняя оценка обучения будет очень кстати. Загрузите следующую библиотеку

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from IPython.display import Image
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
%matplotlib inline
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
plt.rcParams['figure.figsize'] = (10, 6)  # 设置输出图片大小

Задача: загрузить данные и сплит-тест и обучающие наборы

from sklearn.model_selection import train_test_split
# 一般先取出X和y后再切割,有些情况会使用到未切割的,这时候X和y就可以用,x是清洗好的数据,y是我们要预测的存活数据'Survived'
data = pd.read_csv('clear_data.csv')
train = pd.read_csv('train.csv')
X = data
y = train['Survived']
# 对数据集进行切割
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=0)
# 默认参数逻辑回归模型
lr = LogisticRegression()
lr.fit(X_train, y_train)

Оценка модели

  • Оценка модели заключается в том, чтобы знать способность модели к обобщению.
  • Перекрестная проверка — это статистический метод оценки эффективности обобщения, который является более стабильным и всеобъемлющим, чем метод разделения обучающей выборки и тестовой выборки по одному разу.
  • При перекрестной проверке данные делятся несколько раз, и необходимо обучить несколько моделей.
  • Наиболее часто используемой перекрестной проверкой является перекрестная проверка k-кратной, где k — число, указанное пользователем, обычно 5 или 10.
  • Точность измеряет, сколько образцов, которые, по прогнозам, будут положительными, являются истинно положительными.
  • Отзыв измеряет, сколько положительных образцов прогнозируется как положительные.
  • f-оценка - это среднее гармоническое точности и отзыва

Задача 1: перекрестная проверка

  • Оцените предыдущую модель логистической регрессии с 10-кратной перекрестной проверкой
  • Вычислить среднее значение точности перекрестной проверки

Перекрестная проверка

output.png

Совет 4

  • Модуль перекрестной проверки в sklearn естьsklearn.model_selection
from sklearn.model_selection import cross_val_score
lr = LogisticRegression(C=100)
scores = cross_val_score(lr, X_train, y_train, cv=10)
# k折交叉验证分数
scores

image.png

# 平均交叉验证分数
print("Average cross-validation score: {:.2f}".format(scores.mean()))
# Average cross-validation score: 0.79

Думай 4

  • Какое влияние окажет большее количество k-кратностей?

думаю ответ: чем больше k-кратность, тем надежнее результат: средняя ошибка считается ошибкой обобщения, но соответствующее затраченное время растет линейно.

Задача 2: Матрица путаницы

  • Вычисление матрицы путаницы для задачи бинарной классификации
  • Расчет точности, отзыва и f-показателей

матрица путаницы

output.png

Accuracy (точность), Precision (точность), полнота, метод расчета f-score

output.png

Совет 5

  • Метод матрицы путаницы в sklearnsklearn.metricsмодуль
  • Матрица путаницы требует ввода истинных меток и предсказанных меток
  • Можно использовать точность, полноту и f-оценку.classification_reportмодуль
from sklearn.metrics import confusion_matrix
# 训练模型
lr = LogisticRegression(C=100)
lr.fit(X_train, y_train)
# 模型预测结果
pred = lr.predict(X_train)
# 混淆矩阵
confusion_matrix(y_train, pred)

image.png

from sklearn.metrics import classification_report
# 精确率、召回率以及f1-score
print(classification_report(y_train, pred))

image.png

Задача три: кривая ROC

  • Постройте кривую ROC

[Размышление] Что такое кривая OCR и для решения какой проблемы существует кривая OCR?

Использованная литература:Кривая ROC и значение AUC показателей эффективности классификатора для машинного обучения

Совет 6

  • Модуль кривой ROC в sklearnsklearn.metrics
  • Чем больше площадь, ограниченная ROC-кривой, тем лучше.
from sklearn.metrics import roc_curve
fpr, tpr, thresholds = roc_curve(y_test, lr.decision_function(X_test))
plt.plot(fpr, tpr, label="ROC Curve")
plt.xlabel("FPR")
plt.ylabel("TPR (recall)")
# 找到最接近于0的阈值
close_zero = np.argmin(np.abs(thresholds))
plt.plot(fpr[close_zero], tpr[close_zero], 'o', markersize=10, label="threshold zero", fillstyle="none", c='k', mew=2)
plt.legend(loc=4)

output.png

мышление 6

  • Как нарисовать кривую ROC для задачи множественной классификации

Использованная литература:Мультиклассификационная кривая ROC и расчет AUC

[Подумав] Какую информацию вы можете получить из этой кривой OCR? Что может эта информация?

  • Одна ROC-кривая полностью «охватывает» другую ROC-кривую -> первый обучающийся работает лучше
  • Две кривые ROC пересекаются -> используйте площадь под кривой ROC (AUC, площадь под кривой ROC, является числовым значением), чтобы сравнить эффект обучаемого