西瓜书第二章总结

本文深入探讨了机器学习中的模型评估方法,包括留出法、k折交叉验证法和自助法,以及性能度量标准如错误率、精度、查准率、查全率和F1分数。此外,还介绍了ROC曲线和AUC值在评估模型性能中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、欠拟合比较好解决,过拟合则很麻烦,而且必须认识到过拟合是无法避免的,我们所做的只能是“缓解”。

2、模型评估

2.1、留出法(hold out): 

留出法将数据集D划分为两个互斥的集合,其中一个座位训练集S,另一个作为测试集T。 即 S + T= D,S交集T为空。在S上训练出模型后,用T来评估测试误差,作为对泛化误差的估计。

注意1,训练/测试集的划分要尽可能的保持数据分布的一致性。例如在分类问题中至少要保持样本的类别比例相似。从采样的角度来看数据划分的过程,通常采用“分层采样”来保证样本类别比例稳定。

注意2,在给定训练/测试集的样本比例后,仍存在很多对数据集D进行划分的方式(本质是得出不同的训练/测试集)。不同的训练/测试集得的模型及模型评估结果也会存在差别。因此,单次使用留出法得到的估计结果往往不够稳定可靠,在使用留出法时一般要采用若干次随机划分,例如100次。100次后的到100个结果,留出法返回的是这100次结果的平均。

注意3,训练数据集和测试数据集的平衡问题。我们希望评估是用数据集D训练出来的模型,但留出法需要划分训练/测试集,这就会导致一个两难的问题:令训练集S包函绝大多数样本,则训练出的模型更接近于用D训练出的模型,但用于T比较小,评估出的结果就不够稳定准确。反之,……。这个问题没有完美的解决方案,常见的做法是将大约2/3---4/5的数据用于训练,剩余的样本用于测试。

2.2、k折交叉验证法(cross validation)

“交叉验证法”先将数据集D划分为k个大小相似的互斥子集,即 "公式:所有子集的并集为D,不同子集的交集为空"。每个子集都Di都尽可能的保持数据分布的一致性,即从D中通过分层采样得到。然后,每次用k-1个子集进行验证,1个子集进行验证,最终返回的是k个测试结果的均值。

注意1:每个子集Di要尽可能的保持数据分布的一致性。同留出法的“注意1”

注意2: 将数据集D划分为k个子集同样存在多种划分方法。同留出法的“注意2”一样,多种划分方法未减小因样本划分不同引入的差别,k折交叉验证需要重复p次,最终的评估结果是p次k折交叉验证结果的均值。例如:“10次10折交叉验证”

注意3:假定数据集D中包函m个样本,令k = m,则得到了交叉验证法的特例:留一法(Leave One Out,简称LOO),留一法不受随机样本划分方式的影响,因为m个样本只有唯一的方式划分为m个子集。但样本是1百万就需要训练1百万次,是无法忍受的。

注意4:k折交叉验证的稳定性和保真性很大程度上取决于k的取值。

2.3、自助法(有放回采样)

采用自主采样法从数据集D中有放回踩样m次,数据集D‘。

注意1,这样采样m次后一个样本不被采样到的概率为0.368,于是可以将D’作为训练集,D - D‘作为测试集。

注意2,自助法在数据集较小,难以有效划分训练/测试集是很有用。

注意3,自助法能从初始数据集中产生多个不同的训练集,这对集成学习等等方法有很大的好处。

总之:

注意1,留出法和k折交叉验证法更常用。多数使用k折交叉验证法。

注意2,在选定模型后使用S+T对模型再训练一次得到最终要使用的模型。

 

3、性能度量

3.1、错误率和精度

例如,对100个样本进行预测,错误了5个,则精度是0.95,错误率是0.05

但是,对于某些情况,例如癌症预测。对于100个样本,其真实情况是95个未患癌症,5个患癌症。预测时:95中93个预测为未患癌症,5个中3预测为癌症。

这样错误率是0.05,准确率是0.95。写一句代码,所有的都预测为患癌症其准确率也是0.95,错误率也是0.05。这时这个指标就起不到作用了。

3.2、查准率,查全率与F1

注意1,混淆矩阵

P = TP /(TP + FP) P = 3/5 上边的例子:0/95

R = TP /(TP + FN)R = 3/5 上边的例子:0/5

F1 = 2*P*R /(P+R)

注意2,P和R是不可兼得的,只有在非常简单的任务中,才能使查准率和查全率都很高。

注意3,根据学习器的预测结果对样例进行排序,排在前边的是学习器认为最可能是“正样例”的样本,排在后边的是学习器认为“最不可能”是“正样例”的样本。按照这个顺序逐个把样本预测为正样例,依次得到(P,R)对。以查准率为纵轴,查全率为横轴。就得到查准率-查全率曲线,简称“P-R曲线”

截图

