5,模型评估与选择

务必记住那些指标适合分类,那些适合回归。

一,分类问题

常见的分类模型包括:逻辑回归、决策树、朴素贝叶斯、SVM、神经网络等,
分类的模型评估指标包括以下几种:
1.TPR、FPR&TNR(混淆矩阵)

  • 在二分类问题中,即将实例分成正类(positive)或负类(negative)。对一个二分问题来说,会出现四种情况。如果一个实例是正类并且也被预测成正类,即为真正类(True positive),如果实例是负类被预测成正类,称之为假正类(False
    positive)。相应地,如果实例是负类被预测成负类,称之为真负类(True negative),正类被预测成负类则为假负类(false
    negative)。

  • 真正、假正、真负、假负

  • 真正类率TPR=(真正)/(真正+假负)。实际为真的里面,机器有多少预测对了(是正确率)。

  • 负正类率FPR=(假正)/(假正+真负)。实际为负的里面,机器有多少错认为是真的(是错误率)。

2. 精确率Precision、召回率Recall和F1值
①精确率Precision = (真正)/(真正+假正)。精确率只看预测,不看实际,只看预测出来的正确率是多少。
②召回率Recall=(真正)/(真正+假负)。召回率看的是实际,只看实际为真的里面,机器有多少预测对了。
③一般来说,Precision就是检索出来的条目有多少是准确的,Recall就是所有准确的条目有多少被检索出来了(10个犯罪分子,你抓捕了100人,只逮到8个是正确的,召回率就是0.8,精确率就是0.08(精确率只看预测); 10次地震,你警报拉响100次,其中八次是正确的,召回率就是0.8,准确率就是0.08(精确率只看预测) ;池塘1400条鲤鱼,撒一大网,逮着了700条鲤鱼,200只虾,100只鳖。召回率就是700/1400,准确率就是700/1000(精确率只看预测)
④精准度(又称查准率)和召回率(又称查全率)是一对矛盾的度量。一般来说,查准率高时,查全率往往偏低,而查全率高时,查准率往往偏低。所以通常只有在一些简单任务中,才可能使得查准率和查全率都很高。
⑤F1值 = 正确率 * 召回率 * 2 / (正确率 + 召回率) 。F1较高时则能说明试验方法比较有效。

3. ROC曲线和AUC
ROC是一条曲线,AUC是一个面积值。AUC:ROC曲线下面积,参考线面积为0.5,AUC应大于0.5,且偏离越多越好

分类问题的评估指标

1.看准确率

#  **************************准确率**************************
y_pred = [0, 2, 1, 3,9,9,8,5,8]
y_true = [0, 1, 2, 3,2,6,3,5,9]#1.accuracy_scoreimport numpy as np
from sklearn.metrics import accuracy_scoreaccuracy_score(y_true, y_pred)
Out[127]: 0.33333333333333331accuracy_score(y_true, y_pred, normalize=False)  # 类似海明距离,每个类别求准确后,再求微平均
Out[128]: 3# 2, metricsfrom sklearn import metricsmetrics.precision_score(y_true, y_pred, average='micro')  # 微平均,精确率
Out[130]: 0.33333333333333331metrics.precision_score(y_true, y_pred, average='macro')  # 宏平均,精确率
Out[131]: 0.375metrics.precision_score(y_true, y_pred, labels=[0, 1, 2, 3], average='macro')  # 指定特定分类标签的精确率
Out[133]: 0.5参数average=‘micro’/‘macro’/'weighted’ :macro:计算二分类metrics的均值,为每个类给出相同权重的分值。
当小类很重要时会出问题,因为该macro-averging方法是对性能的平均。
另一方面,该方法假设所有分类都是一样重要的,因此macro-averaging
方法会对小类的性能影响很大micro: 给出了每个样本类以及它对整个metrics的贡献的pair(sample-
weight),而非对整个类的metrics求和,它会每个类的metrics上的权重及
因子进行求和,来计算整个份额。Micro-averaging方法在多标签(multilabel)
问题中设置,包含多分类,此时,大类将被忽略weighted: 对于不均衡数量的类来说,计算二分类metrics的平均,
通过在每个类的score上进行加权实现

2.召回率

#  *************召回率*************
y_pred = [0, 2, 1, 3,9,9,8,5,8]
y_true = [0, 1, 2, 3,2,6,3,5,9]from sklearn import metricsmetrics.recall_score(y_true, y_pred, average='micro')
Out[134]: 0.33333333333333331metrics.recall_score(y_true, y_pred, average='macro')
Out[135]: 0.3125metrics.f1_score(y_true, y_pred, average='weighted')
Out[136]: 0.37037037037037035

3.混淆矩阵

#  *************混淆矩阵*************
y_pred = [0, 2, 1, 3,9,9,8,5,8]
y_true = [0, 1, 2, 3,2,6,3,5,9]from sklearn.metrics import confusion_matrix
confusion_matrix(y_true, y_pred)Out[137]:
array([[1, 0, 0, ..., 0, 0, 0],[0, 0, 1, ..., 0, 0, 0],[0, 1, 0, ..., 0, 0, 1],...,[0, 0, 0, ..., 0, 0, 1],[0, 0, 0, ..., 0, 0, 0],[0, 0, 0, ..., 0, 1, 0]])

4.ROC

#  *************ROC*************
# 1,计算ROC值
import numpy as np
from sklearn.metrics import roc_auc_scorey_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)# 2,ROC曲线
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)

