Day3 周志华《机器学习》读书笔记之模型选择

Day3 周志华《机器学习》读书笔记之模型选择

微信公众号关注:脑机接口研习社
追踪脑机接口最新发展资讯

系列文章目录

Day1 当脑机接口遇上机器学习:周志华《机器学习》读书笔记之绪论

Day2 周志华《机器学习》读书笔记之模型评估


文章目录


前言

脑机接口研习社将推出一系列文章,每篇文章将分成两个部分的内容,第一部分是记录小编读书过程的学习笔记第二部分是思考每个章节的内容可以如何应用在脑机接口领域。

周志华老师的《机器学习》(西瓜书)是机器学习领域的经典入门教材之一,但这不仅仅只是一本入门书。书的原话:“就算是领域内的专家来看这本书,依旧是会有所收获的,因此这本书是需要精读的,一遍肯定是不够的”。

公众号每周更新两个章节的内容,大家可以和我们一起读书打卡~

Day 3

一、比较检验

Day2我们学习了“留出法、交叉检验法、自助法”三种实验评估方法,它们是用来划分S/T的方法;错误率和精度、查准率和查全率、ROC和AUG是三种性能度量,是标准衡量的几项指标。

关于Day2的学习内容可点击以下链接,进行回顾:

Day2 周志华《机器学习》读书笔记之模型评估

学习器可以等价于算法。

对学习器的性能进行比较的方法是:先使用某种实验评估方法,测得学习器的某个性能度量结果,然后对这些结果进行比较。

如何比较呢?可以使用统计假设检验(hypothesis test)的方法:若在测试集上观察到学习器A比B好,则A的泛化性能是否在统计意义上优于B,以及这个结论的把握有多大。

机器学习性能比较的几种方法:
性能度量选择错误率这项指标,实验评估方法选择留出法或交叉验证法。

1. 二项分布和二项检验

适用于对单个学习器进行检验,并且仅做了一次留出法。

在包含m个样本的测试集上,泛化错误率为E的学习器被测得测试错误率为E’的概率是:
Day3 周志华《机器学习》读书笔记之模型选择

这个概率符合二项分布(binomial)。

二项检验(binomialtest):

“二项检验”是“假设检验”中的一种情况:我们知道一个分布服从二项分布,但是不知道这个分布的参数p(正样本出现的概率)。我们手里有一批服从这个分布的样本,我们可以根据这批样本对这个参数的取值范围做一个假设,并设定一个置信度阈值,如果这个假设的可信度超过这个置信度阈值,我们就认为这个假设成立,否则认为不成立。

书中的二项分布的未知参数是模型的真实泛化误差,

做出的假设是:E<=0.3(E是真实泛化误差,0.3是人为指定的)

检验的标准是:假设的置信度设定的置信度阈值 (术语是“显著性水平”,可以理解为条件“是否明显错误的判断标准”,所以可以理解为“非明显错误的判断标准”,即,“可信任的标准”,我称为“置信度阈值”。通常取一个较小的数值,如0.1,0.05,0.01,0.005等)

书中的假设检验的思路是:根据检验标准(即置信度阈值),推断参数可信任的候选区间,如果设定的条件在可信任的候选区间内,则认为条件成立,否则不成立。

Note:
用python如何来进行二项检验:
例如:某地某一时期内出生35名婴儿,其中女性19名(定Sex=0),男性16名(定Sex=1)。问这个地方出生婴儿的性别比例与通常的男女性比例(总体概率约为0.5)是否不同?数据如表10-2所示。
原问题见:https://www.cnblogs.com/downmoon/archive/2012/03/26/2417668.html

则用python解决上述问题,可写成:
Day3 周志华《机器学习》读书笔记之模型选择

输出的结果是显著性水平p
Day3 周志华《机器学习》读书笔记之模型选择

解释:

from scipy import stats
print stats.binom_test.__doc__

Perform a test that the probability of success is p.
This is an exact, two-sided test of the null hypothesis that the probability of success in a Bernoulli experiment is `p`.

Parameters
    ----------
    x : integer or array_like
        the number of successes, or if xhas length 2, it is the
        number of successes and thenumber of failures.
    n : integer
        the number of trials.  This is ignored if x gives boththe
        number of successes andfailures
    p : float, optional
        The hypothesized probability ofsuccess.  0 <= p <= 1.The
        default value is p = 0.5

Returns
    -------
    p-value : float
        The p-value of the hypothesistest

References
http://en.wikipedia.org/wiki/Binomial_test
https://www.cnpython.com/qa/73544>

2. t检验(t-test)