注意:图中A,B,C三条曲线,如果是一条曲线将另一条曲线完全覆盖例如:A和C,则说明A完全优于C。如果两条曲线相交则无法评判谁优于谁例如:A和B。同时曲线下的面积又不好求,所以就有了“平衡点”

注意4,“平衡点”(Break-Even Point,简称BEP),他是查准率等于查全率的点。但更常用的是F1。

注意5,“宏查准率”、“宏查全率”;“微查全率”、“微查准率”

注意6,

3.3、ROC与AUC

注意1:ROC的全称是Receiver Operating Characteristic,源于二战中敌机检测的雷达信号分析技术。

注意2:AUC即 Area Under ROC Curve,即ROC曲线下的面积。

注意3:真正例率TPR,假正例率FPR的定义分别是:

TPR= TP /(TP+FN) 代表预测的样例中正样例被预测对的比例

FPR= FP /(TN+FP) 代表预测的样例中负样例被预测错的比例

注意4:以TPR为纵轴,FPR为横轴画出ROC曲线。

同3.2的“注意3”一样,只是不是采用(P,R)对来绘图而是使用(TPR,FPR)对儿来绘图。

3.4、代价敏感错误率与代价曲线

暂略。

3.5、查准率,查全率,真正例率,假正例率的概念如果不理解,公式还是很容易搞混的,对这四个概念的理解各写一句话。

以一车西瓜为例,车上有950个好瓜,50个坏瓜。现在给你以下任务:

让你挑出来10个好瓜,你挑出的10个西瓜中有9个好的1个坏的。这时 查准率就是90%。

我把这950个好瓜拿出来,让你把好西瓜来挑出来,你挑出了900个西瓜。这时的查全率是900/950

真正例率 等价于 查全率。

我把50个坏瓜拿出来,让你把好瓜挑出来,你挑选了5个西瓜。这时的假正例率是5/50

4、

5、算法类似于“类”的概念,模型类似于“实例”的概念。

 

 

思考题:

1、留出法、交叉验证法、自助法的区别?

2、写出混淆矩阵,写出P和R的计算公式。

3、错误率与ROC曲线的联系(西瓜书课后题,没想明白有啥联系!)

 

 

### 关于周志华《机器学习》(西瓜第二章的学习笔记 #### 模型评估与选择概述 模型评估与选择是机器学习领域的重要组成部分,旨在通过合理的方法评价不同模型的表现并挑选最优者。这一过程不仅涉及如何衡量单个模型的好坏,还包括怎样对比多个候选方案以做出最佳决策。 #### 偏差、方差和噪声的概念解析 偏差度量了学习算法的期望预测与实际结果之间的差距,反映了算法自身的拟合精度;方差描述的是相同规模训练集变化引起的学习效果波动情况,体现了数据扰动带来的影响;而噪声则设定了给定任务下所有可能采用的学习方法能达到的最佳预期泛化误差界限,揭示了问题本身固有的复杂性和挑战性[^2]。 #### 性能度量指标——P-R图及其应用 为了更直观地展示各类分类器的工作特性,通常会绘制精确率-召回率(Precision-Recall, P-R)曲线来辅助分析。当面对多组实验结果时,可以通过观察这些图形相互间的位置关系来进行优劣评判:如果某条曲线始终位于另一条之上,则表明前者具有更好的整体表现;而对于那些存在交点的情况,则需进一步计算各自下方区域面积大小作为判断依据之一。此外,“平衡点”作为一种特殊的性能测度,在特定条件下也能提供有价值的参考信息[^3]。 #### 偏差-方差分解理论简介 该理论为理解学习算法的一般化能力提供了框架性的指导思路,通过对平均测试错误率实施拆分操作,可以深入剖析导致过拟合现象背后的原因所在,并据此探索改进措施的方向。具体而言,总误差由三部分构成——不可约减误差点(即噪声)、平方形式表达出来的偏差项以及线性累加而成的方差成分[^4]。 ```python import numpy as np from sklearn.model_selection import train_test_split from sklearn.metrics import precision_recall_curve, auc def evaluate_model_performance(model, X, y): """ 计算并返回PR曲线下面积(AUC),用于量化模型的整体性能。 参数: model (object): 已经训练好的分类模型实例。 X (array-like of shape (n_samples, n_features)): 测试特征矩阵。 y (array-like of shape (n_samples,)): 对应的真实标签向量。 返回: float: PR AUC得分。 """ # 划分训练集/验证集 X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2) # 使用训练集拟合模型 model.fit(X_train, y_train) # 获取验证集中各观测对应的概率估计值 probas_pred = model.predict_proba(X_val)[:, 1] # 绘制PR曲线并求得AUC分数 precisions, recalls, _ = precision_recall_curve(y_val, probas_pred) pr_auc_score = auc(recalls, precisions) return pr_auc_score ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值