比较检验
- 前言
- 内容引出
- 二项检验
前言
二项检验在周志华老师的西瓜书中并没有做太多解释,自己也是网上搜索了相关的资料和其他人的看法,并结合了自己的一些理解写下博客记录一下。
内容引出
表示,即泛化错误率。
”。现实的任务中我们不知道学习器的泛化错误率,只能获知其测试错误率,而且泛化错误率和测试错误率不一定相同,直观上,它们两者接近的可能性比较大,相差很远的可能性比较小。由此我们可以根据测试错误率估推出泛化错误率的分布。这也是此章节的目的。
二项检验
的学习器在一个样本上犯错的概率是,而测试错误率表示的是在m个测试样本中恰好有个被误分类。我们假定测试样本是从总体分布中独立采样得到的,那请问泛化错误率为的学习中将m0个样本误分类,其余样本全部分类正确的概率是多少?
,你总共只能投m个,其中m0个投不中的概率是多少?这个问题我们都不陌生吧,因为你每次投篮都是相互独立的,所以我们可以用二项分布的方法迅速得出结果这个公式的前面的矩阵的意思其实就是排列组合,相当于C(m,m0)。那对之前的问题也是一样的道理,它也满足二项分布,所以结果也是一样所以由此我们可以估算出恰好将个样本误分类的概率,这也表达了在包含m个样本的测试集上,泛化错误率为的学习器被测得测试错误率为的概率:书上给出的公式其实是很好理解的,但是其最后直接得出结论概率在时最大,其中略过求解过程,所以这里对其进行推导。
这里其实用到的时极大似然法(不太懂的同学可以看看这篇博客极大似然估计)我们先对原式进行求对数这里要提一个关于对数函数的性质所以根据这个性质我们可以对原式进行分解然后我们再对式子进行求导,现在对求导,此时要比之前更容易求导
我们也知道当其导数为0时有最大值,且此时。根据书上的例子,,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()
我们可以得到和书上基本一致的图像
图中的横坐标虽然是误分类的样本数,但是除以样本总数即可得到此时的测试错误率,由图我们也可以看出当泛化错误率为时其概率最大。
”,那么其备择假设就是“”,即原假设不成立时的对立结果,由此我们也可以得出这是一个右侧单边检验。书中直接给出了公式(最新的印刷有些不一样)
我们知道假设检验如果结果落入拒绝域范围,那么我们则可以拒绝原假设,所以对于上述公式也同样的道理。用书上的图来解释
是显著水平,1-是置信区间,我们可以将图看作是普通的假设检验的单边检验的函数图像,图中的区域看成拒绝域,其他部分看成是接受域,只要在的情况下,该学习器的测试错误率没有落入拒绝域中,那么我们就有1-的置信度认为学习器的泛化错误率小于,(因为是不知道的,我们只是假设),所以我们的关键就在于求出那个临界值。
的概率估计,我们要求假设接受的临界值,相当于就是满足概率相加的和小于最小的那个测试错误率,书中给出的这个公式的作用也就是这个意思,我们可以看出图中5就是那个临界值,因为当误分类样本数为6,7,8,9,10的这些概率相加的和小于,但若是加上5的这个概率值,那么就会大于,不满足条件,所以5就是最小的临界值。得到临界值后,只要判断其与测试错误率的大小即可。