模型评估

模型评估

机器学习入门到精通!不愧是公认的讲的最好的【机器学习全套教程】同济大佬12小时带你从入门到进阶(机器学习/线性代数/人工智能/Python)听课笔记


前言

Sklenrn工具包简介

链接:scikit-learn: machine learning in Python — scikit-learn 1.3.2 documentation

Sklearn能做分类,回归,聚类、降维、模型选择、预测

image-20231129235705089

image-20231130000115661

还能查询API,API里面还有示例

image-20231129235801001

Examples里面有各种示例,还展示怎么可视化,可以进行学习

image-20231129235946547


数据集划分

Sklearn里面有很多内置数据集

image-20231130000750552


划分测试集和训练集

image-20231130000931774


洗牌

因为我们不希望模型学习到因为排列而形成的关系,洗牌可以只洗训练集

image-20231130001003577


交叉验证

测试集是宝贵的资源,是模型性能的最终测试。而在训练集里面做交叉验证,一方面是不使用测试集的资源,另一方面是为了提高模型性能

交叉验证:把训练集切成多个部分。每次训练时,用大部分用作训练模型,拿剩下的部分当作此次训练的验证集。但是测试成绩受拿被当作测试集的训练集的数据影响很大,所以这里引入交叉,每次用不一样的部分来当作验证集。最后求一次平均值,就可以得到一个比较准确的验证集结果。

所以交叉验证共有三种数据集:训练集、验证集、测试集

image-20231130232447013

混淆矩阵

image-20231130193604882

TP:是在做的对的前提下,找出了目标

TN:在做对的前提下,找出了反例

FN:是在做错的前提下,把正例当成了反例

FP:是在做错的前提下,把反例当成了正例


精度和召回率

准确率:

ACC=TP+TNFP+FN+TP+TN=1ERRACC=\frac{TP+TN}{FP+FN+TP+TN}=1-ERR

精度:(实际上精度和真正率是一回事)

PRE=TPTP+FPPRE=\frac{TP}{TP+FP}

召回率:

REC=TPTP+FNREC=\frac{TP}{TP+FN}


F1分数

假如以恶性肿瘤检测的示例来进行理解,FP就是误诊,FN就是漏诊。对应到精度和召回率就是,精度对应的就是误诊,召回率对应的就是漏诊。如果我们想要减小误诊,那就会提高PRE,就是强调所预测患者患有恶性肿瘤的正确性,这样就会增大漏诊。相反我们想要优化召回率,就会专注于最大限度地减少漏测恶性肿瘤的机会,这样就会增大误诊的概率。

所以实际中通常采用PRE和REC的组合,即所谓的F1分数

F1=2PRE×RECPRE+RECF1=2\frac{PRE × REC}{PRE+REC}

=21PRE+1REC=\frac{2}{\frac{1}{PRE}+\frac{1}{REC}}

F1分数被称为调和平均值,在分母的1PRE+1REC\frac{1}{PRE}+\frac{1}{REC}中,谁更小,谁对F1分数的值影响大。调和平均值会给低值更多的权重


阈值

分类器,在模型训练之后,得到的是数值,更有可能是什么。而不是一个直接的0或者1,True或者False。所以我们可以设置一个阈值,来影响最后的类别判断。

而且,阈值对于召回率和精度影响也是呈反比的

image-20231130211246382

PRE=TPTP+FP,REC=TPTP+FNPRE=\frac{TP}{TP+FP},REC=\frac{TP}{TP+FN}

第一处,是把2和6认成了5,FP=2FP=2

第二处,左边两个5被认为不是5,是正例被当作反例,FN=2,TP=4,右边还有一个6被认成了5,FP=1

第三处以此类推


ROC曲线

ROC(受试者工作特征)曲线是选择分类模型的有用工具,他以FPR(FP rate)和TPR(TP rate)的性能比较结果为移除,通过移动分类器的阈值完成计算。ROC曲线和精度召回曲线类似

TPR=TPTP+FNTPR=\frac{TP}{TP+FN}

FPR=FPFP+TNFPR=\frac{FP}{FP+TN}

image-20231130222803522

中间虚线对角线表示纯随机分类器的ROC曲线,一个好的分类器尽量远离该线

比较分类器的一种方法是测量曲线下面积 (AUC) 。完美分类器的 ROC AUC 等于 1 ,而纯随机分类器的 ROC AUC 等于 0 . 5 。


结束