机器学习Day 02

模型评估与选择

经验误差与过拟合

通常把分类错误的样本数占样本总数的比例成为错误率(error rate),相应精度(accuracy)。把学习器的实际预测输出与样本的真实输出之间的差异成为无法(error),学习器在训练集上的误差称为训练误差(training error)或经验误差(empirical error),在新样本上的误差成为泛化误差(generalization error)。
我们希望得到泛化误差小的学习器。为了达到这个目的,应该从训练样本中尽可能学出适用于所有潜在样本的普遍规律,这样才能在遇到新样本时做出正确的判别。
过拟合(overfitting):学习器把训练样本自身的一些特点当做了所有潜在样本都具有的一般性质,这样导致了泛化性能下降。很多原因导致了过拟合,最常见的情况是由于学习能力过强,以至于把训练样本所包含的不太一般的特性都学到了。过拟合是无法完全避免的。
欠拟合(underfitting):对训练样本的一般性质尚未学好。由学习能力低下造成的。
在现实任务中,我们有多种学习算法可供选择,甚至对同一个学习算法,当使用不同的参数设置时,也会产生不同模型。理想的解决方案当然是对候选模型的泛化误差进行评估,然后选择泛化误差最小的那个模型。

评估方法

需要一个测试集(testing set)来测试学习器对新样本的判别能力,然后以测试集上的测试误差(testing error)作为泛化误差的近似。测试集应该尽可能与训练集互斥,即测试样本尽量不在训练集中出现,未在训练过程中使用过。
对于只有一个包含m个样例的数据集D={(x1,y1),(x2,y2),....,(xm,ym)},既要训练又要测试,需要通过对D进行适当的处理,从中产生出训练集ST

  1. 留出法(hold-out):直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为测试集TD=ST,ST=
    需要注意,测试集/训练集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响。
    单次使用留出法得到的估计结果往往不够稳定可靠,在使用留出法得到的估计结果往往不够稳定可靠,在使用留出法时,一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。
    测试集小时,评估结果的反差较大;训练集小时,评估结果的偏差较大。常见做法是将大约2/34/5的样本用于训练,剩余样本用于测试。

  2. 交叉验证法(cross validation):先将数据集D划分为k个大小相似的互斥子集,即D=D1D2D3...Dk,D1D2D3...Dk=每个子集都尽可能保持数据分布的一致性。
    每次用k1个子集作为训练集,余下的那个子集作为测试集,从而获得了k组训练/测试集,可进行k次训练和测试,最终返回的是这k个测试结果的均值。
    显然,交叉验证法评估结果的稳定性和保真性在很大程度上取决于k的取值,常用5,10,20等。
    留一法(Leave-One-Out):Dmk=m,每个子集包含一个样本,使得在绝大多数情况下,实际评估模型与期望评估的用D训练出的模型很相似。因此,留一法的评估结果往往被认为比较准确。但留一法的估计结果也未必永远比其他评估方法准确(NFL定理)。

  3. 自助法(bootstrapping):直接以自助采样法(bootstrap sampling)为基础,给定包含m个样本的数据集D,对它进行采样产生数据集D:每次随机从D中挑选一个样本,将其拷贝放入D中,然后再将其放回原始数据集D中,使得该样本在下次采样时仍可能被采到,这个过程重复执行m次后就得到了一个包含m个样本的数据集D。显然,D中有一部分样本会在D中多次出现,而另一部分样本不出现。做一个简单的估计,样本在m次采样中使用不被采到的概率为(11m)m,取极限得到

    limm(11m)m=1e0.368

    即通过自主采样,初始数据集D中约有36.8%的样本未出现在采样数据集D中。
    自助法在数据集较小、难以有效划分训练/测试集时很有用;此外,自助法能从初始数据中产生多个不同的测试集,这对集成学习等方法有很大的好处。然而,自助法产生的数据集改变了初始数据集的分布,引入了估计偏差。
  4. 调参(parameter tuning)与最终模型:大多数学习算法都有参数(parameter)需要设定,参数配置不同,学得模型的性能有显著差别。学习算法的很多参数是在实数范围内取值,因此,对每种参数的配置都训练出模型来时不可行的。一般做法是对每个参数选定一个范围和步长。

性能度量

性能度量(performance measure)反映了任务需求,在对比不同模型能力时, 使用不同的性能度量往往会导致不同的评判结果。
在预测任务中,给定样例集D={(x1,y1),(x2,y2),....,(xm,ym)},yixi。要评估学习器f的性能,就要把学习器预测结果f(x)y进行标记。
回归任务最常用的性能度量是均方误差(mean squared error)

E(f;D)=1mi=1m(f(xi)yi)2