适用于对单个学习器进行检验,并且做了多次留出法或者多次交叉验证法。

假设:测试错误率均值=泛化错误率,u=E0
Day3 周志华《机器学习》读书笔记之模型选择

Note:
如何利用python实现t检验?

t-test普遍存在的三种应用场景:
单样本t检验
配对样本t检验
独立样本t检验

代码详见以下链接:
https://blog.csdn.net/charie411/article/details/100009024

3. 交叉验证t检验

适合比较一个数据集中的两个算法的优劣。

可根据两个算法A和B的通过交叉验证法得到的测试错误率的差值,来对“算法A与B性能相同”这个假设作t检验。

假设:学习器A和学习器B性能相同。
Day3 周志华《机器学习》读书笔记之模型选择

注意:用此方法的前提是测试错误率均为泛化错误率的独立采样。

但是,使用交叉验证法时,不同轮次的训练集会有一定程度的重叠。
解决方法是使用“5×2交叉验证”。

4. McNemar检验

适用于比较一个数据集里面比较2个算法。

假设:两个学习器A和B的学习性能相同。
Day3 周志华《机器学习》读书笔记之模型选择

Note:
如何用python进行卡方检验?

卡方检验是一种假设检验方法,用于比较两个分类变量的关联性,基本思想是比较理论频数与实际频数的吻合程度。例如,在选举调查中,选民可能按性别(男性或女性)和投票偏好(*党,共和党或独立团体)进行分类。我们可以使用卡方检验来确定独立性,以确定性别是否与投票偏好相关。

变量A(A1,A2),B(B1,B2)独立性假设
H0:变量A与变量B之间独立no association,
H1:变量A与变量B之间存在相关性。

在独立性前提下,P(B1/A1)=P(B1/A2)=P(B1)计算理论频数,偏差(实际频数-理论频数)的平方与理论频数的加和记作卡方值。

由*度判断卡方值大小,*度=(行数-1)(列数-1)。如果卡方值小,则实际频数与理论频数偏差小,检验假设H0成立,否则检验假设不成立。

当卡方值≥卡方值[α]时,p≤0.05拒绝H0,接受H1;当卡方值<卡方值[α]时,p>0.05,尚没有理由拒绝H0.

参考:https://blog.csdn.net/charie411/article/details/99962293
Day3 周志华《机器学习》读书笔记之模型选择

例如:

参考:https://www.cnblogs.com/webRobot/p/6943562.html

5. Friedman检验

适用于在多个数据集上对多个算法进行比较,适用于算法和数据集比较多的情况,一半原始检验要求算法k>30,若k较小,则倾向于认为无显著区间。

假设:学习器A、B、C、……性能相同。

Note:
如何使用python进行F检验?

F检验又叫方差齐性检验。在两样本t检验中要用到F检验。
F检验法是英国统计学家Fisher提出的,主要通过比较两组数据的方差S^2,以确定他们的精密度是否有显著性差异。至于两组数据之间是否存在系统误差,则在进行F检验并确定它们的精密度没有显著性差异之后,再进行t 检验。

参考:https://blog.csdn.net/charie411/article/details/100009024

用上述F检验只能知道:A、B、C、……的性能是否有显著差异,要想知道到底哪两个学习器之间存在显著差异,还需要用Nemenyipost-hoc test。
Day3 周志华《机器学习》读书笔记之模型选择

二、 偏差和方差

泛化误差=偏差+方差+噪声

偏差:度量学习算法的期望预测与真实结果的偏离程度,刻画学习算法本身的拟合能力;

方差:度量同样大小的训练集的变动所导致的学习性能的变化,刻画数据扰动所造成的影响;

噪声:表达在当前任务上任何学习算法所能达到的期望泛化误差的下界,刻画学习问题本身的难度。

所以,泛化性能是由学习算法的能力、数据的充分性以及学习任务本身的难度所共同决定的。

相关阅读:

将ROC曲线从二分类任务推广到多分类任务:Hand, D. J. and R. J. Till. (2001) A simple generalisation of the area under the ROC curve for multiple class classification problems. Machine Learning, 45(2):171-186.

综述ROC曲线的用途:Fawcett, T. (2006). An introduction to ROC analysis. Pattern Recognition Letters, 27(8): 861-874.

讨论了多个算法进行比较检验的方法:Demsar, J. (2006). Statistical comparison of classifiers over multiple data sets. Journal of Machine Learning Research, 7:1-30.

三、思考:如何与脑机接口结合

我们以最近最火的文章为例看看模型选择。

文章题目:
High-performance brain-to-text communication via handwriting

