当脑机接口遇上机器学习:周志华《机器学习》读书笔记之模型评估

发布于 2021-04-26 05:40 ,所属分类:知识学习综合资讯

我们,了解脑机接口最新进展


作者/小时,老周

编辑/小时


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

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


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

gongzhong号,后台回复“机器学习”,免费获得《机器学习》(西瓜书)的PDF文件。

Day 2



经验误差与过拟合


误差error=样本的真实输出-学习器的实际预测输出


学习器在训练集上的误差是训练误差,在新样本上的误差为泛化误差。我们希望泛化误差达到最小。


训练误差过大和过小都不好,过小的话会导致过拟合;过大会导致欠拟合。


Note:


机器学习中的过拟合与N/NP问题:

机器学习面临的问题通常是NP-hard甚至更难,而有效的学习算法必然是在多项式时间内运行完成,若可彻底避免过拟合,则通过经验误差最小化就能获最优解,这就意味着我们构造性地证明了“P=NP”,因此,只要相信“P≠NP”,过拟合就不可避免。

P/NP的定义:

P集合:在多项式时间内可以找出解的决策性问题的集合。

NP集合:在多项式时间内可以验证解是否正确的决策性问题的集合。


直白地讲,

P集合:可以很快求解的问题。

NP集合:可以很快验证给定答案是否正确的问题。

NP-hard集合:至少比任何NP问题一样难的问题。

NP-complete集合:同时满足两个条件:(1)该问题是一个NP问题;(2)所有NP问题可以归约为该问题。


模型的评估:如何得到测试集和训练集?


模型选择:选用哪一个学习算法,使用哪一种参数配置,使得泛化误差达到最小。

如何进行模型评估和选择?


通过实验测试来对学习器的泛化误差进行评估,从而进行选择。


所以,需要一个测试集来测试学习器对新样本的判别能力,然后以测试集上的测试误差作为泛化误差的近似。


测试集应尽可能与训练集互斥。达到举一反三的目的。

在数据集中得到测试集和训练集的三个方法:

留出法(hold-out)

直接将数据集D划分为两个互斥的集合——S(训练集)和T(测试集),


在S上训练出模型后,用T来评估测试误差,作为对泛化误差的估计。


注意:

  • ST的划分要尽可能保持数据分布的一致性。通常采用分层采样的方法(stratified sampling)。

  • 划分时可能存在多种划分方式。所以单次使用留出法得到结果不可靠,要进行多次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。

  • 划分多少S,多少T呢?常见的做法是将大约2/3—4/5的样本用于训练,其余用于测试。

一般而言,测试集要至少有30个样本。(Mitchell,1997)

