笔记(二)机器学习(周志华)第2章 模型选择和评估

1. 经验错误与过拟合

1.1. 错误率:分类错误的样本数占总数的比例。eg:m个样本中有a个样本分错,错误率E=a/m
1.2. 精度:精度=1-错误率。
1.3. 误差:学习器(模型)的预测输出与样本的真实值之间的差异。
1.4. 训练误差/经验误差:学习器在训练集上的误差
1.5. 泛化误差:在新样本上的误差。我们希望得到泛化误差小的学习器
1.6. 过拟合:学习器把训练数据自身的一些特点当作整个样本空间的特点,从而使得在训练数据上有很小的经验误差,导致泛化能力下降
常见原因:由于学习能力过于强大,以至于把训练样本所包含的不太一般的特性都学到了
1.7. 欠拟合:对训练样本的一般性质尚未学好。通常是由于学习能力低下造成的。
1.8. 模型选择:理想的解决方案是选择泛化误差最小的那个模型。
问题:无法直接获得泛化误差,而经验误差又存在着过拟合问题,不适合作为标准,那么应该如何进行模型评估与选择呢?
1.9. 书中将模型选择问题拆解为(1)评估方法;(2)性能度量;(3)比较检验;三个子问题。

  • 评估方法:用什么数据做评估?如何获得这些数据?
  • 性能度量:评估时如何衡量模型的好坏?有哪些评价标准?
  • 比较检验:如何比较模型的性能?注意不是简单地比大小!在机器学习中性能比较是相当复杂的。

2. 评估方法

测试集:测试学习器对新样本的判断能力。测试集应该尽可能与训练集互斥
测试误差:以测试集上的“测试误差”作为泛化误差的近似
代码实现

2.1 划分数据集

2.1.1 留出法

定义:直接将数据集D划分为两个互斥的集合,一个作为训练集S,一个作为测试集T
注意:训练/测试集的划分要尽可能保持数据分布的一致性。保留类别比例的采样方式又叫分层采样
单次使用留出法得到的估计结果往往不够稳定可靠,一般要采用若干次随机划分、重复进行实验评估后,取平均值作为留出法的评估结果。
常见做法:大约2/3~4/5的样本用于训练,剩余样本用于测试。

2.1.2 交叉验证法

k折交叉验证:将数据集D划分为k个大小相似的互斥子集。每个子集Di都尽可能保持数据分布的一致性(分层采样)。每次使用k-1个子集的并集作为训练集,余下的一个子集作为测试集。这样就进行了k次训练和测试。最后返回k个测试结果的均值。k:常取10、5、20等。
在这里插入图片描述

  • KFold类实现了数据集的k折交叉切分:
sklearn.model_selection.KFold(n_splits=3, shuffle=False, random_state=None)
  • StratifiedKFold类实现了数据集的分层采样折交叉切分:
sklearn.model_selection.StratifiedKFold(n_splits=3, shuffle=False, random_state=None)
  • 便利函数cross_val_score 对estimator执行k折交叉验证
sklearn.model_selection.cross_val_score(estimator, X, y=None, scoring=None, cv=None,n_jobs=1, verbose=0, fit_params=None, pre_dispatch='2*n_jobs')

返回值:返回一个浮点数的数组。每个浮点数都是针对某次k折交叉的数据集上,estimator预测性能得分。

留一法LOO

是交叉验证法,在划分子集k=m数据集样本数时的特例
优点:不需要担心随即样本划分带来的误差,因为这样的划分是唯一的。结果往往认为比较准确。
缺点:数据集较大时,训练m个模型的计算开销是难以忍受的
它每次迭代时,依次取0,1,…(n-1)作为测试集样本的下标。

from sklearn.model_selection import LeaveOneOut for train_index,test_index in LeaveOneOut(len(y)):
      #train_index保存训练集样本下标,test_index保存测试集样本下标

2.1.3 自助法

以自助采样为基础,对包含m个样本的数据集D进行有放回的m次采样以获得同等规模的训练集D’(有重复)。在这m次采样中都不被抽到的概率大约为0.368,也即数据集D中有约1/3的样本是训练集中没有的,用于测试。这样的测试结果,亦称“外包估计”
优点:1.在数据集较小、难以有效划分训练/测试集时很有用。2.能从初始数据集产生多个不同的训练集,对集成学习等方法有很大好处。
缺点:改变了初始数据集的分布,会引入估计偏差。
在初始数据量足够时,留出法和交叉验证法更常用一些。

2.2 调参与最终模型

在进行模型评估与选择时,除了要对适用学习算法进行选择,还需对算法参数进行设定,也就是常说的“调参”
机器学习参数分类
算法的参数:超参数。由人工设定多个参数候选值后产生模型。
模型的参数:数目可能很多,通过学习来产生多个候选模型。eg:DL
校验集:模型评估与选择中用于评测的数据集。把训练数据划分为训练集和测试集。

3. 性能度量

定义:衡量模型泛化能力的评价标准。
均方误差:回归任务。预测结果与真实标记进行比较。
E ( f : D ) = 1 m ∑ i = 1 m ( f ( x i ) − y i ) 2 E(f:D)=\frac{1}{m}\sum^m_{i=1}(f(x_i)-y_i)^2 E(f:D)=m1i=1m(f(xi)yi)2
更一般的,对于数据分布 D \mathcal{D} D和概率密度函数 p ( x ) p(x) p(x),均方误差可描述为:
E ( f : D ) = ∫ x ∼ D ( f ( x ) − y ) 2 p ( x ) d ( x ) E(f:\mathcal{D})=\int_{x\sim\mathcal{D}}(f(x)-y)^2p(x)\rm{d}(x) E(f:D)=xD(f(x)y)2p(x)d(x)

3.1. 错误率与精度

分类任务
错误率:
E ( f : D ) = 1 m ∑ i = 1 m I ( f ( x i ) = y̸ ) E(f:D)=\frac{1}{m}\sum^m_{i=1}\mathbb{I}(f(x_i) =\not y) E(f:D)=m1i=1mI(f(xi)=y)
对于数据分布 D \mathcal{D} D和概率密度函数 p ( x ) p(x) p(x)
E ( f : D ) = ∫ x ∼ D I ( f ( x ) = y̸ ) p ( x ) d ( x ) E(f:\mathcal{D})=\int_{x\sim\mathcal{D}}\mathbb{I}(f(x) =\not y)p(x)\rm{d}(x) E(f:D)=xDI(f(x)=y)p(x)d(x)
精度:
a c c ( f : D ) = 1 m ∑ i = 1 m I ( f ( x i ) = y ) = 1 − E ( f : D ) acc(f:D)=\frac{1}{m}\sum^m_{i=1}\mathbb{I}(f(x_i) = y)=1-E(f:D) acc(f:D)=m1i=1mI(f(xi</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值