机器学习(西瓜书)之二项检验的理解

前言

  二项检验在周志华老师的西瓜书中并没有做太多解释,自己也是网上搜索了相关的资料和其他人的看法,并结合了自己的一些理解写下博客记录一下。

内容引出

  我们在对学习器的性能进行评估比较的时候,有了评估方法和性能度量也不一定能很好判断学习器的优劣,通常是用统计假设检验,基于假设检验的结果我们可以推断出,若在测试集上观察到学习器A比B好,则A的泛化性能是否在统计意义上优于B,以及这个结论的把握有多大。这里,默认以错误率为性能度量,用 ϵ \epsilon ϵ表示,即泛化错误率。

  假设检验中的“假设”是对学习器泛化错误率分布的某种判断或者是猜想,比如“ ϵ = ϵ 0 \epsilon=\epsilon_{0} ϵ=ϵ0”。现实的任务中我们不知道学习器的泛化错误率,只能获知其测试错误率 ϵ ^ \hat{\epsilon} ϵ^,而且泛化错误率和测试错误率不一定相同,直观上,它们两者接近的可能性比较大,相差很远的可能性比较小。由此我们可以根据测试错误率估推出泛化错误率的分布。这也是此章节的目的。

二项检验

  泛化错误率为 ϵ \epsilon ϵ的学习器在一个样本上犯错的概率是 ϵ \epsilon ϵ,而测试错误率 ϵ ^ \hat{\epsilon} ϵ^表示的是在m个测试样本中恰好有 ϵ ^ ∗ m \hat{\epsilon}*m ϵ^m个被误分类。我们假定测试样本是从总体分布中独立采样得到的,那请问泛化错误率为 ϵ \epsilon ϵ的学习中将m0个样本误分类,其余样本全部分类正确的概率是多少?

  如果上面的看不懂没关系,我们来分析一下这个问题,假如你去投篮,你不能投中的概率是 ϵ \epsilon ϵ,你总共只能投m个,其中m0个投不中的概率是多少?这个问题我们都不陌生吧,因为你每次投篮都是相互独立的,所以我们可以用二项分布的方法迅速得出结果 ( m m 0 ) ∗ ϵ m 0 ∗ ( 1 − ϵ ) m − m 0 \begin{pmatrix} m \\ m_0 \end{pmatrix}*\epsilon^{m_0}*(1-\epsilon)^{m-m_0} (mm0)ϵm0(1ϵ)mm0这个公式的前面的矩阵的意思其实就是排列组合,相当于C(m,m0)。那对之前的问题也是一样的道理,它也满足二项分布,所以结果也是一样 ( m m 0 ) ∗ ϵ m 0 ∗ ( 1 − ϵ ) m − m 0 \begin{pmatrix} m \\ m_0 \end{pmatrix}*\epsilon^{m_0}*(1-\epsilon)^{m-m_0} (mm0)ϵm0(1ϵ)mm0所以由此我们可以估算出恰好将 ϵ ^ ∗ m \hat{\epsilon}*m ϵ^m个样本误分类的概率,这也表达了在包含m个样本的测试集上,泛化错误率为 ϵ \epsilon ϵ的学习器被测得测试错误率为 ϵ ^ \hat{\epsilon} ϵ^的概率: P ( ϵ ^ ; ϵ ) = ( m m ∗ ϵ ^ ) ∗ ϵ m ∗ ϵ ^ ∗ ( 1 − ϵ ) m − m ∗ ϵ ^ P(\hat{\epsilon};\epsilon)=\begin{pmatrix} m \\ m*\hat{\epsilon} \end{pmatrix}*\epsilon^{m*\hat{\epsilon}}*(1-\epsilon)^{m-m*\hat{\epsilon}} P(ϵ^;ϵ)=(mmϵ^)ϵmϵ^(1ϵ)mmϵ^书上给出的公式其实是很好理解的,但是其最后直接得出结论概率在 ϵ = ϵ ^ \epsilon=\hat{\epsilon} ϵ=ϵ^时最大,其中略过求解过程,所以这里对其进行推导。

  这里其实用到的时极大似然法(不太懂的同学可以看看这篇博客极大似然估计)我们先对原式进行求对数 l n ( P ( ϵ ^ ; ϵ ) ) = l n ( ( m m ∗ ϵ ^ ) ∗ ϵ m ∗ ϵ ^ ∗ ( 1 − ϵ ) m − m ∗ ϵ ^ ) ln(P(\hat{\epsilon};\epsilon))=ln(\begin{pmatrix} m \\ m*\hat{\epsilon} \end{pmatrix}*\epsilon^{m*\hat{\epsilon}}*(1-\epsilon)^{m-m*\hat{\epsilon}}) ln(P(ϵ^;ϵ))=ln((mmϵ^)ϵmϵ^(1ϵ)mmϵ^)这里要提一个关于对数函数的性质 l n ( a ∗ b ) = l n ( a ) + l n ( b ) ln(a*b)=ln(a)+ln(b) ln(ab)=ln(a)+ln(b)所以根据这个性质我们可以对原式进行分解 l n ( P ( ϵ ^ ; ϵ ) ) = l n ( ( m m ∗ ϵ ^ ) ∗ ϵ m ∗ ϵ ^ ∗ ( 1 − ϵ ) m − m ∗ ϵ ^ ) = l n ( ( m m ∗ ϵ ^ ) ) + l n ( ϵ m ∗ ϵ ^ ) + l n ( ( 1 − ϵ ) m − m ∗ ϵ ^ ) = l n ( ( m m ∗ ϵ ^ ) ) + ( m ∗ ϵ ^ ) ∗ l n ( ϵ ) + ( m − m ∗ ϵ ^ ) l n ( ( 1 − ϵ ) ) ln(P(\hat{\epsilon};\epsilon))=ln(\begin{pmatrix} m \\ m*\hat{\epsilon} \end{pmatrix}*\epsilon^{m*\hat{\epsilon}}*(1-\epsilon)^{m-m*\hat{\epsilon}})\\=ln(\begin{pmatrix} m \\ m*\hat{\epsilon} \end{pmatrix})+ln(\epsilon^{m*\hat{\epsilon}})+ln((1-\epsilon)^{m-m*\hat{\epsilon}})\\=ln(\begin{pmatrix} m \\ m*\hat{\epsilon} \end{pmatrix})+({m*\hat{\epsilon}})*ln(\epsilon)+({m-m*\hat{\epsilon}})ln((1-\epsilon)) ln(P(ϵ^;ϵ))=ln((mmϵ^)ϵmϵ^(1ϵ)mmϵ^)=ln((mmϵ^))+ln(ϵmϵ^)+ln((1ϵ)mmϵ^)=ln((mmϵ^))+(mϵ^)ln(ϵ)+(mmϵ^)ln((1ϵ))然后我们再对式子进行求导,现在对 ϵ \epsilon ϵ求导,此时要比之前更容易求导 ∂ ( l n ( P ( ϵ ^ ; ϵ ) ) ) ∂ ϵ = ∂ ( l n ( ( m m ∗ ϵ ^ ) ) ) + ∂ ( ( m ∗ ϵ ^ ) ∗ l n ( ϵ ) ) + ∂ ( ( m − m ∗ ϵ ^ ) l n ( ( 1 − ϵ ) ) ) = 0 + ( m ∗ ϵ ^ ) ∗ 1 ϵ + ( m ∗ ϵ ^ − m ) ∗ 1 1 − ϵ = m ∗ ( ϵ ^ − ϵ ) ( 1 − ϵ ) ∗ ϵ \frac{\partial(ln(P(\hat{\epsilon};\epsilon)))}{\partial\epsilon}=\partial(ln(\begin{pmatrix} m \\ m*\hat{\epsilon} \end{pmatrix}))+\partial(({m*\hat{\epsilon}})*ln(\epsilon))+\partial(({m-m*\hat{\epsilon}})ln((1-\epsilon)))\\=0+({m*\hat{\epsilon}})*\frac{1}{\epsilon}+({m*\hat{\epsilon}-m})*\frac{1}{1-\epsilon}\\=\frac{m*(\hat{\epsilon}-\epsilon)}{(1-\epsilon)*\epsilon} ϵ(ln(P(ϵ^;ϵ)))=(ln((mmϵ^)))+((mϵ^)ln(ϵ))+((mmϵ^)ln((1ϵ)))=0+(mϵ^)ϵ1+(mϵ^m)1ϵ1=(1ϵ)ϵm(ϵ^ϵ)