更一般的,对于数据分布D和概率密度函p(),均方误差可描述为
E(f;D)=xD(f(x)y)2p(x)dx
  1. 错误率与进度:错误率是分类错误的样本数占样本总数的比例,精度则是分类正确的样本数占样本总数的比例。
    对样例集D,分类错误率定义为

    E(f;D)=1mi=1m⨿(f(xi)yi),⨿()10

    精度定义为

    acc(f;D)=1mi=1m⨿(f(xi)=yi)=1E(f;D)

    更一般的,对于数据分布D和概率密度函p(),错误率与精度可分别描述为
    E(f;D)=xD⨿(f(x)y)p(x)dx

    acc(f;D)=xD⨿(f(x)=y)p(x)dx=1E(f;D)
    .
    2.查准率(precision)、查全率(recall)与F1:查准率P与查全率R是一对矛盾的度量。一般来说,查准率高时,查全率往往偏低;查全率高时,查准率往往偏低。
    当P=R时,称为平衡点(Breaking-Even Point,BEP)。
    BEP过于简化了,常用F1度量:
    F1=2×P×RP+R

    F1度量的一般形式Fβ
    Fβ=(1+β2)×P×R(β2×P)+Rβ>0

    ββ>1β<1

    3.代价敏感错误率和代价曲线:在现实任务中常会遇到不同类型的错误所造成的后果不同。为权衡不同类型错误所造成的不同损失,可谓错误赋予非均等代价(unequal cost)。

比较检验

先使用某种实验评估方法测的学习器的某个性能度量结果,然后对这些结果进行比较。性能比较涉及几个重要因素:首先,我们希望比较的是泛化性能;第二,测试集上的性能与测试集本身的选择有很大关系;第三,很多机器学习算法本身有一定的随机性。
统计假设检验(hypothesis test)为我们进行学习器性能比较提供了重要依据。
1. 假设检验
现实任务中并不知道学习器的泛化错误率ϵ,只能获知其测试错误率 ϵˆ。泛化错误率与测试错误率未必相同,但二者接近的可能性应比较大,因此可根据测试错误率估计泛化错误率的分布。
泛化错误率为ϵ的学习器在一个样本上犯错的概率是ϵ;测试错误率ϵˆ意味着在m个测试样本中恰有ϵˆ×m个被误分类。

P(ϵˆ;ϵ)=Cmϵˆ×mϵϵˆ×m(1ϵ)mϵˆ×m

概率为在包含m个样本的测试集上,泛化错误率为ϵ的学习器被测的测试错误率为ϵˆ的概率。
P(ϵˆ;ϵ)ϵ=0

可知,在ϵ=ϵˆ时最大,|ϵϵˆ 增大P(ϵˆ;ϵ)减小,这符合二项(binomial)分布。使用二项检验(binomial test)进行检验,考虑假设ϵϵ0,在1α的概率内所能观测到的最大错误率如下,1α反映了结论的置信度(confidence)。
ϵ¯=maxϵs.t.i=ϵ0×m+1mCmiϵi(1ϵ)mi<α.

s.t.:subject to的简写,使左边式子在右边条件满足时成立。
若测试错误率ϵˆϵ¯,则:在α的显著度下,假设“ϵϵ0”不能被拒绝,即能以1α的置信度认为,学习器的泛化错误度不大于ϵ0;否则该假设可被拒绝,即在αϵ0
通过多次重复留出法或是交叉验证法等进行多次训练/测试,得到多个测试错误率,此时使用“t检验”。假定得到kϵ1ˆ,ϵ2ˆ,...ϵkˆ,则平均测试错误率μσ2
μ=1ki=1kϵiˆ
,
σ2=1k1i=1k(ϵiˆμ)2

考虑到这kϵ0,则变量
τt=k(μϵ0)σ

服从自由度为k1的t分布。

2.交叉验证t检验

3.McNemar检验

4.Friedman检验 与 Nemenyi后续检验

偏差与方差

偏差-方差分解(bias-variance decomposition)是解释学习算法泛化性能的一种重要工具。偏差-方差分解试图对学习算法的期望泛化错误率进行拆解。
对测试样本x,yDxyxf(x;D)Dfx
学习算法的期望预测为

f¯(x)=ED[f(x;D)],

使用样本数相同的不同训练集产生的方差为
var(x)=ED[(f(x;D)f¯(x))2],

方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响。
噪声为
ϵ2=ED[(yDy)2].

噪声表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度。
期望输出与真实标记的差别成为偏差(bias)
bias2=(f¯(x)y)2.
偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力。
假定噪声期望为零,即ED[yDy]=0.
对算法的期望泛化误差进行分解:
E(f;D)=ED[(f(x;D)yD)2]=...=bias2(x)+var(x)+ϵ2
.
偏差-方差方程说明,泛化性能是由学习算法的能力、数据的充分性以及学习本任务本身的难度所共同决定的。
给定学习任务,为了取得好的泛化性能,需要使偏差较小,即能够充分拟合数据,并使反差较小,即使得数据扰动产生的影响小。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值