由于微信推送机制的变化,建议大家将公众号标记为星标,如此才能及时收到我们的更新,同时也希望大家能帮忙点点赞和转发,你们的支持是我们前进的重要动力来源,谢谢!护理统计随笔平台的内容现在已经非常丰富,很多方面都有涉及到,如果你觉得你没有看到往期的相关文章,不妨打开公众号的菜单页,在各级目录中查找你想要的内容。提醒:个人随笔,难度不大,不涉及深度学习,行文散漫,不权威、不正规,仅适用于护理学(或心理学、临床医学)初学者,如果您是初学者,想要知道机器学习到底是怎么回事,可以看看。如果您是已入门的选手,可看看本公众号推出的mlr系列学习资料,入口:
机器学习(Machine Learning)一词总让人误会,初学者乍看时脑海中可能会一闪而过'机器人'、'工科'、'仿真'等词汇。也许会想,这与我们护理(或者心理)有什么关系?没错,本人前几年第一次接触到机器学习时也有类似的感觉。令人迷惑的用词颇有种“高端”的感觉。不妨换个角度,把它称为统计学习(Statistical Learning),一切豁然开朗,本质就是统计学,或者加上计算机科学。比如,我们最常用的统计方法之一——多元线性回归、logistic回归,恰恰就是最简单的机器学习算法;再比如,大家熟知的临床(风险)预测模型也是机器学习在医学领域的扩展,本质就是机器学习。这么一看,其实我们早就会机器学习了……那么我们为什么还要学机器学习?因为很多时候只是用多元线性回归、logistic回归、cox回归等并不够用,而且机器学习空有算法可还不行,因为机器学习有三要素:模型、策略、算法。言归正传:机器学习到底是什么?我所理解的,就是从数据中建立统计模型并运用到新数据中进行预测。什么是模型?模型通常指的是一个数学函数或者一组函数,这些函数能够从数据中学习并做出预测或决策,这就是我们通过机器学习最终得到的东西,我们经常用的列线图就是对某些模型的可视化。模型学习过程就是算法,是一些既定的规则,比如线性回归、logistic回归、决策树、支持向量机、随机森林,等等。策略是模型选择的准则,对于同一组数据,不同的算法可以产生不同的模型,不是所有模型都是对的,恰恰相反,所有模型都是错的,但是其中一些模型是有作用的,所以我们只是利用模型的近似性质,通过筛选找到最优模型(对于当前数据最有用的模型)。当然是用软件做,R、Python、matlab都是很好用的工具。
基本思路:选定数据集-> 数据预处理->建模->验证->解释。在此之前,需要知道一些基本的知识(很无趣,但重要)。老生常谈了,监督与否,说白了就看你的研究数据有没有因变量y(机器学习中,y被称为“标签”,自变量被称为‘特征’),有则为监督学习。我所理解的监督是,假如现有一个学习到的模型A,用它对新数据集中进行预测时,会输出一系列预测值(比如logistic回归中的拟合值),我们正是借助数据集中本来就有的y,来跟预测值进行比较,以此判断该模型是否合适(模型评估),进而寻找最优模型。比如,我们要做一个糖尿病患者低血糖发生风险预测模型,y就是我们所感兴趣的结局变量(患者在特定时间段内是否发生低血糖)。这是个二分类变量,所以是个分类任务。训练集用于建模(训练模型),测试集用于评价最终模型(类似于考试,‘一考定终身’。测试集与训练集要互斥。数据集获取有几种策略,① 确实有两个数据集(比如多中心),将一个作为训练集,另一个做测试集。用这种测试集做评估就是所谓的外部验证过程。② 只有一个数据集。数据集不够,那么就拆分:留出法(hold out,随机拆分、分层随机拆分)、交叉验证(如k-折交叉验证,重复交叉验证)、自助法(bootstrap)。样本很大时,推荐交叉验证,不过应先留出一份测试集,再行最交叉验证(个人观点)。小样本最推荐bootstrap。③ 需要调整超参数时,需要建立验证集,验证集一般从训练集中拆分获得。将调好的模型放在训练集+验证集重新训练下。④ 测试集一定要独立:数据预处理时,如果做归一化、中心化、标准化等操作,要注意不能污染测试集。⑤ 类别不平衡:就二分类结局变量,理想的是阴性个数:阳性个数=1:1。极端例子:一个1000人的糖尿病数据集中,未发生低血糖并发症的人数是999,发生的才1个,这样的数据完全没法用来建模,也没法评价,像准确率这种指标,就算全预测是阴性,都有99.9%的准确率。所以要处理,常用方法:过采样(小类变多)、欠采样(大类变少)、阈值移动。泛化误差与训练误差不是越小越好,可能会存在过拟合(overfit)。过拟合:把特点当做一般来归纳,过度学习,无法完全避免,但需要缓解。欠拟合:收集的数据不足,也可能选择的算法无法胜任。模型选择:评估方法、性能度量、比较检验(概率,需要统计检验)。分类任务:准确率、AUC、基于混淆矩阵的指标(TP\TN\FT\FN,也就是灵敏度、特异度之类的,说法不同;约登指数、F1分数),等等。做临床预测模型时,还要从校准度(brier评分、HL检验、校准曲线)、临床适用性(决策曲线)等方面进行评价。笔者认为算法什么的其实很容易,数据预处理是最难也是最重要的,甚至决定了模型的性能表现。我们从研究中采集的数据可能是多种多样的,有文字有数值,计数资料、计量资料等,类型多样。拿R举例,建模之前要探索数据。比如,进行一般统计描述,看看变量分布、变量间的相关性,检查缺失值、异常值,有些建模前需要对数值做归一化、对分类变量进行编码(哑变量、独热编码等)……就此打住,机器学习理论是说不完的,永远在发展,笔者也没这水平,后面计划分享一些常见算法的实战。关于机器学习的理论知识,推荐阅读李航老师的《统计学习方法》,这本书出到第2版了,偏理论无实战,适合想要系统补充理论知识的同学。
参考文献中列出了BMJ杂志最新发表的介绍临床预测模型相关理论知识的文献,大家不妨读一读。
[1]李航 《统计学习方法》
[2]Hefin I. Rhys 《机器学习实战——使用R、tidyverse和mlr》
[3]Fred Nwanganga《R语言机器学习实战》
[4]http://dx.doi.org/10.1136/bmj-2023-074819
[5]http://dx.doi.org/10.1136/bmj-2023-074820
[6]http://dx.doi.org/10.1136/bmj-2023-074821
正文图片来自上述参考文献,封面来自参考文献4(Evaluation of clinical prediction models (part 1): from development to external validation)。本文仅供学习、分享使用,如有侵权,请联系我们删除,谢谢。
重要提醒:笔者打算写个小小的系列,会更新各种常用算法和它的实现,想到哪写到哪,可能不完整,也绝不是权威的学习资料,或许该称之为科普资料,因此仅供参考,请注意鉴别。此外:如果你在科研学习中遇到了疑问,恰好也想跟网友们交流,可以加入我们建立的“护理科研交流群”。这是一个完全自由、开放、免费、没有套路的纯交流群。加群方式:后台私信关键词“加群”。