文献解读:有监督的机器学习在心理学上的应用
最近看了一篇论文,写的比较系统,也比较基础,对复习强化有作用,顺便写下来分享给大家,文献原文贴在下面:
Rosenbusch, H., Soldner, F., Evans, A. M., & Zeelenberg, M. (2021). Supervised machine learning methods in psychology: A practical introduction with annotated R code. Social and Personality Psychology Compass, 15(2), e12579.
温馨提醒大家,文献中有所有提到方法的数据和代码,所以愿意钻研的同学自己可以去下载尝试的,有些东西你不动手,光看是学不会的。
机器学习模型
基本上大家看的多的基础的心理学文章,最常见的就是做个ordinary least-squares (OLS) regression,比如我要探讨哪两个个变量的关系了,我看看回归系数显著不显著,基本上就是这么玩儿的。
另一种玩法,稍微高端一点,得去考虑用显著的信息预测将来的变化,就用到机器学习的方法。
第一种玩法中,我们关心系数的大小和显著性,第二种玩法我们则关心预测的准确性。
怎么去评估一个预测模型的准确性呢?当然得把模型拉出来溜溜,就是说我们把训练好的模型要应用到新的数据上,通过将预测结果和真实结果进行对比从而评价准确性,这是基本思路,所以我们会划分训练集和测试集。
作者举了个例子来说明这种思路对心理学研究的重要意义:前人已经发现了睡眠不足对自杀意向有显著影响,这个发现的现实意义怎么样挖掘?影响又如何?如果我能进一步发现睡眠剥夺真的可以预测自杀,是不是现实意义更大?
Previous work found, for instance, that insufficient sleep is associated with suicidal intentions (Ribeiro et al., 2012). This work, based on inferential tests, reveals a significant correlation between sleep deprivation and suicidal thoughts. However, it does not tell us how accurately sleep predicts suicidal intentions. Is the model accurate enough to implement alert systems based on sleep quality?
上面的工作就得依仗机器学习。
预测准确性
当结局是连续变量时,预测值和真实值的误差越小则越精确,此时评价标准有:
R2:这个其实就是大家做回归时会报告的R方,越大越好,公式和做法如下:
[图片上传失败...(image-5c5545-1661345703595)]
MAE:mean absolute error和mean absolute error RMSE:这两个指标都是预测值减去真实值的误差,越小越好,算法和做法如下:
[图片上传失败...(image-8e191c-1661345703595)]
当结局是分类变量的时候(此处只讨论二分类),我们会有混淆矩阵:
[图片上传失败...(image-c05e75-1661345703595)]
此时,评价标准有:
accuracy:就是预测对的比上预测总数,这个指标还可以衍生出来sensitivity和specificity,其算法和做法如下:
[图片上传失败...(image-20acf-1661345703595)]
[图片上传失败...(image-798bbb-1661345703595)]
如果我们希望阳性的个案都能被找出来,此时我们就会偏向于提高模型的sensitivity,如果我们不希望有太多的假阳性,我们就会偏向于提高模型的precision,如果我们也不知道该不该有所偏向,我们还能结合precision和sensitivity再生成一个新的指标叫做F1score,其算法和做法如下:
[图片上传失败...(image-c8d27d-1661345703595)]
模型验证
总体思想:训练模型的数据不能用来验证,不然就overfitting的问题就避免不了,尤其是训练样本本身不大的时候。
模型验证有两个办法:一个是划分数据Train–test split,另一个是交叉验证K-fold cross-validation。各有优劣不过交叉验证更好点。
基本上大家做的比较多的还是划分数据,就是将数据划分为训练集和测试集,训练集用来训练模型,用测试集评估模型表现,这种情况如果样本本身比较小,结果将会非常不稳定,强烈不推荐,K折交叉验证就会好很多。
作者给出的意见是:交叉验证常规都得做,不做是应该给出理由的!
K折交叉验证的代码如下:
[图片上传失败...(image-6a01a7-1661345703595)]
样本量问题
对于机器学习的样本量,总体基调是:可多可少,越大越好,没有精确标准或指南。
但是可以参考几个方面:一是以往同类型研究,二是预试验,就是如果可以的话找同类型的数据进行预试验,探究出样本量和同类学习问题预测准确性的关系,找到饱和点,这个饱和点对应的样本量就是你需要的样本量;三就是模拟数据,根据已有知识或经验模拟出数据,做出学习曲线,确定样本量,如下:
[图片上传失败...(image-3dae9-1661345703595)]
四就是看看模型在训练集和测试集的表现差异,如果我们发现模型在训练集中表现很好,放在测试集中就不行了,那么就提示数据量不够。
反正记住总体基调:预先想设定算法的样本量的尝试都是不合理的(本身你就是data-driven的,提前限制数据量显然说不过去),但是机器学习的样本量一般都得大:
In summary, machine learning projects split data into separate training and testing sets. As the shape of the best prediction model is determined based on the data, it is more difficult and less common to preregister required sample sizes. However, machine learning requires extra data for out-of-sample evaluation and prediction models often include many predictors/coefficients; as a result, required sample sizes are typically large
常见的机器学习模型
1.岭回归Ridge regression
传统的ols回归的目标是减少总体残差,随之的问题就是有可能系数过多模型过于复杂,岭回归可以简单理解为在使得模型残差尽可能小的情况下,也同时避免模型过度复杂(minimize the sum of squared beta coefficients),从而使得模型的推广性更好,预测能力更强。
两种模型的损失函数如下:
[图片上传失败...(image-ed9405-1661345703595)]
可以看到岭回归加了一个对回归系数的惩罚项。系数那慕达是岭回归的超参数,那慕达越大表示模型越保守,越不容易过拟合:
Lambda quantifies how strongly regression weights should be suppressed, thereby dictating the tradeoff between error reduction and model simplicity. Higher values of lambda lead to a stronger penalization of regression weights and therefore a more restricted/conservative model
这儿是本文首次提到超参(之前文章也有介绍,感兴趣的同学去翻翻),这个超参是不能从数据中学习出来的,是需要人调的。叫做调参。
岭回归的R语言实现代码如下:
[图片上传失败...(image-9bb5d-1661345703595)]
2.决策树与随机森林
关于基于树的分类算法,我记得之前有写一篇文章大家可以去瞅瞅。简单来讲就是每个观测通过一颗树,不停地分叉一直分到最终的叶子上,每个叶子内的观测被认为是一类,对于基于树的算法一个很重要的评估标准的就是同一个叶子内的观测的一致性。我们当然是希望模型给我们分了不同的叶子,叶子内的数据完全一致,不同叶子的数据完全不同,这是理想情况,这个一致性的大小可以用熵值来表示,熵值的算法和决策树示意图见下:
[图片上传失败...(image-50ef6-1661345703595)]
[图片上传失败...(image-cdea3f-1661345703595)]
这棵树可大可小,理论上可以无限延长,使得训练模型可以完全匹配数据,但是牺牲模型的推广性,模型到底训练到何种程度,也有超参可以控制maximum “number of leaves” or “number of data splits.”
决策树的示例代码如下:
[图片上传失败...(image-daf24e-1661345703595)]
再来看随机森林,很多树就成了森林,随机森林便是很多决策树组成的,不是一棵树已经可以给出结果了吗?为啥要弄一片森林?森林中树与树又有何不同?请看下面的解答:
When building each decision tree, a random (bootstrapped) sample of available observations is selected, and a random subset of available predictor variables is considered for each split. Having many different decision trees based on slightly different sets of observations and predictor variables minimizes the biases of individual trees and reduces overfitting
具体在训练过程中要用几颗树,也是超参,需要你来决定,不过一般都很大,随机森林的实现代码如下:
[图片上传失败...(image-efa820-1661345703594)]
我们还可以将随机森林的结果何决策树的结果进行比较:
[图片上传失败...(image-116990-1661345703594)]
可以看到预测准确性还是随机森林显著高。
小结
今天给大家分享了机器学习的一些基本,内容都来自文献,原文中作者还给出了机器学习模型结果报告的相关建议,推荐去读原文哈,希望对大家有所帮助。
今天的文章只提到有监督的学习,什么是有监督什么是无监督请翻看之前文章。