![146c7ad1578918308797b55c93d141e1.png](https://img-blog.csdnimg.cn/img_convert/146c7ad1578918308797b55c93d141e1.png)
想必大家都知道,构建机器学习模型就是为了能够更好的训练我们的数据集,使得模型的准确率达到最大,那么当我们构建好了我们的学习模型,可以通过哪些指标来评估我们模型的好坏呢?这就是我今天要给大家介绍的内容。
一.精确率与召回率
1.混淆矩阵
在分类过程中,预测结果与正确标记之间存在四种不同的组合,构成了混淆矩阵。(适用于多分类)
![75df6550afc90d40f58c65f8c1fa10e7.png](https://img-blog.csdnimg.cn/img_convert/75df6550afc90d40f58c65f8c1fa10e7.png)
2.精确率:预测结果为正例的样本中真实为正例的比例
![d26ea92c2b70c125e8aae5ce6829f1e0.png](https://img-blog.csdnimg.cn/img_convert/d26ea92c2b70c125e8aae5ce6829f1e0.png)
3.召回率:真实为正例的样本中预测结果为正例的比例(查得全,对得能力)
![a89399e0b38a226e4ddf1f053231d09e.png](https://img-blog.csdnimg.cn/img_convert/a89399e0b38a226e4ddf1f053231d09e.png)
4.F1—score:反映了模型的健稳性
![890e41670ddb70ee250e0d03a9fcb7c3.png](https://img-blog.csdnimg.cn/img_convert/890e41670ddb70ee250e0d03a9fcb7c3.png)
5.分类评估报告API
sklearn.metrics.classification_reporty(y _true ,Y _predict, labels =[], target_ names = None)
y_true:真实的目标值
y_predict : 估计器预测目标值
labels :指定类别对应得数字
return : 每个类别的精确率与召回率
二.ROC曲线与AUC指标
总共有100个人,如果有99个样本为癌症患者,1个样本为非癌症患者----此时样本不均衡
不管怎么样我全部都预测为正例(默认癌症为正例)--此时该模型就会显得太粗暴,不能正确预测出样本中癌症患者数目。
此时该问题的精确率:99%;召回率: 9 9/99 = 100 %。此时用召回率这个指标来评估模型的准确性就会出现误差,实际情况的召回率 会低于1.
- 问题:如何衡量样本不均衡下的评估
- 此时我们需要引入新的评价指标:ROC曲线与AUC指标
1.TPR与FPR
TPR= TP/(TP+FN) 所有真实类别为1 的样本中,预测类别为1 的样本比例
FPR=FP/(FP + TN )所有真实类别为0的样本中,预测类别为1 的比例
ROC曲线的横轴是FTPRATE,纵轴是TPRate ,当两者相等时,表示不论真实类别是1还是0的样本,分类器预测为1的概率是相等的,此时AUC为0.5
![01fefa981388e86090828bcf901a05c3.png](https://img-blog.csdnimg.cn/img_convert/01fefa981388e86090828bcf901a05c3.png)
- AUC曲线的意义随机取一对正负样本,正样本得分大于负样本的概率
- AUC的最小值为0.5,最大值为1,取值越高分类效果越好
- AUC=1,是一个完美分类器
- 0.5<AUC<1,优于随机猜测,如果该分类模型妥善设定阈值,能有预测价值。
- 最终AUC的范围在0.5 到1 之间,并且越加接近1越好。
2.AUC计算的API
sklearn.metrics import roc_auc score(y_true, y_score)
- 计算ROC曲线的面积即为AUC值
- y_true :每个样本的真实类别,必须为0 (反例),1(正例)标记
- y_score: 预测得分可以是正类的估计概率,置信值或者分类器方法的返回值
三.模型的保存与加载
当训练好模型后,如果别人需要我们提供预测结果,就需要保存模型,主要是保存模型的参数。
API:from sklearn.externals import joblib
保存: joblib.dump(,"xxxx.pkl")
加载 : estimator= joblib.load("xxxx.pkl")
必须保存为PKL文件形式
#模型保存与加载
from sklearn.externals import joblib
#保存模型
joblib.dump(estimator,"my_ridge.pkl")
#加载模型
estimator=joblib.load("my_ridge.pkl")
今天的内容相对来说比较简单,但是很重要。我在最近找实习生的时候笔试就遇到了很多这方面的问题。大家记得多复习哦!