5.海明距离

#  *************海明距离*************
from sklearn.metrics import hamming_loss
y_pred = [1, 2, 3, 4]
y_true = [2, 2, 3, 4]hamming_loss(y_true, y_pred)Out[137]:
0.25

6.Jaccard距离

#  *************Jaccard距离*************
y_pred = [0, 2, 1, 3,4]
y_true = [0, 1, 2, 3,4]import numpy as np
from sklearn.metrics import jaccard_similarity_scorejaccard_similarity_score(y_true, y_pred)
0.5
jaccard_similarity_score(y_true, y_pred, normalize=False)
2

7.classification_report
classification_report中的各项得分的avg/total 是每一分类占总数的比例加权算出来的

from sklearn.metrics import classification_report
y_true = [0, 1, 2, 2, 2]
y_pred = [0, 0, 2, 2, 1]
target_names = ['class 0', 'class 1', 'class 2']print(classification_report(y_true, y_pred, target_names=target_names))
'''precision    recall  f1-score   supportclass 0       0.50      1.00      0.67         1class 1       0.00      0.00      0.00         1class 2       1.00      0.67      0.80         3accuracy                           0.60         5macro avg       0.50      0.56      0.49         5
weighted avg       0.70      0.60      0.61         5
'''

二,回归问题
回归问题的评价测度
(1)MAE,即平均绝对误差(Mean Absolute Error,)
(2) MSE,均方误差(Mean Squared Error)
(3)RMSE,均方根误差(Root Mean Squared Error )
(4)MAE,中值绝对误差(Median absolute error)
(5)EVS,可释方差值(Explained variance score)
(6)R,R方值,确定系数

from sklearn import metrics
import numpy as np
true = [100, 50, 30, 20]#这是一组真实的数据
pred = [90, 50, 50, 30]#这是预测出来的数据
MSE=metrics.mean_squared_error(true, pred)#输出得150.0
RMSE=np.sqrt(metrics.mean_squared_error(true, pred))#输出得12.247
MAE=metrics.median_absolute_error(y_true, y_pred)#中值绝对误差
EVS=metrics.explained_variance_score(y_true, y_pred) #可释方差值
R=metrics.r2_score(y_true, y_pred)#R方值,确定系数

#  *************平均绝对误差(Mean absolute error)*************
from sklearn.metrics import mean_absolute_error
y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
mean_absolute_error(y_true, y_pred)#  *************均方误差(Mean squared error)*************
from sklearn.metrics import mean_squared_error
y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
mean_squared_error(y_true, y_pred)#  *************中值绝对误差(Median absolute error)*************
from sklearn.metrics import median_absolute_error
y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
median_absolute_error(y_true, y_pred)#  *************可释方差值(Explained variance score)************
from sklearn.metrics import explained_variance_score
y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
explained_variance_score(y_true, y_pred) #  *************R方值,确定系数*************
from sklearn.metrics import r2_score
y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
r2_score(y_true, y_pred)

三。交叉验证
5.1 交叉验证
交叉验证cross_val_score的scoring参数

  • 分类:accuracy(准确率)、f1、f1_micro、f1_macro(这两个用于多分类的f1_score)、precision(精确度)、recall(召回率)、roc_auc
  • 回归:neg_mean_squared_error(MSE、均方误差)、r2
  • 聚类:adjusted_rand_score、completeness_score等
from sklearn.model_selection import cross_val_score
cross_val_score(model, X, y=None, scoring=None, cv=None, n_jobs=1)
"""参数
---model:拟合数据的模型cv : k-foldscoring: 打分参数-‘accuracy’、‘f1’、‘precision’、‘recall’ 、‘roc_auc’、'neg_log_loss'等等
"""

关于交叉验证具体请看Python机器学习笔记:sklearn库的学习的“5,模型评估与选择”和“8,几种交叉验证(cross validation)方式的比较”
5.2 检验曲线
使用检验曲线,我们可以更加方便的改变模型参数,获取模型表现。

from sklearn.model_selection import validation_curve
train_score, test_score = validation_curve(model, X, y, param_name, param_range, cv=None, scoring=None, n_jobs=1)
"""参数
---model:用于fit和predict的对象X, y: 训练集的特征和标签param_name:将被改变的参数的名字param_range: 参数的改变范围cv:k-fold返回值
---train_score: 训练集得分(array)test_score: 验证集得分(array)
"""

6 保存模型

最后,我们可以将我们训练好的model保存到本地,或者放到线上供用户使用,那么如何保存训练好的model呢?主要有下面两种方式:
6.1 保存为pickle文件

import pickle# 保存模型
with open('model.pickle', 'wb') as f:pickle.dump(model, f)# 读取模型
with open('model.pickle', 'rb') as f:model = pickle.load(f)
model.predict(X_test)

