模型评估方法(混淆矩阵)
在数据挖掘或机器学习建模后往往会面临一个问题,就是该模型是否可靠?可靠性如何?也就是说模型的性能如何我们暂时不得而知。
如果模型不加验证就使用,那后续出现的问题将会是不可估计的。所以通常建模后我们都会使用模型评估方法进行验证,当验证结果处于我们的可控范围之内或者效果更佳,那该模型便可以进行后续的进一步操作。
这里又将面临一个新的问题——如何选择评估方法,其实通常很多人都会使用比较简单的错误率来衡量模型的性能,错误率指的是在所有测试样例中错分的样例比例。实际上,这样的度量错误掩盖了样例如何被分错的事实。其实相对于不同的问题会有不同的评估思路:
回归模型:
对于回归模型的评估方法,我们通常会采用平均绝对误差(MAE)、均方误差(MSE)、平均绝对百分比误差(MAPE)等方法。
聚类模型:
对于聚类模型的评估方法,较为常见的一种方法为轮廓系数(Silhouette Coefficient ),该方法从内聚度和分离度两个方面入手,用以评价相同数据基础上不同聚类算法的优劣。
分类模型:
本篇文章将会主要描述分类模型的一种评估方法——混淆矩阵。对于二分类问题,除了计算正确率方法外,我们常常会定义正类和负类,由真实类别(行名)与预测类别(列名)构成混淆矩阵。
首先直观的来看看(混淆矩阵图):
文字详细说明:
- TN:将负类预测为负类(真负类)
- FN:将正类预测为负类(假负类)
- TP:将正类预测为正类(真正类)
- FP:将负类预测为正类(假正类)
最后根据混淆矩阵得出分类模型常用的分类评估指标:
准确率 Accuracy:
测试样本中正确分类的样本数占总测试的样本数的比例。公式如下:
scikit-learn 准确率的计算方法:sklearn.metrics.accuracy_score(y_true, y_pred)
from sklearn.metrics import accuracy_score
accuracy_score(y_test, y_predict)
精确率 Precision:
准确率又叫查准率,测试样本中正确分类为正类的样本数占分类为正类样本数的比例。公式如下:
scikit-learn 精确率的计算方法:sklearn.metrics.precision_score(y_true, y_pred)
from sklearn.metrics import precision_score
precision_score(y_test, y_predict)
召回率 Recall:
召回率又称查全率,测试样本中正确分类为正类的样本数占实际为正类样本数的比例。公式如下:
scikit-learn 召回率的计算方法:sklearn.metrics.recall_score(y_true, y_pred)
from sklearn.metrics import recall_score
recall_score(y_test, y_predict)
F1 值:
F1 值是查准率和召回率的加权平均数。F1 相当于精确率和召回率的综合评价指标,对衡量数据更有利,更为常用。 公式如下:
scikit-learn F1的计算方法:sklearn.metrics.f1_score(y_true, y_pred)
from sklearn.metrics import f1_score
f1_score(y_test, y_predict)
ROC 曲线:
在部分分类模型中(如:逻辑回归),通常会设置一个阈值如0.5,当大于0.5归为正类,小于则归为负类。因此,当减小阈值如0.4时,模型将会划分更多测试样本为正类。这样的结果是提高了正类的分类率,但同时也会使得更多负类被错分为正类。
在ROC 曲线中有两个参数指标——TPR、FPR,公式如下:
TPR 代表能将正例分对的概率(召回率),而 FPR 则代表将负例错分为正例的概率。
TPR作为ROC 曲线的纵坐标,FPR作为ROC曲线的横坐标,如下图:
由图可得:
当 FPR=0,TPR=0 时,意味着将每一个实例都预测为负例。
当 FPR=1,TPR=1 时,意味着将每一个实例都预测为正例。
当 FPR=0,TPR=1 时,意味着为最优分类器点。
所以一个优秀的分类器对应的ROC曲线应该尽量靠近左上角,越接近45度直线时效果越差。
scikit-learn ROC曲线的计算方法:
sklearn.metrics.roc_curve(y_true, y_score)
AUC 值:
AUC 的全称为 Area Under Curve,意思是曲线下面积,即 ROC 曲线下面积 。通过AUC我们能得到一个准确的数值,用来衡量分类器好坏。
AUC=1:最佳分类器。
0.5<AUC<1:分类器优于随机猜测。
AUC=0.5:分类器和随机猜测的结果接近。
AUC<0.5:分类器比随机猜测的结果还差。
scikit-learn AUC的计算方法:
sklearn.metrics.auc(y_true, y_score)
from matplotlib import pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_curve
from sklearn.metrics import aucmodel = LogisticRegression()
model.fit(X_train,y_train.ravel())y_score = model.decision_function(X_test) # model训练好的分类模型
fpr, tpr, _ = roc_curve(y_test, y_score) # 获得FPR、TPR值
roc_auc = auc(fpr, tpr) # 计算AUC值plt.plot(fpr, tpr, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', linestyle='--')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.legend()
plt.show()
由于(精准率、召回率)与(偏差、方差)很相似,都是一对需要平衡的衡量值,(偏差、方差)衡量模型的拟合能力与泛化能力,而(精准率、召回率)则需要考虑的情况更多,主要如下3点:
1:如果某个业务需要控制一定的成本,同时还想要最大限制的预测出更多的问题。(精确率、召回率 平衡)
2:(极端情况)如果某个业务成本可以最大化,只要得出所有的可能性。(牺牲精确率,提高召回率)
3:(极端情况)如果某个业务成本需要最小化,只要模型不出错即可。(牺牲召回率,提高精确率)
提高阈值,如逻辑回归中修改sigmoid函数的判断阈值k=0.5,我们来看看精确率与召回率的变化情况:
1:提高k大于0.5,精确率提高,召回率下降
2:降低k小于0.5,精确率下降,召回率提高
模型评估方法(混淆矩阵)相关推荐
- R语言使用yardstick包的conf_mat函数计算多分类(Multiclass)模型的混淆矩阵、并使用summary函数基于混淆矩阵输出分类模型评估的其它详细指标(kappa、npv等13个)
R语言使用yardstick包的conf_mat函数计算多分类(Multiclass)模型的混淆矩阵(confusion matrix).并使用summary函数基于混淆矩阵输出分类模型评估的其它详细 ...
- sklearn使用投票器VotingClassifier算法构建多模型融合的软投票器分类器(soft voting)并自定义子分类器的权重(weights)、计算融合模型的混淆矩阵、可视化混淆矩阵
sklearn使用投票器VotingClassifier算法构建多模型融合的软投票器分类器(soft voting)并自定义子分类器的权重(weights).计算融合模型的混淆矩阵.可视化混淆矩阵 目 ...
- sklearn使用投票器VotingClassifier算法构建多模型融合的软投票器分类器(soft voting)并计算融合模型的混淆矩阵、可视化混淆矩阵(confusion matrix)
sklearn使用投票器VotingClassifier算法构建多模型融合的软投票器分类器(soft voting)并计算融合模型的混淆矩阵.可视化混淆矩阵(confusion matrix) 目录
- sklearn使用投票器VotingClassifier算法构建多模型融合的硬投票器分类器(hard voting)并计算融合模型的混淆矩阵、可视化混淆矩阵(confusion matrix)
sklearn使用投票器VotingClassifier算法构建多模型融合的硬投票器分类器(hard voting)并计算融合模型的混淆矩阵.可视化混淆矩阵(confusion matrix) 目录
- 混淆矩阵评价指标_机器学习模型评价指标 -- 混淆矩阵
机器学习模型评价指标 – 混淆矩阵 在机器学习领域中,混淆矩阵(confusion matrix)是一种评价分类模型好坏的形象化展示工具.其中,矩阵的每一列表示的是模型预测的样本情况:矩阵的每一行表示 ...
- 分类模型计算混淆矩阵
1. 什么是混淆矩阵 混淆矩阵是评判模型结果的一种指标,属于模型评估的一部分,常用于评判分类器的优劣.即,混淆矩阵是评判模型结果的指标,属于模型评估的一部分. 此外,混淆矩阵多用于判断分类器(Clas ...
- 机器学习模型评价指标 -- 混淆矩阵
机器学习模型评价指标 – 混淆矩阵 在机器学习领域中,混淆矩阵(confusion matrix)是一种评价分类模型好坏的形象化展示工具.其中,矩阵的每一列表示的是模型预测的样本情况:矩阵的每一行表示 ...
- 人工智能学习07--pytorch11--分类网络:使用pytorch和tensorflow计算分类模型的混淆矩阵
师兄说学目标检测之前先学分类 坏了,内容好多!学学学 感谢up主,好人一生平安 混淆矩阵 什么是混淆矩阵: 横坐标:每一列属于该类的所有验证样本.每一列所有元素对应真实类别. 纵坐标:网络的预测类别. ...
- 机器学习模型评估——混淆矩阵
混淆矩阵 什么是混淆矩阵(Confusion Matrix)?我们在做分类问题时会用到机器学习分类模型,不管是二分类还是多分类问题,我们都要对模型的性能进行评估,看看模型的分类效果是否好,有多好!我们 ...
- 分类模型之混淆矩阵(Confusion Matrix)
目录 混淆矩阵简介 混淆矩阵及其参数 混淆矩阵的其他指标 混淆矩阵简介 混淆矩阵是ROC曲线绘制的基础,同时它也是衡量分类型模型准确度中最基本,最直观,计算最简单的方法. 可以简单理解为:将一个分类模 ...
最新文章
- zookeeper都有哪些使用场景
- python 替换空格
- inurllay old.php id,搜索技巧
- [html] 列举下哪些块元素里面不能放哪些块元素呢?
- Linux文件属性4——读取目录文件
- flask 中文编码解码
- UVa 10003 Cutting Sticks(区间DP)
- matlab legend下划线,MATLAB 画图 legend
- 2017年域名从Godaddy转移到Namesilo过程全记录
- 刚工作2年时15k运维工程师-简历
- 全系T*镀膜认证镜头 vivo X70系列夜拍体验再升级
- 求最大值-本题目要求读入2个整数A和B,然后输出两个数的最大值
- 同一个网址电脑手机访问显示不同内容思路
- 什么是多线程?实现多线程有哪俩种编程方式
- 计算机语言mid是什么意思,MID是什么
- 基于Rplidar二维雷达使用Hector_SLAM算法在ROS中建图
- ChatGPT、低代码等技术出现会不会导致底层程序员失业
- 线性回归-简单线性回归
- 命名空间中不存在类型或命名空间名称。是否缺少程序集引用?
- Vue指令超详细演示理解