【sklearn第二十六讲】模型评价

机器学习训练营——机器学习爱好者的自由交流空间(qq 群号:696721295)

scikit-learn有三种不同的API评价一个模型的预测质量。

  • 估计量分数方法:估计量的score方法,对于设计解决的问题提供了一个默认的评价准则。

  • 分数参数:使用交叉验证的模型评价工具依赖一个内部的打分策略。

  • 测度函数:metrics模块提供评价模型预测误差的函数。

分数参数:定义模型评价规则

普遍的情况:预定义值

对于大多数普遍使用的例子,你能够使用scoring参数定义一个分数对象,下表列出了所有可能的值。所有分数对象都遵守的规则是:返回值越高越好。
这里写图片描述
用法例子:
这里写图片描述

从测度函数定义分数策略

sklearn.metrics模块提供一套简单的函数,提供给定真实情况下的预测误差。

  • _score编辑的函数,返回值越大越好。

  • _error or _loss编辑的函数,返回值越小越好。如果使用make_scorer转换成一个分数对象,将参数greater_is_better设为False.

一个典型的使用情况是,从具有非默认值参数的库里wrap一个存在的测度函数。例如,fbeta_score函数的beta参数。

from sklearn.metrics import fbeta_score, make_scorer
ftwo_scorer = make_scorer(fbeta_score, beta=2)
from sklearn.model_selection import GridSearchCV
from sklearn.svm import LinearSVC
grid = GridSearchCV(LinearSVC(), param_grid={'C': [1, 10]}, scoring=ftwo_scorer)

使用多测度评价

Scikit-learn也允许在GridSearchCV, RandomizedSearchCV and cross_validate里使用多测度评价。有两种方式指定scoring参数的多测度评价。

  • 作为一个可迭代的字符串测度。
scoring = ['accuracy', 'precision']
  • 作为一个映射分数名字到分数函数的字典。
from sklearn.metrics import accuracy_score
from sklearn.metrics import make_scorer
scoring = {'accuracy': make_scorer(accuracy_score),
            'prec': 'precision'}

分类测度

sklearn.metrics模块执行几个损失、分数和工具函数测量分类表现。大多数执行允许每一个样本通过参数sample_weight提供一个整体分数的加权贡献。

准确分数

accuracy_score函数计算准确率(accuracy), 默认是正确预测的比例,或者数量(normalize=False). 在多类别分类里,函数返回子集准确率。如果预测标签的完整集严格匹配标签的真实集,那么子集预测率是1, 否则是0.

import numpy as np
from sklearn.metrics import accuracy_score
y_pred = [0, 2, 1, 3]
y_true = [0, 1, 2, 3]
accuracy_score(y_true, y_pred)
accuracy_score(y_true, y_pred, normalize=False)

混淆矩阵

confusion_matrix函数通过计算混淆矩阵评价分类准确率。在一个混淆矩阵里, i , j 项是实际在 i 组, 预测在 j 组的观测数。

from sklearn.metrics import confusion_matrix
y_true = [2, 0, 2, 2, 0, 1]
y_pred = [0, 0, 2, 2, 0, 2]
confusion_matrix(y_true, y_pred)

下面是一个混淆矩阵的可视化表示
这里写图片描述
对于二值问题,我们能计数真阴性、假阳性、假阴性和真阳性。

y_true = [0, 0, 0, 1, 1, 1, 1, 1]
y_pred = [0, 1, 0, 1, 0, 1, 0, 1]
tn, fp, fn, tp = confusion_matrix(y_true, y_pred).ravel()
tn, fp, fn, tp

分类报告

classification_report函数创建一个显示主要分类测度的文本报告。下面是使用定制target_names和推断标签的小例子:

from sklearn.metrics import classification_report
y_true = [0, 1, 2, 2, 0]
y_pred = [0, 0, 2, 1, 0]
target_names = ['class 0', 'class 1', 'class 2']
print(classification_report(y_true, y_pred, target_names=target_names))

ROC

roc_curve函数计算Receiver operating characteristic曲线。该函数要求真实的二值和目标分数,目标分数可以是真实阳性类的概率估计、置信值、二值决策。下面举一个使用roc_curve函数的例子。

import numpy as np
from sklearn.metrics import roc_curve
y = np.array([1, 1, 2, 2])
scores = np.array([0.1, 0.4, 0.35, 0.8])
fpr, tpr, thresholds = roc_curve(y, scores, pos_label=2)
fpr
tpr
thresholds

下图显示了一个ROC曲线的例子。
这里写图片描述
roc_auc_score计算ROC曲线下的面积,记为AUC. 通过计算AUC, 将曲线信息概括为一个数值。

import numpy as np
from sklearn.metrics import roc_auc_score
y_true = np.array([0, 0, 1, 1])
y_scores = np.array([0.1, 0.4, 0.35, 0.8])
roc_auc_score(y_true, y_scores)

ROC曲线不要求为每一个标签优化一个阈值。如果预测输出已经被二值化,roc_auc_score函数也能用于多类别分类。
这里写图片描述

阅读更多精彩内容,请关注微信公众号:统计学习与大数据

猜你喜欢

转载自blog.csdn.net/wong2016/article/details/81479665