我们也知道当其导数为0时有最大值,且此时 ϵ = ϵ ^ \epsilon=\hat{\epsilon} ϵ=ϵ^。根据书上的例子, ϵ = 0.3 \epsilon=0.3 ϵ=0.3,m=10,我们可以用Python代码将其表示出来:

import matplotlib.pyplot as plt
from scipy.special import comb
from matplotlib.font_manager import FontProperties
import numpy as np
import matplotlib

a = 0.3
m = 10
p = []
for error in range(11):
    k = comb(m,error)*(a**error)*((1-a)**(m-error))
    p.append(k)
fig = plt.figure()
ax = fig.add_subplot(111)
font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=14)
plt.xlabel('误分类样本数',fontproperties=font)
plt.ylabel('概率',fontproperties=font)
y = np.arange(0,0.35,0.05)
x = np.arange(0,11.0,1.0)
plt.xticks(x)
plt.yticks(y)
ax.scatter(x,p)
plt.plot(x,p)
plt.show()

我们可以得到和书上基本一致的图像

二项分布示意图
图中的横坐标虽然是误分类的样本数,但是除以样本总数即可得到此时的测试错误率 ϵ ^ \hat{\epsilon} ϵ^,由图我们也可以看出当泛化错误率 ϵ \epsilon ϵ ϵ ^ \hat{\epsilon} ϵ^时其概率最大。

  我们可以由图看出当泛化错误率给定时,测试错误率与总样本数的乘积即误分类样本数说一个二项分布,我们对其进行假设检验,也称为二项检验。书中给出原假设“ ϵ < = ϵ 0 \epsilon<=\epsilon_0 ϵ<=ϵ0”,那么其备择假设就是“ ϵ > ϵ 0 \epsilon>\epsilon_0 ϵ>ϵ0”,即原假设不成立时的对立结果,由此我们也可以得出这是一个右侧单边检验。书中直接给出了公式(最新的印刷有些不一样) ϵ ˉ = m i n   ϵ    s . t .   ∑ i = ϵ ∗ m + 1 m ( m i ) ∗ ϵ 0 i ∗ ( 1 − ϵ 0 ) m − i < α \bar{\epsilon}=min\ \epsilon\ \ s.t.\ \displaystyle\sum_{i=\epsilon*m+1}^{m} \begin{pmatrix} m \\ i \end{pmatrix}* \epsilon_0^{i}*(1-\epsilon_0)^{m-i}<\alpha ϵˉ=min ϵ  s.t. i=ϵm+1m(mi)ϵ0i(1ϵ0)mi<α

  我们知道假设检验如果结果落入拒绝域范围,那么我们则可以拒绝原假设,所以对于上述公式也同样的道理。用书上的图来解释
