浅谈机器学习的效能衡量指标 (3) -- 效能衡量指标与假设检定的关联

前言

机器学习经过训练(Trainning)、评估(Evaluation)后,就可以得到準确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1 Score、『ROC/AUC 曲线』等各项效能指标[1][2],如果準确率等于99%,我们真的就可以放心使用了吗? 如果有两个模型各有100笔及10万笔训练资料,且準确率都等于99%,那它们是一样可靠吗? 以下我们就来好好的探讨这个问题。

假设检定(Hypothesis Testing)

直觉上,我们知道愈多样本资料,可信度越高,但是,应该怎样以学理说明呢? 另一个问题,如果要做一个可信赖的模型需要多少样本资料呢? 要回答这个问题前,先要了解『假设检定』(Hypothesis Testing)、检定力分析(Power Analysis)。

假设检定通常是要检验某项实验是否有显着性的效果,例如,要检验新药是否有效,我们会将病人分为两组,一组为『控制组』(Control Group),只服用安慰剂,另一为『干预组』(Intervention Group),则服用新药,经过一段时间观察,就这些样本判断新药是否有『显着性』的效果,而非『随机性的抽样误差』造成的。一般会以较严谨的态度来作判断,採用1.96倍(95%)、2倍(95.45%)或3倍(99.73%)标準差作为判定基準,只有超出此一範围,我们才可以大胆假设,新药应该是有效,并非是凑巧。

一般会使用t统计量来检验平均数(Mean)是否有差异,公式如下:
http://img2.58codes.com/2024/20001976IRpxXkbxev.png

实验会分成两种结果:

虚无假设(Null Hypothesis, H0):μ1 = μ2 或是 μ1 - μ2 = 0对立假设(Alternative Hypothesis, H1):μ1 > μ2 或是 μ1 - μ2 > 0

以所有样本计算p值,假如落在1.96倍(95%)、2倍(95.45%)或3倍(99.73%)标準差之外,就判定H1假设成立,新药有效。通常我们会定义α值作为检验的标準,例如5%,即落在1.96倍标準差(95%)之外,就是效果显着,而实验的结果就是依照t统计量公式计算CDF(Cumulative Distribution Function,累积分配函数),换算为p值(1-CDF),它如果小于α值,也就是说实验结果落在设定的1.96倍标準差的右边,那就判定H1假设成立,反之,就是『不能拒绝』H0假设(心不甘情不愿?)。

实作

了解假设检定的定义后,我们就随机产生『控制组』(Control Group)、『干预组』(Intervention Group) 两组样本,进一步判断新药是否有『显着性』的效果。计算很简单,scipy套件直接支援t检定的函数(ttest_rel),它预设是双尾(two-tailed)假定,对立假设为 μ1 > μ2 或 μ1 < μ2 ,以新药为例,应该只作右尾(right-tailed)检定,只关注 μ1 > μ2,因此,算出来的p值要减半,如下图:
http://img2.58codes.com/2024/20001976kKvfJjQNMN.png

计算过程如下程式所示:

%matplotlib inlineimport numpy as npimport matplotlib.pyplot as pltfrom scipy import stats# 随机产生『控制组』(Control Group)、『干预组』(Intervention Group) 样本np.random.seed(123)control_group = np.random.normal(59.45, 1.5, 100)intervention_group = np.random.normal(60.05, 1.5, 100)# ttest_rel 预设为双尾假定t,p = stats.ttest_rel(intervention_group, control_group)# p值要减半,变成单尾假定p1 = '%f' % (p/2)print("t-statistic:" + str(t))print("p-value:" + str(p1))# 绘图pop = np.random.normal(control_group.mean(), control_group.std(), 100000)# calculate a 90% confidence interval. 10% of the probability is outside this, 5% in each tailci = stats.norm.interval(0.90, control_group.mean(), control_group.std())plt.hist(pop, bins=100)# show the hypothesized population meanplt.axvline(pop.mean(), color='yellow', linestyle='dashed', linewidth=2)# show the right-tail confidence interval threshold - 5% of propbability is under the curve to the right of this.plt.axvline(ci[1], color='red', linestyle='dashed', linewidth=2)# show the t-statistic - the p-value is the area under the curve to the right of thisplt.axvline(pop.mean() + t*pop.std(), color='magenta', linestyle='dashed', linewidth=2)plt.show()

结果如下,红色为α值,本例为5%,即1.96倍(95%)标準差所在位置,而绿色为p值所在位置,或者比较t值(2.34>1.96),推断H1成立。
http://img2.58codes.com/2024/20001976Di2zNkyaBs.png

结论

以上假设检定说明,省略很多细节,因为笔者只想说明效能衡量指标与假设检定的关联,结论是,如果要证明一个模型真正具有辨识或预测能力,除了準确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1 Score、『ROC/AUC 曲线』等各项效能指标外,若能额外进行假设检定,应该会更具说服力。

但是,假设检定也有一个致命的缺陷,就是所谓的P-Hacking,如果,有人实验很多次,但他刻意只挑有『显着性差异』的实验来发表,外人很难从检定结果看出此一问题,除非他人也重複实验一次,否则,很难辨其真伪。

另一个问题,如果要作一个可信赖的模型,我们需要蒐集多少样本资料呢? 检定力分析(Power Analysis) 可以解答这个问题,笔者再努力K书,下次再谈了。

由于笔者离开学校多年,有关理论的部分,要解释清楚,实在超出个人能力,文内如有疏漏或谬误,就请大家指正了。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章