模型选择很少在文章中进行说明,因为这是研究人员在发表之前要做的工作。有一种情况除外,就是你要证明你的模型好,就跟前人已发表的模型比较。

但是这种比较结果常用AUC之类的评价标准,用不到本节所列举的统计学方法。

不过通过仔细阅读这篇nature封面文章,还是在supp.material找到了一点模型选择的蛛丝马迹。

这篇文章的主要内容是:

脑机接口(BCI)可以使失去移动或说话能力的人恢复沟通。

到目前为止,BCI研究的主要重点一直是恢复总体运动技能(gross motor skill),例如reaching和grasping或使用计算机光标进行点击输入。但是,高度灵巧的行为(dexterousbehaviors)(如手写或触摸打字)的快速序列可能会加快通信速度。

在这里,作者开发了一种皮质内BCI,它使用递归神经网络解码方法(RNN decoder),将运动皮层中神经活动的尝试手写运动解码,并将其实时转换为文本。

研究参与者的手因脊髓损伤而瘫痪,使用此BCI,其打字速度达到了每分钟90个字符,online原始精度为94.1%,offline general-purposeautocorrect后精度为99%以上。

这些打字速度超过了任何其他BCI所报告的速度,并且可以与参与者年龄段的个人的典型智能手机打字速度相媲美(每分钟115个字符)。

最后,作者从理论上考虑解释了为什么诸如笔迹之类的时间复杂的运动从根本上比点到点的运动更容易解码。此结果为BCI开辟了一种新方法,并证明了在麻痹多年后准确解码快速,灵巧运动的可行性。

这个工作的难点主要是:如何识别用户什么时候开始尝试书写字母(Amajor challenge that had to be overcome for training decoders with our data isthat we don’tknow whatcharacter T5 was writing at any given moment in time in the training data,since his hand was paralyzed.);以及数据集比较小。

作者的decoder采用RNN。为了测试与更简单的解码方法相比,RNN对于实现高性能是否必要,作者测试了简单的隐式马尔可夫模型解码器的性能(请参见下表M5)。

结果证实, RNN优于简单的HMM,特别是对于held-out blocks,其特征均值可能由于神经的非平稳性而发生了显著变化。然而,值得注意的是,当考虑到特征均值漂移时,即使是HMM解码器也可以表现得相当好,这表明神经活动本身是高度可辨别的。

作者设计HMM解码器的方式与设计用于标记句子数据的强制对齐HMM的方式相同(在labeling data那一步作者也是用的HMM),不同的是,除了不包含通过固定字符序列前进的字符状态外,每个字符都可以以相等的概率过渡到任何其他字符。作者还将每个字符内的状态转换概率调整为以下值,以提高解码性能。
Day3 周志华《机器学习》读书笔记之模型选择

在评估解码器性能时,作者将语言模型应用于RNN和HMM。

因为与用于HMM的简单统一过渡模型相比,RNN本身可以学习更好地建模英语的字符过渡概率,所以使用语言模型可以补偿从而使比较更加公平。

在下面的表M5中,将RNN解码器的脱机性能(字符错误率)与隐马尔可夫模型(HMM)解码器进行了比较,两者都应用了语言模型。
Day3 周志华《机器学习》读书笔记之模型选择

结果表明,RNN大大优于HMM,特别是在特征均值可能已发生变化的情况下。HMM没有内置机制来适应特征均值的变化(随着时间的推移会逐渐增加基线发射速率的漂移),导致泛化为held-outblocks时的性能非常差。

这篇文章内容非常多,以后有时间的话可以做几期算法介绍。

参考链接

https://blog.csdn.net/Strive_For_Future/article/details/108461977

https://www.cnblogs.com/downmoon/archive/2012/03/26/2417668.html

https://blog.csdn.net/charie411/article/details/100009024

https://blog.csdn.net/charie411/article/details/99962293

https://www.cnblogs.com/webRobot/p/6943562.html

https://blog.csdn.net/charie411/article/details/100009024

参考文献

Willett F R, Avansino D T, Hochberg L R, et al. High-performance brain-to-text communication via imagined handwriting[J]. bioRxiv, 2020.

图源/《机器学习》、CSDN

Day3 周志华《机器学习》读书笔记之模型选择
Day3 周志华《机器学习》读书笔记之模型选择
Day3 周志华《机器学习》读书笔记之模型选择
Day3 周志华《机器学习》读书笔记之模型选择

上一篇:【机器学习系列】隐马尔科夫模型第三讲:EM算法求解HMM参数


下一篇:学点算法搞安全之HMM(下篇)