验证法(cross validation

这是最常用的方法。


先将数据集D划分为k个大小相同的互斥子集,要从D中通过分层采样得到。每次用k-1个子集的并集作为训练集,余下的那个子集作为测试集。这样会获得k组S/T,进行k次训练和测试,最终返回的结果是这k个测试结果的均值。


k最常用的取值是10,其他常用的k值有5、20.

如果D里有m个样本,而k=m,叫做留一法(leave-one-out)。这样每个子集里只包含一个样本。


留一法得到的结果比较准确,但是计算复杂度非常高。


自助法(bootstrapping sampling)

也叫可重复采样或者有放回的采样。


包含m个样本的数据集D,对它进行一定方法进行采样后得到D',方法是:每次随机从D中挑选一个样本,拷贝这个样本放入D',然后再将这个样本放回D,这个样本在下次挑选时还可能被挑到。此过程重复执行m次,D'里就能获得m样本

在数据集较小、难以有效划分S/T时很有用。

对于不平衡的样本,也可用bootstrapping。

D里的一部分样本始终不会被采到的概率,取极限是0.368.

D'作为训练集,D\D'是测试集。


Note:

D\D':集合的减法(difference)。

如何计算集合的减法:



▲如何用python实现集合的减法



自助法产生的训练集会改变D的初始分布,会引入估计偏差。

数据集较小,难以有效划分S/T时,适合用自助法;

数据集较大足够时,适合用留出法和交叉验证法。

具体什么样的数据集是较小、足够的呢?

样本的数量至少是参数的数量×10,可以找到类似的依据。


参数调节和模型选择评估的联系,先后顺序是什么?

模型等价于算法,先选择一种算法,然后去写代码,用上面提到的三种方法划分S/T,再根据跑出来的结果调节参数。


模型的评估:性能度量


性能度量(performance measure):衡量模型泛化能力的评价标准。

回归任务常用的性能度量是均方误差(mean squared error)



这里重点讲解分类任务中的性能度量。

错误率与精度——最常用

错误率:分类错误的样本数占样本总数的比例。


精度:是分类正确的样本数占样本总数的比例。


查准率/查全率(Precision/Recall)

查准率:挑出的西瓜中有多少是好瓜

查全率:所有好瓜里有多少被挑了出来


查准率高时,查全率往往比较低,二者相互矛盾。

用P-R曲线来表现查准率和查全率。


不同学习器,比较他们查准率和查全率性能优劣的方法:

(1)比较P-R曲线下面积的大小;

(2)平衡点(Break-evenPoint, BEP):查准率和查重率相等时的取值。平衡点越大,学习器性能越好;

(3)比平衡点更常用的指标是F1度量。

F1是一种调和平均数。



Note:

调和平均数(harmonicmean)又称倒数平均数,是总体各统计变量倒数的算术平均数的倒数。调和平均数是平均数的一种。但统计调和平均数,与数学调和平均数不同,它是变量倒数的算术平均数的倒数。由于它是根据变量的倒数计算的,所以又称倒数平均数。调和平均数也有简单调和平均数和加权调和平均数两种。主要是用来解决在无法掌握总体单位数(频数)的情况下,只有每组的变量值和相应的标志总量,而需要求得平均数的情况下使用的一种数据方法。


ROC和AUC

许多学习器是为测试样本产生一个实际的值或概率预测,然后将这个预测值与一个分类阙值(threshold)作比较,若大于阙值则分为正类,否则为反类。


ROC曲线(Receiver Operating Characteristic):

根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个值——真正例率(True Positive Rate, TPR)和假正例率(False Positive Rate, FPR),以这两个值为横纵坐标,得到ROC曲线。




利用ROC曲线判断学习器性能优劣的方法:

比较ROC曲线下面的面积,AUCArea Under ROC Curve


排序质量和排序损失:

排序损失对应的是ROC曲线之上的面积,排序质量=1-排序损失

代价敏感错误率和代价曲线

不同类型的错误所造成的代价不一样,为权衡不同类型错误所造成的不同损失,可为错误赋予“非均等代价”(unequal cost)。


在非均等代价下,不能只是最小化错误次数,还要考虑最小化总体代价(total cost)。


可以用代价敏感错误率(cost-sensitive)来表示:




ROC曲线主要适用于均等代价情况,在非均等代价情况下,要用代价曲线(cost curve)来反映学习器的期望总体代价。




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

我们以一篇文章为例看看数据的准备和模型评估。


文章题目:

World’s fastest brain-computer interface: Combining EEG2Code with deep learning

主要内容:


文章提出了一种基于深度学习的新颖方法,用于从无创记录的脑电图(EEG)中解码感官信息(如眼睛看到的东西、耳朵听到的东西等,这些信息都会刺激人的大脑)。

它既可以用于被动式BCI中,以预测人们正在观看的视觉刺激的属性,也可以用于主动式BCI。

主动和被动,是以用户为中心的观点产生的。主动式BCI用户必须主动与机器的通信,而在被动式BCI中,信息的传送无需用户进行任何额外的动作。

http://m.elecfans.com/article/778587.html


文章对这两种情况均进行了测试,从而使被动式BCI的平均信息传输率(informationtransfer rate,ITR)达到701bit/分钟,而最佳受试者的online ITR达到了1237bit/分钟。

此外,它仅基于2秒的EEG数据就可以区分500,000种不同的视觉刺激,准确度最高可达100%。当使用该方法进行异步BCI(asynchronousself-paced BCI)拼写时,可以达到175bit/分钟的平均使用率,平均每分钟有35个无误的字母。

由于提出的方法提取的信息比以前最快的方法多三倍,因此文章认为EEG信号携带的信息要比一般普遍以为的要多。最后,文章观察到上限效应(aceiling effect),使得EEG中的信息含量超过BCI控制所需的信息含量,文章还讨论了BCI研究是否已达到非侵入式视觉BCI控制性的尽头了。



这篇文章没有介绍数据采集的详细信息,只简单说了采集了150个样本( samples),时长为250ms,采样频率600Hz,电极通路32channel。更优秀的文章应该单独成段说明这部分。

batch=256,learning rate=0.001,epoch=25. 模型示意图如下:


这里解释一下batch size,learning rate,epoch:


如果我有10000个sample,那我epoch取25,就是指我一个模型要训练25遍,一般来说每训练一遍模型会用到全部的training set,那我全部训练完成就是一共喂了10000*25个sample给模型。

我batch size取256,就是我每次同时喂256个sample给模型,这样相较于一次喂一个sample的好处是能更好的模拟数据集的分布,batch越大则对输入数据分布模拟的越好,更好的处理非凸的损失函数,合理利用内存容量。

learning rate是梯度下降时候的一个超参数(就是一个系数),这个值越大,梯度下降就越容易、敏感,但是太大了就会出现在极值点的反复震荡。
文章并没有说怎么分的test dataset和training dataset,这是不可取的,更优秀的文章应该说明。
对于模型performance measure的描述,要具体看你的模型是什么、你的实验是什么。

这篇文章使用了correctletters per minute (CLM)和the utility bitrate (UTR)和the information transfer rate (ITR)的性能度量指标,都是前人定义好的,但是是因地制宜的选用。




N是分类的个数,P是accuracy,T是predict一次需要的秒数,ITR,UTR的量纲是bit/min。

文章给了个表格来统计performance。


这样做不好,应该作图。

比如下面这张就还行:


总而言之,因地制宜选取合适的模型评估方式。


参考链接

https://blog.csdn.net/weixin_42829639/article/details/89095196

https://blog.csdn.net/weixin_43582101/article/details/86470331?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-4.control&dist_request_id=1331647.9781.16183856904272559&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-4.control
https://www.cnblogs.com/xjklmycw/p/9117199.html

https://baike.baidu.com/item/%E8%B0%83%E5%92%8C%E5%B9%B3%E5%9D%87%E6%95%B0/9661021?fr=aladdin

参考文献
Mitchell,T. (1997). Machine Learning. McGraw Hill, New York, NY.
Nagel, S., & Spüler, M. (2019). World’s fastest brain-computer interface: combining EEG2Code with deep learning.PloS one,14(9), e0221909.

图源/CSDN、《机器学习》




作者介绍







扫ErWeiMa|我们

gongzhong号|脑机接口研习社
联系方式|behavior_genomics@163.com
个人主页|https://github.com/Y-H-Joe

相关资源