在这里插入图片描述

α \alpha α是显著水平,1- α \alpha α是置信区间,我们可以将图看作是普通的假设检验的单边检验的函数图像,图中的 α \alpha α区域看成拒绝域,其他部分看成是接受域,只要在 ϵ = ϵ 0 \epsilon=\epsilon_0 ϵ=ϵ0的情况下,该学习器的测试错误率 ϵ ^ \hat{\epsilon} ϵ^没有落入拒绝域中,那么我们就有1- α \alpha α的置信度认为学习器的泛化错误率 ϵ {\epsilon} ϵ小于 ϵ 0 {\epsilon_0} ϵ0,(因为 ϵ {\epsilon} ϵ是不知道的,我们只是假设),所以我们的关键就在于求出那个临界值。

  我们之前的概率值是在泛化错误率给定的情况下,学习器对 ϵ ^ \hat{\epsilon} ϵ^的概率估计,我们要求假设接受的临界值,相当于就是满足概率相加的和小于 α \alpha α最小的那个测试错误率,书中给出的这个公式的作用也就是这个意思,我们可以看出图中5就是那个临界值,因为当误分类样本数为6,7,8,9,10的这些概率相加的和小于 α \alpha α,但若是加上5的这个概率值,那么就会大于 α \alpha α,不满足条件,所以5就是最小的临界值。得到临界值后,只要判断其与测试错误率的大小即可。

  • 12
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值