机器学习训练营——机器学习爱好者的自由交流空间(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
函数通过计算混淆矩阵评价分类准确率。在一个混淆矩阵里,
项是实际在
组, 预测在
组的观测数。
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函数也能用于多类别分类。
阅读更多精彩内容,请关注微信公众号:统计学习与大数据