scikit基础与机器学习入门(10) 模型的评估

除了使用estimator的score函数简单粗略地评估模型的质量之外,在sklearn.metrics模块针对不同的问题类型提供了各种评估指标并且可以创建用户自定义的评估指标

metrics评估指标概述

sklearn.metrics中的评估指标有两类:以_score结尾的为某种得分,越大越好,以_error或_loss结尾的为某种偏差,越小越好。

常用的分类评估指标包括:accuracy_score,f1_score, precision_score,recall_score等。

常用的回归评估指标包括:r2_score,explained_variance_score等等。

常用的聚类评估指标包括:adjusted_rand_score,adjusted_mutual_info_score等等

代码

调用方法:metrics.方法名(真实值,预测值)

from sklearn import metrics
y_pred = [0,0,0,1,1,1,1,1]
y_true = [0,1,0,1,1,0,0,1]
print(metrics.confusion_matrix(y_true,y_pred))
print('准确率:',metrics.accuracy_score(y_true,y_pred))
print('类别精度:',metrics.precision_score(y_true,y_pred,average = None)) #不求平均
print('宏平均精度:',metrics.precision_score(y_true,y_pred,average = 'macro'))
print('微平均召回率:',metrics.recall_score(y_true,y_pred,average = 'micro'))
print('加权平均F1得分:',metrics.f1_score(y_true,y_pred,average = 'weighted'))

利用基于经验的基本策略作比较

比如有一个分类问题,如果有100个样本,其中90个正例,10个反例,那么即使全都预测为正,就能达到90%的正确率,一般的评价指标对于这类问题的评价不敏感,这是可以通过基准来评价模型的优劣性

DummyClassifier 实现了几种简单的分类策略:

  • stratified 通过在训练集类分布方面来生成随机预测.
  • most_frequent 总是预测训练集中最常见的标签.
  • prior 类似most_frequenct,但具有precit_proba方法
  • uniform 随机产生预测.
  • constant 总是预测用户提供的常量标签.

DummyRegressor 实现了四个简单的经验法则来进行回归:

  • mean 总是预测训练目标的平均值.
  • median 总是预测训练目标的中位数.
  • quantile 总是预测用户提供的训练目标的 qua

我们设定一个不平衡的数据集,其标签分布如下所示

scikit基础与机器学习入门(10) 模型的评估

# 比较线性svm分类器和虚拟估计器的得分
from sklearn.dummy import DummyClassifier
from sklearn.svm import SVC
svc = SVC(kernel='linear', C=1).fit(X_train, y_train)
print('linear svc classifier score:',svc.score(X_test, y_test))
dummy = DummyClassifier(strategy='most_frequent',random_state=0)
dummy.fit(X_train, y_train)
print('dummy calssifier score:',dummy.score(X_test, y_test))

此时得到结果

linear svc classifier score: 0.631578947368

dummy calssifier score: 0.578947368421

发现支持向量机的准确率并不高,说明需要改善模型

上一篇:scikit基础与机器学习入门(11) 欠拟合,过拟合和交叉验证


下一篇:scikit基础与机器学习入门(4) sklearn模块数据集的使用——自带数据集和自定义数据集