6.2 sklearn自带方法joblib

from sklearn.externals import joblib# 保存模型
joblib.dump(model, 'model.pickle')#载入模型
model = joblib.load('model.pickle')

7,模型评分

1,模型的score方法:最简单的模型评估方法就是调用模型自己的方法:

# 预测
y_predict = knnClf.predict(x_test)
print("score on the testdata:",knnClf.score(x_test,y_test))

2,sklearn的指标函数:库提供的一些计算方法,常用的有classification_report方法

3,sklearn也支持自己开发评价方法。

(1-4)sklearn库的----模型评估相关推荐

  1. ID3决策树 Python实现 + sklearn库决策树模型的应用

    本文介绍机器学习中决策树算法的python实现过程 共介绍两类方法: (1)亲手实习Python ID3决策树经典算法 (2)利用sklearn库实现决策树算法 关于决策树的原理,指路:机器学习 第四 ...

  2. 利用sklearn库决策树模型对iris数据多分类并进行评估

    1.导入所需要的库 from sklearn.tree import DecisionTreeClassifier from sklearn.datasets import load_iris 2.加 ...

  3. TensorFlow 工程实战(一):在TFhub中下载预训练的pb文件,并使用 TF-Hub 库微调模型评估人物年龄

    实例描述 有一组照片,每个文件夹的名称为具体的年龄,里面放的是该年纪的人物图片. 微调 TF-Hub 库,让模型学习这些样本,找到其中的规律,可以根据具体人物的图片来评估人物的年龄. 即便是通过人眼来 ...

  4. 02_混淆矩阵、准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F值(F-Measure) +Roc曲线和PR曲线+sklearn中分类模型评估API+ 自己补充整理

    此博文参考: 关于ROC绘制参考博文: https://blog.csdn.net/u011630575/article/details/80250177 Python+ROC相关的博文: https ...

  5. Python机器学习(sklearn)——分类模型评估与调参总结(下)

    21.集成方法有随机森林(random forest)和梯度提升树(gradient boosted decision tree)GBDT 随机森林中树的随机化方法有两种: (1)通过选择用于构造树的 ...

  6. python分类算法评估模型_Python机器学习(sklearn)——分类模型评估与调参总结(下)...

    21.集成方法有随机森林(random forest)和梯度提升树(gradient boosted decision tree)GBDT 随机森林中树的随机化方法有两种: (1)通过选择用于构造树的 ...

  7. 使用sklearn库学习线性回归(一)

    目录 1,概述 1.1,判别式方法 1.2,线性回归介绍 1.3,sklearn中的线性回归 2,多元线性回归LinearRegression 2.1,多元线性回归的基本原理 2.2,最小二乘法求解多 ...

  8. 数据挖掘:模型评估指标

    数据挖掘:模型评估 一般在比赛中,我们会看到对于回归(分类)问题,不同的比赛会有不同的评价指标.我们在训练模型时,不能只记住回归问题用均方误差,而不去在意比赛目标的评价指标,这样我们往往会得到比较差的 ...

  9. python机器学习库sklearn——模型评估

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 各类模型评估详细意思参考:https://blog.csdn.net/luanpeng825485697/article/detail ...

最新文章

  1. 2011年的32有用的jQuery插件
  2. 谷歌首款Tensor手机芯片,全是AI炫技,性能一笔带过
  3. 通信基站(dfs回溯,思维)
  4. SQL Cookbook:一、检索记录(1)从表中检索所有行和列
  5. 迄今看到的较为客观的一篇分析编程语言的文章
  6. java环境变量设置的作用_JDK环境变量的配置及作用
  7. 在 Azure Functions 上使用不同的路由前缀
  8. 想不到吧,这些都能用R!
  9. LeetCode刷题第5周小结
  10. c语言 long int最大数,long整型的最大值跟处理器位数有关
  11. js 字符串 转换 html标签,js 字符串转html标签
  12. Android手机截图怎么做,手机截屏怎么弄,教您手机截图方法
  13. 【项目预估】PERT(计划评审技术)
  14. shell脚本里的#!/bin/bash是什么意思
  15. 项目管理-8-径回东土 五圣成真(大结局)
  16. ubuntu 20.10 换源
  17. 简要分析git作用及应公司业务要求分析,什么是响应式和虚拟dom面试题
  18. slide3D插件版本更新
  19. Word Puzzles
  20. 【智能制造】制造业生产线设备用语简介

热门文章

  1. Delphi中MDI父窗体与子窗体菜单合并
  2. Qt编写自定义控件21-圆弧仪表盘
  3. biostar handbook(六)| 序列联配
  4. .net中控件中嵌套控件的用法
  5. 独家 | 商业分析的职业路线-在数据科学世界里规划你的下一个角色
  6. 阴阳师6.23服务器维护,官网:阴阳师6月23日临时停服维护公告
  7. 生物信息_Exon_CDS的区别
  8. 【DevOps】什么是 DevOps?
  9. 为什么macbook不能删除u盘里东西?苹果电脑如何删除u盘文件
  10. 转转消费市场分析:年轻人爱买卖闲置,低碳生活越来越“酷”