Science Advances:社会和健康科学中用于描述、预测和因果推理的机器学习方法

社会和健康科学中使用的机器学习(ML)方法需要符合描述、预测或因果推理等预期研究目的。本文通过结合这些学科的统计分析的必要要求,为社会和健康科学中的研究问题与适当的ML方法进行了全面、系统的元映射。作者将已建立的分类映射到描述、预测、反事实预测和因果结构学习,以实现共同的研究目标,如估计不良社会或健康结果的流行率、预测事件的风险、识别不良结果的风险因素或原因,并解释通用的ML性能指标。这种映射可能有助于充分利用ML的好处,同时考虑与社会和健康科学相关的特定领域方面,并希望有助于加速ML应用的普及,以推进基础和应用社会和健康科学研究。

引言

与许多传统的统计方法相比,随着与社会和健康科学相关的大型数据集越来越多,机器学习(ML)方法有可能大大改善经验分析的各个方面。这包括通过快速处理大量数据在预测方面的进展;检测暴露和混杂因素之间的非线性和高阶关系;以及提高预测的准确性。然而,从社会学、心理学和经济学到社会和临床流行病学以及公共卫生,社会和健康研究对ML方法的吸收相当缓慢,至今仍是零散的。作者认为,这部分是由于学科之间缺乏沟通,社会和健康科学的分析方法中对领域知识的整合有限,以及缺乏适合社会和健康科学研究目标的ML方法的概述。

本文的目的是通过系统地将社会和健康科学的研究目标与适当的ML方法进行映射,提供一个高水平的、非技术性的ML方法工具箱;解释ML的常见指标;并为研究人员指出ML建模中常见问题的解决方案。作者的综审查重点是涉及以人类参与者为研究单位的数据集以及对临床评估或自我报告的变量的分析的研究问题。在社会和健康科学领域使用ML的大多数研究中,作者在此介绍的是在静态数据集上训练的模型,也就是说,模型不是持续处理新的数据,而是依赖于数据收集和清理结束后的队列研究或调查的有限数据集。

作者的评论应被视为对流行病学和健康研究、心理学和经济学等领域的ML介绍论文的补充。有关统计学习的一般介绍,感兴趣的读者可以参考有关这些方法的优秀教科书。

本综述的其余部分组织如下:“将社会和健康科学的研究目的映射到ML任务”部分概述了将社会和健康科学的研究目的映射到适当的ML方法的主要任务。“ML基础知识”部分涵盖了ML的基础知识,特别是传统的ML分类、数据准备、模型构建和ML的“真实世界”应用。接下来的部分将介绍ML方法与描述、预测和因果推理的研究目的的映射,映射适当的ML方法并给出经验示例。“ML 性能指标”部分概述了ML性能指标。“展望”部分以展望结束。

将社会和健康科学的研究目的映射到ML任务

简而言之,社会和健康科学中的常见研究目的可以归类为研究人员的意图:(i)描述现象,(ii)预测社会或健康结果,以及(iii)找到干预的原因和可能性以改善这些结果。在本综述过程中,作者将更详细地提出与描述、预测和因果推断相关的具体研究问题,即使并非所有研究问题都允许这些严格的区分。作者将把这些研究问题映射到适当的ML方法,尽可能使用实证研究作为说明。

本综述中总结为ML的方法代表了数据分析的不同领域,例如推理统计、统计学习和计算科学。它们的共同点是处理大量数据的能力,而模型构建和模型选择决策更多地由数据结构(数据驱动)驱动,而不是传统的推理统计。

在将ML应用于社会和健康科学的研究问题时,统计和领域知识都是相关的。探索性数据分析用于总结和可视化数据的主要特征,是数据分析和ML中重要的第一步。然而,不可知的数据探索,即不考虑领域知识的数据分析,在大多数情况下单独提供的见解会比较少。社会和健康科学中领域知识的重要性的一些例子如下:

1)决策树和其他ML算法中连续变量的偏好可能导致高估年龄作为预测指标,而实际上,年龄与社会或健康现象的约束要少得多(例如,整个生命过程中认知表现的强烈异质性)。

2)在数据驱动的分析中,缺失的数据可能会被识别为有意义的信息(而且往往是这样),然而,这需要结合所观察的人群以及所关注的暴露和结果来进行分析。

3)在数据驱动的分析中被确定为相关的类别在概念上可能不具有同样的意义,例如,与教育有关的类别 “其他”或 “以上都不是”可能反映了非典型的低教育水平或在国外获得的教育学位,这同样需要结合实际情况。

4)决定因素-结果关联可能存在偏差,因为具有不同社会人口学和社会经济特征的个体的行为(和调查参与)的系统差异与健康的社会决定因素研究高度相关。

作者注意到,最后一个例子通常意味着医疗保健中的不公正,当数据不平等和少数民族的结构性歧视可能导致歧视ML算法,并有可能进一步加剧健康不平等。虽然这里介绍的一些ML方法比其他方法需要更多的领域知识,特别是用于因果推理的ML,但作者认为,在社会和健康科学的所有研究问题中,大量的领域知识对于对该领域做出有意义的贡献是必要的,这是可解释性的先决条件。虽然计算领域传统上强调预测(和统计知识)的改进,但社会和健康科学通常优先考虑解释(和领域知识);本综述旨在表明,我们确实需要提高社会科学和健康科学的科学知识。

有必要在社会和健康科学的研究人员与受过方法学培训的研究人员之间建立流畅的对话,以避免“重新发现车轮”。ML研究人员可能缺乏领域知识,并忽略了以前发现与社会和健康科学高度相关的数据特征(例如,在整合数据集时过度简化某些变量的重新编码)。相比之下,社会和健康科学的研究人员可能没有意识到算法背后的复杂数学和统计学,以及改进ML方法的快速发展。总的来说,根据自己的经验,作者建议通过邀请数据科学和机器学习专家进行社会和健康科学研究来进行跨学科合作,并希望这里介绍的映射将促进对不同学科的相互理解。

机器学习基础知识

在转向描述、预测和因果推断的ML之前,作者简要概述了ML,首先是 (i)ML方法的传统分类,(ii)对数据准备的考虑,(iii)模型构建,以及 (iv)ML在现实世界应用中的可信度。

ML方法的传统分类

从数据科学的角度来看,大多数ML方法可以被分为三个主要分支:无监督学习、监督学习和强化学习。

1)无监督学习是一个总称,指的是从未标记的数据中学习模式的算法,也就是说,没有被人类标记的变量。例如,无监督学习将在相似性的基础上对数据实例进行分组。

2)监督学习包括通过使用标记的数据来学习一个函数,该函数将输入映射到输出,也就是说,结果变量的类别的值被分配了有意义的标签或标识。在社会和健康科学领域,输入被称为预测因素、自变量或暴露,以及协变量;输出被称为结果或因变量。监督学习需要标记的训练数据,并且可以在标记的测试数据集中进行验证。我们将介绍神经网络(通常称为人工神经网络)作为预测算法的一个例子,以及贝叶斯加性回归树(BART)作为因果推断的ML的一个例子。惩罚性回归,如LASSO(最小绝对收缩和选择算子)根据预测能力浓缩了模型中的变量数量,往往有助于得出既简明又性能良好的模型。

3)强化学习关注的是一个智能代理对环境作出决定,并在累积奖励概念的基础上进行改进,也就是说,代理会根据环境的反馈来改变和优化输入。强化学习可以应用在数据生成的环境中,即在其他特征(协变量)的控制下操纵一个处理变量(所谓的A/B测试)是可能的。

作为一种学习技术,迁移学习使用多个数据源从一个数据集中学习知识,并将这些知识转移到来自不同人群的另一个数据集,甚至可能在不同的结果上。因此,迁移学习会将学习的特征从一种情况转移到另一种(一致的)情况,从而识别各种情况的共同模式和行为。虽然经常与标记数据一起使用,因此被提及为特定于监督ML的方法,但也开发了迁移学习方法,例如,在无监督学习和图像识别以及本综述未涵盖的其他应用中。作者将把迁移学习作为一个建议来介绍,以减少在数据不平等情况下的公平性侵犯。

数据准备

与传统统计不同,ML需要仔细的准备数据。在下文中,我们将讨论与ML有关的具体方面:(i)数据要求、(ii)特征选择和(iii)特征工程。后两者涉及以算法理解的方式准备暴露和结果变量。

ML的数据要求

此处介绍的大多数ML方法都需要比传统建模更大的数据集,以使模型在没有用于模型训练的数据集中的表现优于传统建模。数据的某些方面应该有较大的数量,如时间点、变量或个体。经验法则是要有几万个数据点可用,尽管这取决于数据和ML方法,一些应用已经使用非常小的数据集进行探索性分析。正如后面所讨论的,所需的数据点数量取决于数据维度(例如,预测因子的数量)和模型的复杂性与数据生成机制中未知的真实稀疏性和复杂性的权衡,因此,如果认为基础信号非常稀疏,则可能允许将ML方法应用于所谓的胖数据集(当特征数量远大于样本量)。与非ML分析类似,仔细处理数据(例如,在协调过程中),深入了解数据来自何处以及它们可以告诉我们什么(以及不能告诉我们什么)至关重要。ML工作流程已在几篇介绍性论文中进行了描述。根据数据保护的法律要求,有趣的是联邦学习的概念,即在不跨平台交换数据的情况下分散训练ML算法。联邦学习需要一个统一的统一数据收集和分析框架才能取得成功。

特征选择

特征选择是通常由研究者指导的对要处理的变量的选择。这可以基于领域知识来完成,也可以通过应用最小冗余度最大相关性标准或其他特征选择标准来进行数据驱动。研究人员指导的特征选择在大型数据集中可能会有所帮助,如经济合作与发展组织的多国重复横断面国际学生评估计划或来自健康和退休研究系列的纵向统一老龄化调查。

在选择纳入模型的特征时,研究人员应该始终意识到维度灾难,它描述了测试误差随着问题维度的增加而增加的趋势,除非额外的特征与反应真正相关(即不只是增加噪音)。更多的特征,即模型中的变量,会增加问题的维度,加剧过拟合的风险。因此,允许收集数以千计甚至数以百万计的特征的数据采集进展是一把双刃剑;如果这些特征是真正相关的,并且样本具有人口代表性,则可以改善预测,但如果不是这样,则会导致更多的偏颇结果。此外,即使它们是相关的,偏差的减少也可能被它们的拟合所引起的方差增加所抵消。稀疏恢复的Donoho-Tanner相变定义了稀疏性/欠采样权衡曲线的尖锐边界;特别是,当模型的复杂性超过阈值时,模型选择和拟合会突然崩溃,具体取决于数据的大小和真实复杂性。对于变量或特征选择的情况,这意味着对数据分析的成功程度有硬性限制。数据驱动的特征选择是惩罚方法的特征,惩罚方法根据其预测能力选择特征,从而限制模型中的特征数量。

特征工程

概念上有趣的特征,例如累积风险(两个预测因子的乘法效应)或测量值之间的变化(例如,体重随时间的变化),仅仅把它们添加到变量池中是不能很好地检测的。可以在领域知识的基础上对特征进行设计,例如,建立差异测量或平方项。最近提出了一种调查系统特征互动的方法,即基于树的随机森林特征重要性和特征互动网络分析框架。我们另外建议探讨降低(相关)自变量集合的复杂性是否有意义,如因子分析或聚类分析和/或基于理论的变量选择,以提高特征与单位的比例,对于具体的研究领域和方法规范,已经提出了样本量建议。如果数据集足够大,那么根据我们的经验,一个经验法则是要有几万个相关单位(如调查的受访者);这就可以使用神经网络,众所周知,神经网络在模型的生成过程中使用特征工程。

虽然有必要使连续变量在方差上相等,但作者建议仅在社会和健康科学的研究人员仍然可以确保对实际应用进行一定可解释性的情况下使用手动特征工程,特别是为了因果推断的目的,当暴露需要被很好地定义以便随后用于现实世界的干预。假设我们反复评估体重指数(BMI)来预测或解释健康状况,那么在评估编号x(或疾病发作前x年)标记BMI的模型在实践中可能没有意义;然而,在手动对BMI的斜率进行特征设计后,标记BMI的增加或减少为预测疾病的模型可能对识别高危患者非常有用。另一方面,传统的建模方法高度依赖于研究者的决定(例如,用二次方而不是线性关系建模,以及手动建模交互作用效果)。在这里,关于特征工程的基于算法的决定,例如,在神经网络中,可以提供更稳健和准确的结果。

模型构建

在模型构建过程中,ML方法通常涉及(i)训练、(ii)验证和(iii)测试三个步骤。大多数研究人员都熟悉 ML 建模过程,该过程包括首先将数据拆分为训练集和独立测试集,然后进一步将数据拆分为训练集和验证集。

1)训练:在所谓的训练数据集中估计模型参数。

2)验证:在验证数据集中对几个训练过的模型进行评估,从中选择最接近相关指标(如复杂性)的模型并调整其超参数。

3)测试:在一个单独的(保留的)测试数据集中对模型进行测试,以评估其泛化误差。这一措施表明了该模型在未来的数据集中的相关性能指标的表现如何,例如,分类的准确性。为了改善验证和测试阶段的结果,可以进行交叉验证,这也是更传统的统计方法中使用的程序。

研究人员需要意识到提高预测准确性和过度拟合之间的权衡。由于过度拟合,训练误差通常会随着模型的复杂性而减少,而测试误差曲线呈U型,一开始由于欠拟合而减少,然后由于过度拟合而增加(图1)。虽然这可能表明选择测试误差最小的模型,但重要的是永远不要把测试数据用于模型拟合或选择,否则这将给出一个不现实的乐观的性能衡量标准。因此,在验证阶段,训练数据被进一步分割成验证集,并通过最小化验证误差来选择模型的复杂性和调整参数。为了改善估计和减少变异性,交叉验证是验证阶段的标准,它对数据的K倍分割进行平均化。然而,作者注意到交叉验证也可以在测试中进行,以改善对测试误差的估计,特别是当样本量较小时。为了保证不在测试数据上进行训练,这可能需要进行嵌套的K-fold操作,使用K-fold验证来选择每个测试折叠内的模型。此外,如果使用交叉验证的测试误差,那么应该报告随机拆分的情况,以保证可重复性,并允许其他研究人员比较和测试这些方法。在图1中说明了预测精度和过拟合之间的权衡,该图强调了训练、验证和测试误差的典型相互关系。我们几乎总是期望训练曲线位于测试曲线之下,因为大多数方法的目标是最小化训练误差。验证曲线通常位于测试曲线之上,因为它是在一个较小的训练集上训练的,而且由于随机数据的分割,验证曲线也可能是高度可变的,尽管交叉验证有助于减少这种可变性。然而,验证的目标是确定正确的灵活性水平,即测试误差的最小点。作者注意到,交叉验证在独立和相同分布数据的假设下是合适的;对于某些数据,如时间序列或纵向数据,这是不合适的,拆分必须考虑数据的结构。当验证曲线相对平坦时,更简单的模型是首选。

图1 模型误差与复杂性之间的典型关系

在模型构建阶段,许多预测ML方法将重视比其他方法更实质性地提高性能的特征(变量)。社会和健康科学领域的研究人员需要注意,一些ML方法,如回归树,会高估连续预测因子的价值,仅仅是因为有更多可能的分割点。虽然一些算法中存在分类变量的分割决策规则,但不同软件包对它们的处理方式不同。相反,像BART这样的方法(下文有更详细的描述)应该可以处理同时包含连续、二分和分类预测因子的情况。经验表明,连续变量可能仍然受到青睐。

模型的建立可以通过用户友好的界面来完成,这些界面在过去十年中已经被开发出来。AutoML方法旨在促进非数据科学研究人员的ML工作流程。默认情况下,AutoML训练和交叉验证广义线性模型、梯度提升机、随机森林和深度神经网络,并通过超级学习/堆叠将它们结合起来以提高模型的拟合度。Python软件库scikit-learn让研究人员通过一个用户友好的平台选择ML算法。虽然易于使用的界面对非数据科学研究人员很有吸引力,而且在很多情况下也很有帮助,但作者认为,与传统推理统计的研究类似,要想做出实质性的研究贡献,仍然需要对应用方法有更详细的了解。

ML实际应用的注意事项

在ML基础上开发的模型,与用更 “传统”的建模方法开发的模型类似,将为社会和健康科学的预防、诊断、治疗和护理以及政策和实践提供信息。利益相关者、用户和整个社会需要接受ML在现实世界中的这些应用--一句话,ML [在这里通常称为人工智能(AI)] 需要 “值得信赖”。特别是在为ML驱动的医疗或社会应用建立更大的框架时,ML和AI的应用需要从技术和社会的角度来看是合法的、道德的和强大的。在下文中,将提及在社会和健康科学中应用ML时,值得信赖的人工智能的三个相关概念,特别是(i)可解释性,(ii)公平性,(iii)可概括性,以及(iv)ML支持人类能力和技能。

可解释性/可解释性和可视化

可解释的ML意味着从ML模型中提取相关的知识,即能够反馈到一个学科的领域知识中,其特点是预测的准确性、描述的准确性和相关性,而相关性是相对于人类受众来判断的。可解释性在高风险的决策中特别重要,如临床决策。有人建议,不要把可解释的模型与原来的“黑盒子 ”模型分开开发,而是在设计上只使用可解释的模型,因为只有可解释的模型才能实现用户眼中的透明度和可信度。可解释的人工智能在最近的项目中通常被称为可解释的人工智能或XAI。

在实践中,可解释性通常与可视化估计或发现的变量之间关系的可能性有关。为了提高可解释性,可以将可能存在非线性模式的双变量和高阶数据关联可视化,例如用部分依赖图、SHAP(SHapley Additive exPlanations)图或个别条件期望图,这是部分依赖图的一个较新的、不太知名的改编。

公平性

健康和社会科学中的一个相关概念是ML算法要 “公平”地决定,即不歧视某些社会或少数群体。作者参考其他文献中与ML总体公平性有关的例子,以及使用中的卫生保健算法中种族偏见的一个突出例子。在此,特别是在高风险决策的ML应用中,如预测累犯,预测模型的准确性需要与平等对待所有社会群体的模型相平衡,即ML模型导致所有社会群体获得理想结果的概率相同。重要的是,基于ML的决策中无意实施的结构性歧视/种族主义可能会破坏健康公平的努力。这种“算法公平”的概念已经受到了批评。解决 "数据内 "产生公平性问题的新提案建议定义反事实的公平性。最近的一项系统评估表明,使用公平性标准会损害模型的性能,同时会导致公平性的改善,这一点值得商榷。因此,研究人员建议考虑在算法之外可能违反公平性的更广泛的社会技术背景。在审查范围之外,关键是要认识到公平不仅在算法的应用中很重要,而且在整个研究过程的弧度中也很重要。这被认为是一条伦理管道,从“公平”的研究问题、公平的数据收集、公平的数据分析到ML算法的部署后审计,以验证决策算法的“公平性”。数据不平等,即在生物医学保健研究领域来自少数群体成员的较小或较低质量的样本,已经通过在多数群体的数据上训练模型,然后使用(知识)迁移学习在少数群体的数据中微调模型性能来解决。然而,除非医疗保健数据中的数据不平等得到系统的改善,否则一些问题仍然存在。

可推广性或外部有效性

外部有效性的普适性的重要性并不限于ML方法。在整个研究设计和数据收集的各个阶段,我们需要考虑可能损害普遍性的偏见,因为我们希望研究结果具有超越其发现的数据集的有效性。在ML的背景下,重要的是要提到过度拟合的风险,即通过在以前未使用过的数据集中冒着模型性能的风险来提高数据集内的模型准确性。一个关于队列研究中招募的差异如何导致ML算法的不同性能的例子是。此外,与更传统的分析类似,建议对方法进行三角测量。作者进一步强调在统计分析中记录所有决定到细节的重要性(例如,指定随机数的种子),以确保科学发现是可复制的。

可推广性的一个特殊情况是假设测量的概念,即我们的暴露或自变量和我们感兴趣的结果或因变量是静止的,也就是说,不随时间变化或取决于模型收到的输入。然而,在许多情况下,我们更有可能需要注意可能的概念漂移,即由于外部因素导致的输入-输出关系的变化。这与不断接收新传入的数据进行处理的ML引擎有关,这些数据可以用医疗保健、教育或消费者数据来设置(尽管在撰写本文时,社会和健康科学研究中没有广泛使用)。虽然迄今为止社会和健康科学领域的大多数研究都是处理静态数据集,但随着不断处理新传入数据的ML引擎的发展,这一概念的重要性将会增加,例如通过跟踪应用程序或社交网络数据。

机器学习以提高人类的能力和技能

有许多ML用例来支持人类在工作或日常生活中。推荐系统被应用于多个领域,根据早期的信息,如同一用户或其他用户的评分,向用户推荐相关物品。从推荐系统在旅游、商业和营销领域的应用来看,我们只是介绍了推荐系统如何帮助工作和健康护理的例子。推荐系统被用来克服自杀预防热线上咨询师与求助者长时间的支持性聊天中的写作障碍;这种设置似乎有希望支持情感上的艰苦工作,即使在这个时候,人类专家的表现仍然超过了推荐系统的表现。现在转向描述、预测和因果推断的ML方法的分类(其中一些公认的方法起源于标准统计方法),并从描述的ML方法开始。

用于描述的ML

描述性研究问题的目的是“对世界的某些特征进行定量总结"。描述是所有应用研究的基础,因为我们需要描述来量化所研究的现象,例如,评估变量在(社会)群体、国家或地理实体之间的流行率或分布情况,或者随着时间的推移(在同族之间)。这可以通过几种算法来完成(表1)。在谈到社会和健康科学中有关描述的研究目标之前,我们首先介绍两类相关的方法,即因子分析和聚类分析,许多社会和健康科学的研究者已经意识到这一点。

表1 对社会和健康科学中最相关的描述的ML方法进行概述和非技术性描述

降维可以降低数据集的复杂性,以便更有效地进行后续分析。因子分析将为所包含的变量提供因子和因子载荷。因子通常被用作后续分析中信息密集的变量。读者应注意,基于贝叶斯模型的算法可用于因子分析和本文介绍的其他方法,但不会详细介绍。要为因子分析预选可解释和有意义的变量,领域知识是必要的,因为聚类(和因子)分析不能从概念上区分变量,例如,数据是来自人类还是来自其他来源。我们建议不要将个人层面的变量与高阶变量混在一起,例如,在因子分析中与环境或邻里有关的变量,以确保在后续分析中因子的可解释性。另一个有用的方法是聚类分析,在相似性的基础上对数据进行分组。与因子分析不同的是,聚类分析可以帮助同时处理个人层面和环境层面的变量测量,例如,个人层面的BMI和环境层面的空气污染,以调查不同的风险群体或配置文件(例如,具有高BMI和高空气污染)的心血管死亡。最后,如果样本和变量需要同时分组,双聚类法可能会有帮助。

描述性研究目标可以在社会和健康科学中找到:(i) 筛选和识别高危个体或更高层次的模式,(ii) 识别风险概况,(iii) 估计和预测不良结果的流行率,以及(iv) 诊断的研究目标。这四个研究目标将在本节的其余部分进行描述。

筛查和识别高危个体或更高级别的模式

通过对数据的自动处理,可以对个人进行单一风险因素的筛查;例如,通过对电子健康记录的处理,可以确定不良健康结果风险升高的人。这个研究目标可以用异常检测的算法来解决。进行聚类或因子分析,可以同时处理一组变量,通过分析不同个体的模式。为了确定与衰老有关的发病途径,用不同的聚类算法分析了包含278种高负担疾病信息的电子健康记录,根据疾病发病时的年龄模式对疾病进行分组。为了补充,从ML中得到的复杂信息用传统的绘图法进行了可视化,例如,每个疾病群的发病曲线分布。

对时变变量的轨迹进行纵向分析,有助于更好地了解以前确定的风险因素的轨迹,有短期或长期的观察数据,最好有至少五次的随访测量。许多社会和健康现象在生命过程中会发生变化,其轨迹可以被认为是正常的发展(例如,在儿童和青少年时期认知技能的增加和在晚年的减少)。然而,其他的变化可能预示着疾病的发生(如体重的大幅增加、体重的大幅下降或中年认知能力的下降),因此在干预和实践中是相关的。短期重复评估在可能需要持续监测和干预的情况下可能是相关的,例如在外科方面,监测因素的轨迹可能带来对病人状况的额外了解。在长期风险预测相关的疾病中,或者在长期的前驱阶段需要区分因素是否确实是风险因素或早期症状的情况下,长期的重复评估可能是有趣的。在长期随访中,通过对每个测量场合的抑郁症状数量进行K-均值聚类来识别抑郁症轨迹,以区分早发和晚发的抑郁症,并测试它们与脑部不良结果的关系。另一项研究对首发精神病患者的数据进行了模糊聚类,确定了“预后良好”、“缓解过程”、“临床恶化”和“慢性过程”四种轨迹,恶化和缓解过程有明显的风险因素。类似的分析可以帮助阐明生命过程中不断变化的危险因素的重要性和它们之间的相互作用。

在对衰老相关疾病的调查中,需要考虑到死亡这一竞争性风险,例如使用随机生存森林,它也允许对时间变化的风险因素进行建模。如果关注的是时变治疗的短期后果,也就是说,如果想得出因果关系的结论,那么使用潜在结果框架中的既定方法可能更好,如边际结构模型或公式。

识别风险概况

为了识别风险概况,即以一组变量上的某些数值为特征的个人群体,可以根据以前识别风险或保护因素的文献,使用发现的ML来描述和减少复杂性。使用重症监护室环境中常见的严重程度评分,用时间序列数据中的一些降维(和预测)技术对病人的健康状态轨迹进行分类,其中包括基于密度的空间聚类应用与噪声(DBSCAN)。这些健康状态轨迹与药物治疗和治疗方法相关联,所产生的模式的可视化值得称赞。

虽然社会和健康科学中的大多数描述性研究问题都需要无监督的ML,但描述性问题与无监督的ML并没有一一对应的关系。在下文中,将介绍需要通常用于预测的有监督ML方法的描述性研究问题。

估计和预测社会或健康结果的流行率

估算疾病的流行率是量化健康负担、干预需求以及健康和社会护理规划的基础。对所研究现象的比率、发病率或流行率的估计,例如某一人群中的糖尿病等健康结果,可视为描述性的;对估计的预测则是预测性的。一个例子是,结合健康的社会决定因素的观点,按年龄、性别和种族/民族对非传染性疾病(NCDs)的流行率进行估计(可以用个人层面的数据或总体数据进行),并通过ML对未知地区的流行率进行估计。通过LASSO估计六种NCDs的存在,以最小的人口数据集预测美国50个州的NCDs的人口水平流行率。相反,Wang和Rodriguez使用对数线性模型,对空间随机效应进行广义Fussed LASSO惩罚,以确定空间疾病集群,即在佛罗里达州发生大于预期的疾病病例数的区域,在这种情况下是小儿癌症。另一项研究使用递归神经网络,更具体地说是长短期记忆和门控递归单元网络,用于疾病活动监测,在这种情况下,流感疾病爆发,在美国有多种空间分辨率。

诊断

一个描述性的研究目标是确定一个社会或健康结果的流行率。与健康状况有关的诊断通常也可以在没有临床评估的情况下,根据作为疾病相关标志的指标(例如,糖尿病的高血糖)进行合理推断。根据现有的信息,一个推断的诊断可以被称为“可能”。在下文中,将介绍(i)评估可能的诊断,(ii)解决报告不足或诊断不足的问题,以及(iii)识别和传播网络中的社会或文化影响的目标。

可能诊断的评估

由于缺乏资源或数据隐私问题,在数据稀缺的环境中,识别可能诊断为某种疾病的个人(受访者)的描述性目标是一个相关目标。如果对有标签和无标签的数据进行混合分析,该目标可以通过有监督的ML或半监督的设置来完成。利用来自电子健康记录的数据,在没有人类临床评估的情况下,算法可以通过神经网络等识别存在的特征(或联合存在的条件),增加存在疾病的可能性。其他数据,如传感器数据和语言数据,可以通过本综述未涉及的方法来检测条件或疾病,如自然语言处理,在许多其他应用中,它被用来检测社交网络数据中的抑郁症。

在没有基于临床评估的诊断的情况下,通过ML对具有可能诊断的个体进行分类,可能对估计人口水平的疾病流行率和相关的医疗费用很有意义。识别具有可能诊断的个体是无干扰的,可能比对这些个体的临床评估更具成本效益。结合主成分分析和聚类分析,用来自世界各地的数据集确定了有高度可能患痴呆症的参与者。在文化和教育公平的认知测试电池下,在没有可能进行临床评估的情况下,可以通过认知测试来完成痴呆症的10/66诊断,将ML应用于南印度的数据。

解决漏报或诊断不足的问题

用已诊断的个人来补充可能的诊断分类,可以解决诸如痴呆症等疾病的报告不足和诊断不足的问题。这些个人层面的可能诊断可以用来调查这些疾病的风险和保护因素。调查参与者被确定为可能患有痴呆症,混合使用了传统的和基于ML的(描述性和预测性)算法,目的是提供具有类似敏感性/特异性的跨种族/民族群体的痴呆症分类算法。本研究中的ML被证明实施起来更加复杂,并且被认为对队列和研究程序的差异比传统的专家建模(即基于领域知识的特征选择)更加敏感;此外,与不同的专家模型相比,使用ML,在这种情况下,LASSO和SuperLearner,并没有导致模型性能的提高。因此,对于使用ML方法来说,少于2000名参与者的样本和较长的时间框架可能不太推荐使用。

网络中社会或文化影响的识别和传播

一个与诊断有关的特殊研究问题可能是网络中社会或文化影响的识别和传播,这可以用社会网络分析(SNA)来解决。在多个实证研究中,我们可以只举几个选择性的例子,说明SNA在社会和健康科学中是一个具有经典统计分析的有用工具,可以分析政治态度在社会网络中的传播以及信仰和组织内及组织间的合作的决定因素。

在SNA的框架内,特定的ML方法已经被开发出来,如指数族随机图模型,但作者发现有很多SNA是用为预测而开发的ML方法进行的例子,如支持向量机或深度学习(见表2)。SNA已经被用来测量政治倾向,并通过基于内容的分析来识别用户档案和对话主题;Barberá等人的研究是一个很好的例子,利用这两种方法来理解社交媒体上政治倾向的隔离(低于预期)。关于SNA的概述以及SNA评估的四个不同维度的分类,即模式和知识发现、信息融合和整合、可扩展性和可视化。在SNA背景下应用的ML方法可以根据其性能进行评估,这与它们在预测背景下的应用相似,例如,关于准确性或精确度(表4)。在下一节中,将介绍以预测为目的的ML方法。

表2 社会和健康科学中最相关的预测的ML方法的概述和非技术性描述

用于预测的ML

预测问题在社会和健康科学中是非常重要的。我们可能想尽可能准确地预测某种产出,即社会或健康结果,或者尽可能地简化。研究目标可能是解释结果的最大方差,或者找到最小或最佳的预测器组,以改善对高危人群的识别。我们可能想评估某个输入,例如一个候选的风险因素,能在多大程度上预测一个结果。预测的最简单形式是一个预测问题。可能有确定的终点,我们希望估计达到其中一个终点的概率。从让计算机/算法代替人类来定义模型的角度来看,ML可以通过考虑一大批协变量来测试一个或多个预测因素的相对重要性,并提供重要性的绝对值或等级排序信息。同样,上面提到的维度诅咒也适用。

预测的研究目的需要将一些特征(输入)尽可能准确地映射到其他已知的特征(输出)上。同样,已知的结果,如健康结果,被称为标记数据;为了研究预测性研究问题,因此使用监督学习。如上所述,监督学习是指从标记的数据中学习一个函数,将 “输入”(预测因素和自变量)映射到 "输出"(结果)的ML任务。数字(连续)结果将需要回归技术,而二分或分类结果将需要分类技术。图2介绍了ML方法的概况,在理论考虑和经验的基础上,对这些方法的可解释性与复杂性之间的权衡进行了排序。在介绍社会和健康科学中专门针对预测的研究问题之前,作者对通常提到的用于预测的常见ML方法进行了概述。

图 2 在社会和健康科学中最相关的ML预测方法,非技术描述按可解释性/可解释性与复杂性进行排序。请注意,方法类表示为较大的圆圈;特定的 ML 方法表示为内部的小圆圈。基于理论考虑和经验的ML方法的排序和选择。ANN,人工神经网络。

常见的预测 ML 方法

作为一些流行和/或性能良好的 ML 方法,解决预测问题的典型 ML 方法是 (i)惩罚方法,(ii)集成学习和(iii)神经网络,下面将更详细地描述这些方法。表2列出了更多方法。

受惩罚的方法

缩减或惩罚性回归方法也被用于传统的推理统计中。惩罚性回归在大型多变量数据集中表现得比标准线性模型更好,因为这些数据集的变量比个体更多。惩罚性回归将在方程中添加一个约束条件,以惩罚模型中变量过多的线性回归模型,也称为 “收缩”或“正则化”。这将使系数值向零缩减,因此贡献较少的变量的系数将接近零或等于零。最广泛使用的惩罚方法,对应于不同的收缩惩罚,包括LASSO、岭回归和弹性网。然而,虽然LASSO将一些系数设为零,从而同时进行变量选择和估计,但它存在着众所周知的估计偏差。为了克服这个问题,人们开发了其他的惩罚措施,包括平滑剪切的绝对偏差。此外,还提出了各种扩展,以考虑数据中的结构,如用于时间结构变量(或更普遍的图结构变量)的fussed LASSO和用于组结构变量的group LASSO。

集成学习

常见的集合学习算法有随机森林(Random Forests)、XGBoost和SuperLearner,这些算法将在下文中介绍。BART也是一种集合学习算法;但是,它们经常被用于因果研究问题,因为相关软件包提供了许多基于领域知识的因果分析设置,并将在“用于因果推理的ML”部分介绍。首先,由于其可解释性,集合方法,如随机森林,已被用于社会和健康科学的许多研究。

其次,由于其较高的预测准确性和对许多预测问题的稳健适用性,我们向读者指出随机梯度提升,它已经在Python和R中实现了梯度提升算法家族的即用型软件包,例如,在推荐的“xgboost”软件包中。通过boosting,不会出现典型的输入变量(预测因子)的勾稽关系问题,这意味着可以同时输入不同的工程(预处理)变量,以观察哪些特征最具预测性。研究人员需要注意的是,该算法对所有变量的分割点进行了详尽的搜索,一些变量可能比其他变量更具有分割样本的信息。因此,该算法偏向于选择数字(连续)、多分类变量或有缺失数据的变量,而不是二分法变量;可采用无偏的变量选择方法。此外,变量将被选为最能解释因变量的分割点,从社会和健康科学的相关理论角度来看,这不一定是最有意义的变量。

最后,一些集合学习算法利用了测试跨多个ML算法开发的模型性能的可能性。一个算法家族的例子是SuperLearner,它已被应用于流行病学研究问题。SuperLearner使用交叉验证来估计几个描述性和预测性ML模型的性能,或者在同一模型中使用不同的设置,并且在模型拟合过程中与使用的最佳预测算法一样渐进地准确工作。这方面的一个应用是缺失数据的归置。

人工神经网络

人工神经网络通常使用大量数据点来搜索复杂的模式并构建连接的单元或节点。具有多个隐藏层的人工神经网络也称为深度学习。

详细说明:通过将一些特征(预测因子)映射到其他特征(结果)来解决预测问题的更复杂的方法可以用神经网络来完成,它学习变量之间的相互关系,有一个确定的输入(预测因子)和 “结果”(结果)。神经网络的动力来自于大脑中的计算,这种计算使复杂任务的识别和分类得以成功。如果实施逻辑激活函数,神经网络与传统的没有隐藏层的逻辑回归是相同的,这是最常见的情况。神经网络和逻辑回归都有一个函数形式,参数向量是由最大似然估计确定的。然而,神经网络允许我们放松输入变量的线性和对数几率假设。因此,如果数据不是线性可分离的,它是一个更好的选择。这种灵活性是以参数解释的困难为代价的;所产生的模型是通过模型的性能指标,如敏感性、特异性、准确性和接受者操作特征曲线下的面积来评价的(见表4)。神经网络在输入和输出之间至少建立了一个隐藏层,神经网络提高模型性能的好处实际上来自于算法的能力,即开发多个隐藏层。神经网络的训练过程主要包括两个步骤。首先,前向传播将输入或之前的隐藏层与权重相结合。第二,后向传播将输出层或其之前的隐藏层在实际值和预测值的误差基础上进行调整。通过这种前馈和后向传播的迭代,神经网络训练以适应转换和回归参数。如果在训练后没有实施仔细的测试和交叉验证过程,那么神经网络就很容易出现过拟合。正则化可以通过交叉验证或自举来解决这个问题。另一种方法是使用贝叶斯框架。它不是给出一个点估计,而是计算参数的分布以避免过拟合问题。此外,虽然神经网络倾向于过度自信,即使预测不正确,也容易受到对抗性攻击,但贝叶斯神经网络,产生一个神经网络的集合,是稳健和准确的。这对于提高社会和健康科学的信任度和社会接受度可能特别有意义,这也是考虑到由于算法和产生的模型的复杂性而导致的可解释性的折衷。在下文中,我们将介绍与预测有关的研究问题和来自社会和健康科学的例子,特别是(i)社会或健康结果的预测,(ii)风险因素的识别和评估,以及(iii)识别过程和偏离 "正常"过程。

社会或健康结果的预测

很多时候,理解一种社会现象或疾病的第一步将是预测谁会出现这种结果,同时考虑到社会人口学、心理学、健康或其他相关决定因素(预测因素)的存在。首先讨论对产出感兴趣的研究,即旨在尽可能准确地预测一个通常是不利的,但根据研究问题有时也是有益的社会或健康结果的研究。然后,转向研究问题,寻找(ii)最小或最优的预测器组,(iii)为预测罕见结果提出改进建议。

预测不良结果的准确性

预测不良后果的模型建立通常涉及对研究者选择的大量特征的训练。应通过建立更多的模型、向模型添加更多的信息(变量)、或考虑高阶互动或非线性关系来测试模型性能的可能改进。典型的研究问题是测试与传统建模相比ML的预测准确性的提高,例如,关于健康的社会决定因素,痴呆症的预测,糖尿病和糖尿病并发症,ML方法通常不会明显地超过传统的基于回归的建模。然而,其他研究表明,例如,用长短时记忆递归神经网络对剩余寿命的估计超过了人类(医生)的估计;剩余寿命是一个面向病人的相关措施,用于及时启动预先护理(临终)计划。这个研究目标的一个很好的说明是对退伍军人自杀的回顾性预测。在一个退伍军人自杀的数据集中,BART是几种测试中最好的ML算法,与当时活着的退伍军人的1%随机匹配样本相匹配。其他研究使用SuperLearner进行死亡风险预测。一项关于用ML进行临床风险预测的系统综述发现ML方法比回归法没有什么好处,并批评了到目前为止的文献中的一些缺陷,特别是缺乏校准,即测试预测的可靠性。研究人员可能意识到,预测因子越远,就越难得出稳健、准确的预测结果。例如,一项研究使用教养设施的特征和囚犯的总体特征来预测监狱暴力,用SuperLearner评估囚犯对囚犯的攻击次数,但未能达到高水平的准确性。社会地理学中的空间图谱被证明是可以用简明的数据来实现的;例如,一项使用移动电话数据的研究绘制了贫困和财富的地理图谱,得出的分布与从实地调查数据收集中得到的分布相似。

在临床实践中,相关的产出可能不是不利的健康结果,而是干预的必要性和最佳时机。预测临床决策的最佳时机已经被研究,例如van der Schaar实验室已经开发了自动化的ML架构,如所谓的AutoPrognosis,以预测不良的心血管结果,比传统的风险分数更好。

社会或健康结果的最小和最佳预测器集

对输出,即社会或健康结果的兴趣,也可能伴随着寻找最小或最优(最简明)预测器集的目的。回到前面提到的预测非传染性疾病的人口水平流行率的例子,这些疾病是用最小的社会人口学预测器组来估计的。在痴呆症风险预测方面,直到最近还没有强有力的算法,最近用LASSO开发了一个预测10年以上痴呆症的最佳模型。在一项研究中,结合LASSO和随机森林算法,寻求一个最佳的预测器组来解释枪支暴力的差异。

罕见结果的预测

健康和社会科学的一个典型问题是对罕见结果的预测,如疾病、犯罪、学习困难和离婚,在这些情况下,只有极小部分的观察人口会出现感兴趣的结果。例如,与总人口相比,罪犯的比率非常小;自闭症在大约2%的儿童中流行;高达1/3的已婚人士会提出离婚。使用ML来预测罕见的结果(罕见可定义为任何低于50%的情况),分类算法通常会简单地开发一个模型,只预测不发生的结果,因为算法会检测到在大多数情况下,“0 ”的猜测会是正确的。研究人员可以通过几种策略解决这个问题:

1)重新定义结果,例如,作为一个回归问题而不是分类问题,例如,使用抑郁量表的全部范围作为连续或泊松分布的变量,而不是临床上相关的中度/重度抑郁的二元(和罕见)分类。

2)通过对具有罕见结果的群体进行超额抽样来改变样本中的结果分布,例如,合成少数人超额抽样技术,这是公认的。同样的,对没有结果的群体进行下采样(下采样)也是可能的。一个高度不平衡数据的例子是金融服务消费者行为,其中预测抵押贷款违约和识别高风险消费者分别对银行和贷款公司至关重要。最近的一项研究对消费者交易数据中的非违约客户进行了低度采样,并训练了卷积神经网络,与随机森林相结合,导致了最高的预测精度。一些研究报告称,对高度不平衡的数据进行重复的随机子抽样,以预测医疗保健数据集中的疾病,随机森林的表现优于支持向量机、袋法和其他方法。应该注意的是,在交叉验证的情况下,抽样策略应该在褶皱内实施。从更广泛的意义上讲,需要进行敏感性检查,以研究不同的抽样策略对性能和可推广性的影响。

3)一个罕见的结果在预选的样本中可能更频繁;例如,痴呆症研究的部分重点是提高从轻度认知障碍(MCI)转化为痴呆症的预测率。只有当从分析中得出的结论不需要在整个人群中成立时,样本选择才能成功,否则这种策略会引入偏见(对结果的条件)。MCI患者的高危样本可以用来训练一个模型,根据问卷调查、生物标志物或基于影像的变量来区分转换者和非转换者。在众多的例子中,一些研究用不同的ML算法测试了认知储备对预测转换为痴呆的作用,并在以前未见过的对象中测试了他们用支持向量机算法开发的模型。虽然痴呆风险预测模型有很大的改善,特别是在向模型中加入遗传和成像信息后,但在预测高危样本的认知性能测试下降的能力方面没有明显进展。

4)模拟数据集和“虚拟队列”在某些情况下可能是有用的。

识别和评估新的或已知的危险因素

由于对输入的兴趣,也就是对社会或健康结果的预测因素的兴趣,一些研究使用大型预测器集来识别以前未知的社会或健康结果的预测因素,或在其他变量的背景下评估其预测能力。除了需要考虑维度的诅咒外,用几种ML方法测试以前未测试的预测器集可能有助于平衡限制。以此为目的的研究已经测试了,例如,与儿童认知表现相关的候选可改变因素。在另一项应用中,梯度提升和SHAP图被用来识别青少年自杀想法和行为的前10个风险因素,所有这些因素都与社会人口因素和家庭及同伴关系有关。

一项研究调查了已知与认知功能有关的生活方式因素,这些因素由可穿戴设备测量,与通过迷你精神状态检查(MMSE)分数评估的认知功能有关。虽然由于研究的横断面性质,无法确定因果关系,但部分依赖图的可视化显示了非线性,如关联在某一阈值后趋于平稳,或与反U型关系有。这样的研究有助于改善我们对暴露-结果关联中的预期和实际关系的思考,即我们期望从某种生活方式中获得的益处是持续增加的(线性或二次剂量-反应关系),还是在某一数值后趋于平缓,此后不能再有任何改善(阈值模型)?对这些调查来说,对暴露和结果进行精细的评估是必要的。一项研究用LASSO预测阿片类药物过量的死亡率,发现以前没有发现的相关邻里特征,如居住稳定性、种族/民族分布和社会隔离。另一项研究在横断面设计中测试了童年不良经历与智力的关联。从所选择的术语“风险因素”到更中性的“决定因素”或“预测因素”,另一项研究旨在确定人类决策中的驱动因素(预测因素),通过深度(人工)神经网络,使用大规模的风险选择实验来测试经典的决策理论。

识别过程和与正常过程的偏差

研究人员在调查社会和健康结果的轨迹时,可能有兴趣超越描述性研究,而采用预测性镜头,如果不同的状态或轨迹已经被主题所定义,例如,疾病的严重程度或教育或职业水平。一项研究用梯度提升和健康索赔数据中的移动时间窗口方法调查了最高严重程度的慢性阻塞性肺病和常见疾病轨迹的预测因素。作者确定了一些诊断(如呼吸衰竭)、药物(如抗胆碱药物)以及与随后的最高严重程度的慢性阻塞性肺病诊断有关的程序。本研究中检测到的时间模式更多的是代表了保健相关疾病的顺序,不应该从因果途径的角度来解释。在其他情况下,检测到的时间模式可能更加稳健。

对老龄化过程感兴趣的研究人员可能想定义与老龄化相关的社会或健康结果的正常轨迹。然后,可以通过梯度提升等方法来确定与正常轨迹的偏差,定义为一个预测问题。研究人员应该意识到,这个目标对数据提出了强烈的要求,因为定义正常的衰老轨迹并不简单。理想情况下,提供足够的信息以确保可解释性和复制性。在下文中,将描述社会和健康科学的研究,以因果透镜为目标。

用于因果推理的 ML

社会和健康科学研究者所追求的大部分都与寻找世界上某一特征的原因或世界上某一特征的后果有关;因此,这些学科往往会寻求因果问题的答案。我们不仅要找出预测因素,还要找出风险或保护因素,例如,用于预防某种不利的社会或健康结果。如果我们不仅想了解决定因素,还想进行干预,那么我们就需要了解疾病的因果决定因素。

在对因果关系的问题找到满意的答案之前,需要满足对统计分析的多种要求。用于因果推断的ML需要领域知识,或者换句话说,需要学科专长。根据变量在描述变量之间假定因果关系的有向无环图(DAG)上的位置,明智地选择变量是至关重要的,这在健康研究中的应用越来越多。任何旨在进行因果推断的统计分析通常会选择那些可以假定因果推断的假设得到满足的数据集:可交换性(无知性),即对于所有没有接受特定治疗的人来说,如果他们接受了治疗,其结果将与接受治疗的人相同(结果的反事实概率),积极性,即。暴露和混杂因素的每一种值的所有可能值都是可用的,或者在数据集中已经分配了;以及一致性,即一个人在其观察到的暴露历史下的潜在结果正是他们的观察结果。然而,即使在违反这些条件(有限)的情况下,如果随机对照试验从伦理角度来说不是一种选择,或者由于其他原因不可行,也可以通过定义假设的干预措施或 “目标试验”取得一些研究进展。使用具有潜在结果框架的观察性数据,我们可以模仿目标试验。最近的一项研究模仿了目标试验,用目标最大似然估计(TMLE)来估计系数,测试可改变因素的干预对儿童期BMI反弹的影响。

根据Hernán等人的分类,我们首先考虑用于反事实预测的ML,但我们将扩展他们的框架,也考虑用于因果发现的ML,也就是方法,其中变量之间的因果结构是从数据中学习的(表3)。使用结构性因果模型的框架在社会和健康科学中的应用有很大的潜力,即使今天基本上没有探索过。

表3 与社会和健康科学最相关的因果推断的ML方法的概述和非技术性描述

根据Hernán等人的说法:“反事实预测是利用数据来预测世界的某些特征,就像世界已经不同一样”。如果寻求预测或反事实预测,得出答案的一个有用的区分是问目标是 “解释还是预测?”,尽管我们承认,在某些情况下,我们可能能够估计一个因果效应的大小,但不能解释它(例如,在一个试验中)。潜在结果框架中的因果问题(用于反事实预测)可以用传统的方法来回答,如回归和更先进的方法,如边际结构模型。然而,在过去的几年里,用于因果推断的ML有了很大的发展,如果嵌入到因果推断和统计推断的框架中,特别有帮助。

用于反事实预测的常见 ML 方法

对于反事实预测,ML可以用来分析大量的观察数据集,通过设置数据的方式来满足因果假设,然后使用预测性ML方法来回答因果问题。如果数据设置得当,其他ML方法也很适合解决因果问题。例如BART、TMLE(104)和随机森林。另一种回答因果问题的ML方法是双重机器学习(DML),它在高维设置中学习平均治疗效果和对被治疗者的平均治疗效果。DML利用ML方法的预测准确性,同时通过样本分割和交叉拟合提供无偏和一致估计,并进行有效的统计推理。强化学习也可以被概念化为一种方法,在可能产生数据(A/B测试)的研究背景下接近因果推断。表3给出了使用潜在结果框架进行因果推断的常见ML方法的概述。

在某些情况下,变量的(部分)因果结构将是已知的,例如,如果变量既相互联系又有时间顺序,或者遵循另一种因果逻辑(例如,研究者操纵自变量或另一个外因)。在数据科学领域,人们会说到结构化的高维输入。在这些情况下,我们可以使用图来进行ML,以纳入这种因果知识,并将预测算法如LASSO或神经网络扩展到,例如,小题大做的LASSO或卷积神经网络来反映因果结构。

详细说明:BART。这里介绍的BART是解决反事实预测的一种有趣的方法,因为它结合了典型的因果推断方法,例如,倾向性评分加权来平衡治疗分配的概率,以及混杂因素调整来计算反事实,用来估计治疗的效果,所以许多必要的研究者决策是明确的。更详细地说,BART是一个树之和模型,预测结果是单个回归树拟合的集合和一个加性高斯误差项的总和。每个回归树迭代地应用分割规则,将数据分割成不重叠的子集,目的是使每个子集的方差最小化。由于单一的树过度强调相互作用,难以识别真正的线性关系,后续的树是根据识别的子集的残差预测值来拟合的。为了避免过度拟合,BART引入了树的大小(即子集/终端节点的数量)和收缩(即在子集中平整的因素)的正则化先验。然而,树的数量仍然是BART模型的一个调整参数。对底层贝叶斯反拟合算法的更详细描述可以在其他地方找到。BART的实施在回归和分类设置中都存在。与常见的基于树的ML方法(如随机森林或提升)不同,正则化优先权传达了灵活的趋势(例如,对小树),而不是通过计算量大的网格搜索确定的固定参数。优先权进一步适用于高维数据和平滑回归函数。实验表明,其性能可以与常见的方法(如提升、神经网络或随机森林)竞争或超过。然而,特别是对于二元结果,交叉验证BART模型以选择正则化先验是有利的。除了计算方面的好处外,BART 还适用于各种研究重点和结果(如生存和多叉逻辑回归),特别适合于因果推断任务,因为复杂反应面的建模和控制混杂不依赖于参数化的假设。由此产生的后验分布允许估计个人平均治疗或异质性因果效应。此外,基本的似然框架提供了关于结果的概率声明,包括可信区间,而识别和量化单个变量对结果的影响则更为复杂。最近对BART的改编和实施进一步允许对治疗的概率进行建模并包括评分,以及在存在未观察到的混杂因素时模拟治疗效果。除此以外,还有控制缺乏共同支持的程序。

社会科学和健康科学中常见的因果推断的研究目的,通常用潜在结果框架来解决,包括:(i) 评价不良社会或健康结果的潜在原因,(ii) 评估比较治疗效果,(iii) 识别异质性治疗效果,以及(iv) 评估和可能消除统计分析中的偏差。

评估(不利的)社会或健康结果的潜在原因

为了评估候选原因的效果,可以设置研究设计,在控制混杂因素的情况下,评估预测者对结果的因果影响能力。一项研究测试了准妈妈营养中的水果/蔬菜密度对不良妊娠和分娩结果的影响,结果显示,TMLE通过发现小的影响和给出更精确的估计,胜过了传统的建模。在这个问题上更进一步,后续研究以双重稳健的ML显示,水果和蔬菜密度对子痫前期风险的保护作用被即将成为母亲的BMI所改变,保护作用随着BMI在20到30分之间的增加而加强,而对于BMI在30分以上的即将成为母亲的人来说,其效果趋于平稳。应用因果观点甚至有助于解决危重病人的肥胖悖论。作为社会流动研究的一个例子,用回归树的纵向视角比较了父母和个人的社会经济收入决定因素。

比较治疗效果的评估

在这里,研究人员可以评估几种治疗方法(如干预与对照或照常护理)中哪一种对改变健康结果最有效。关于健康服务研究中更多临床应用的选择性概述可参见。由于政策评估中的 "治疗 "也有相似之处,我们可以参考关于经济学中基于ML的平均治疗效果估计的发展概况。一项研究测试了认知行为疗法与以人为本的有针对性的处方,即如果他们被分配到另一种治疗方法(=反事实的结果),估计的治疗结果。

异质性治疗效果的识别

在有随机治疗分配的情况下,或在有时间性研究设计的情况下,评估新引进或改变的政策的效果,反事实预测来估计平均治疗效果是直接的。此外,研究人员可能希望识别和描述对治疗有不同反应的子群体,也就是探索异质性治疗效果。对异质性治疗效果的分析可以为公共卫生研究中特别突出的问题提供答案。什么对谁最有效,什么时候最有效?技术上的解释,见关于估计治疗效果异质性的文献。已经开发了随机森林来检测异质性的治疗效果。DML也被用来估计异质性的治疗效果。

虽然对临床试验的重新分析很有诱惑力,可以更好地了解对干预或医疗的可能异质性,但还是要注意:对失败的试验进行异质性治疗效果的重新分析可以被认为是有问题的,因为可用于重新分析的试验通常被设计为产生平均效应。一般来说,我们建议使用ML识别异质性治疗效果的这些方法大多用于假设的产生,并在外部人群中验证具体的亚组效果。

评估和消除偏倚

最后,一些有趣的ML应用已经被开发出来,以量化和解决旨在进行因果推断的分析中的潜在偏差。在不存在无知性的情况下(没有未测量的混杂物),对未测量的混杂物的敏感性可能会严重限制研究结果的可推广性。“treatsens ”软件包估计了使治疗和结果之间的关联无效所需的未测量混杂物的大小;然而,在这种分析中需要领域知识。在随机化有限(或实现不当)的情况下,协变量的不平衡分布可能会使研究结果出现偏差。在这里,BART可以评估缺乏共同支持的情况,而协变量的优先级与匹配可以调整接受治疗的不同概率。概述了使用ML进行反概率加权和倾向性评分匹配的不同论文。特别是在老龄化研究中,我们建议系统地评估来自选择性减员和竞争性死亡风险的偏倚,例如在痴呆症研究中应用的随机生存森林。

用于因果推理 2 的 ML:因果发现或因果结构学习

与Hernán等人的框架相比,其他方法表明,因果推断不一定需要反事实预测。尽管在健康和社会科学中很少使用,但在有可能产生数据(操纵治疗)的情况下,从数据中学习因果结构特别有趣。然而,即使在不可能进行治疗操作的情况下,如观察性数据,因果结构学习也可以阐明因果研究问题。对于那些无法在(真实的或假设的)干预中随机分配暴露的假定原因怎么办?我们认为,没有假设的干预措施不应该限制我们对因果效应的估计,例如性别,因为评估一个社会因素的影响大小是提高我们对所研究现象的理解和制定有针对性的干预措施的前提条件。种族和性/性别与社会经济和行为指标的不同关系,能够使人了解社会状况。诸如种族或性/性别等不可操纵的变量可以被重新概念化,从而允许操纵或某种形式的干预,例如,在小故事研究中使用感知的种族。然而,超越潜在的结果框架,我们认为,在这些没有假设干预的情况下,我们可以利用结构性因果学习,即使用能够从数据中学习(和呈现)变量因果结构的算法。最近有人提出了一份关于队列数据中因果发现方法的指南。在下文中,将首先对结构学习进行概述,然后转向从图形结构中推导出因果推断这一更为复杂的任务,即所谓的因果结构学习。

结构学习

首先考虑无向图的结构学习,也就是在复杂的高维数据中学习条件独立性结构。图形化的LASSO在这种情况下被广泛采用,它是基于一个基本的高斯假设(即对于连续变量)。高斯图形LASSO的各种扩展已经被开发出来,包括同时学习和估计跨组(例如,对应于不同的亚群或在不同条件下收集的数据)和跨空间和/或时间(例如,纵向数据)的变量的网络结构,对于混合变量(即连续和离散变量的测量)和失踪数据的扩展。这在数据稀少,即包含许多空单元的情况下特别有趣,而同时处理所有可用的数据在计算上是非常昂贵的。最近的一项研究对混合变量,即二元、连续和计数变量使用潜在的高斯图形模型来推断口头尸检中的症状关联,这可能有助于对可能的死亡原因进行更有力的分类。

因果结构学习

因果结构学习通过推断图中的边的方向而扩展了结构学习。基于约束的方法首先学习一个无向图,代表DAG的骨架,然后确定方向。另外,基于分数的方法直接在DAG空间上搜索,并根据指定的目标函数对每个图进行评分;DAG的数量庞大,随着节点/变量数量的超指数增长,需要精心构建搜索算法和分数。混合算法结合了基于约束和基于分数的方法的想法。Pearl对因果关系进行了全面的技术概述,最近对因果结构学习的评论见。噪声数据假设下的因果结构学习算法的实证评估和比较可以在中找到。在因果结构学习的应用中,性能依赖于基础假设的适当性(不同的模型依赖于不同的假设),样本量对性能只有微弱的影响(从几百到20,000不等),而较稀疏的图更容易估计。R中的“BNLEARN”包实现了一些基于约束和基于分数的因果结构学习算法。

基于约束的方法,特别是BNLEARN中的增量关联马尔科夫空白算法,已经被用于识别29个撒哈拉以南非洲国家的人口和健康调查中的HIV状态、检测和知识的风险因素(可能是原因)。虽然数据是横断面的,也没有假定有未测量的混杂因素,但缺乏HIV状态的社会行为决定因素,但存在HIV知识和检测的社会行为决定因素,这使人们了解到调查数据收集在确定传染病传播时的局限性。另一项研究使用马尔科夫毯子和基于分数的快速贪婪等价搜索算法,除其他目标外,还确定了种族和性/性别的构成因素。性/性别主要与个性特征和行为有关,而种族则与表明社会经济贫困的系统性因素和行为有关,这与种族类别是在一个系统内构建的观点一致(“结构性种族主义”)。

我们承认,这些方法的应用将需要社会和健康研究人员在这些方法中接受培训,因为使用结构性因果学习也意味着必须努力理解和沟通调查结果。使用这种方法将产生更复杂的结果集,例如,越来越多的可能竞争的图形。在社会和健康科学的几乎所有学科中都非常强调潜在的结果框架,其他的因果推断方法(及其潜在的好处)在这个时候仍然是广泛的未知。在讨论了描述、预测和因果推断的ML任务后,我们将在下一节详细阐述最常见的ML性能指标。

ML性能度量

在将ML方法映射到描述、预测和因果推断的研究目标之后,我们可以比较不同ML模型的性能和/或评估与更传统的统计方法相比ML的使用。为此,表4给出了一个评估ML模型的常见性能指标的非详尽清单。评估模型的质量和性能,与社会和健康科学中更传统的建模相比,ML模型提供了不太直接的解决方案,例如在经济学中,需要满足正态性、一致性和效率的条件,可以相当直接地进行测试。虽然可以在ML框架内对结果模型进行评估,即对一系列模型进行比较,并使用性能指标来选择一个模型,而不是其他模型,但将来自ML方法的模型与基于更传统的统计学(如逻辑回归)的模型进行比较,仍然是目前的技术水平。一些性能指标(例如,与分类有关的:敏感性和特异性)适用于ML和非ML方法,可以跨框架使用。

表4 用于评估 ML 模型的常见性能指标的概述和非技术描述

期待

社会和健康科学中常见的研究问题可以通过描述、预测和因果推断等研究目的之间的区别来映射到适当的ML方法。本评论为这些研究目的提供了一个新的映射,这将使ML在社会和健康科学中的应用更加系统化。因此,该综述是迄今为止对ML在社会和健康科学中应用的最全面概述。然而,我们无法在这篇评论中涵盖使用ML在研究基础设施和计算要求方面的挑战,以及隐私和数据保护的问题。我们也只是略微触及了为更自动和更快速地处理大数据而开发的ML算法,如用于语音或文本识别和情感分析的自然语言处理,并且我们只提供了与全息数据分析有关的选择性例子。将SNA用于旅游或营销目的的应用将在其他地方讨论。

如果深思熟虑地应用于相关问题,ML方法有可能大大改善经验分析,最好是通过在社会或健康科学领域受过训练的研究人员和受过方法学训练的研究人员之间的合作。我们希望这篇评论能够系统化,并推动最近开发的ML方法在社会和健康研究中的应用。

参考文献:Mapping of machine learning approaches for description, prediction, and causal inference in the social and health sciences

本文转载于网络 如有侵权请联系删除

相关文章

  • flutter入门简介

    1.1Flutter是什么1.1.1Flutter简介Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面,一份代码可以同时生成iOS和Android两个高性能、高保真的应用程序。Flutter目标是使开发人员能够交付在不同平台上都感觉自然流畅的高性能应用程序,并且兼容滚动行为、排版、图标等方面的差异。flutter的开发语言是Dart,如果您使用过Java或JavaScript之类的语言,则能够很快上手,甚至有一些Flutter应用是没有编程经验的人写的!在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。跨平台自绘引擎Flutter与其它大多数跨平台框架不同,因为Flutter既不使用WebView,也不使用操作系统的原生控件。相反,Flutter使用自己的高性能渲染引擎来绘制widget。这样不仅可以保证在Android和iOS上UI的一致性,而且也可以避免对原生控件依赖而带来的限制及高昂的维护成本。Flutter使用Skia作为其2D渲染引擎,Skia是一个2D的绘图引擎库,其前身是一个向量绘

  • Value DeFi遭黑客攻击始末,闪电贷这次又带走了700万美元

    来源|巴比特资讯责编|晋兆雨头图|付费下载于视觉中国 注:北京时间11月15日凌晨,去中心化金融协议ValueDeFi遭遇闪电贷攻击,攻击者通过复杂的方式从Value协议的金库中转移走了大约700万美元,随后归还了200万美元,并附上了一条带有嘲讽意味的信息:“你们真的懂闪电贷吗?”,而在攻击发生前一日,ValueDeFi公开宣称自己是DeFi领域最安全的协议,并且能够抵抗闪电贷攻击。*原文来自rekt,作者对这次攻击进行了分析。他们真的理解闪电贷(flashloan)吗? 声誉的价值是不稳定的,谦虚能够带来稳定,而吹嘘太多,最终只会搞砸。ValueDeFi今天因为闪电贷攻击被黑了700万美元,这又是一次关于闪电贷的惨痛教训。黑客攻击前的代币价格-2.73美元黑客攻击后的代币价格-1.87美元让人啼笑皆非的是,在黑客攻击前一天,项目方发布了这样一条推文:(这条推文后来被删除了,但我们的截图还活着。)尽管ValueDeFi团队大胆宣称自己的协议很安全,但他们似乎并不知道提款不仅可以通过主合约进行,还可以通过代理从金库合约中提取。ValueDeFi使用了Curve现货价格作为预言机。而攻击

  • python 解决Fatal error in launcher:错误问题

    python终端用piplist出现这个错误Fatalerrorinlauncher:只要终端用到pip的东西,都在前面加python-m,比如python-mpiplist好了,完美解决!补充知识:python安装exe打包库命令pipinstallpyinstaller报错,使用pip国内镜像解决方法python安装exe打包库命令pipinstallpyinstaller报红出错,使用pip国内镜像解决方法:pipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simplepyinstaller 运行后发现还是有黄字报错,使用提示命令升级python-mpipinstall–upgradepip还是有报错,不要怕,继续使用国内镜像升级命令:python-mpipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simple–upgradepip 升级成功,我们打pyinstaller-v 看到3.6,显示出来打包exe库的版本号,就成功了。pyinstallerstart.py 如果成功的话,会在当前目录生

  • IM消息ID技术专题(五):开源分布式ID生成器UidGenerator的技术实现

    1、引言 很多人一想到IM应用开发,第一印象就是“长连接”、“socket”、“保活”、“协议”这些关键词,没错,这些确实是IM开发中肯定会涉及的技术范畴。但,当你真正开始编写第一行代码时,最现实的问题实际上是“聊天消息ID该怎么生成?”这个看似微不足道的小事情。说它看似微不足道,是因为在IM里它太平常了,处处可见它的身影。不过,虽然看似微不足道,但实际却很重要,因为它的生成算法和生成策略的优劣在某种意义上来说,决定了你的IM应用层某些功能实现的难易度。有签于此,即时通讯网专门整理了“IM消息ID技术专题”系列文章,希望能带给你对这个看似微小但却很重要的技术点有更深刻的理解和最佳实践思路。本文是专题系列文章的第5篇,专门介绍百度开源的分布式消息ID生成器UidGenerator的算法逻辑、实现思路、重点源码解读等,或许能带给你更多的启发。学习交流:移动端IM开发入门文章:《新手入门一篇就够:从零开发移动端IM》2、专题目录本文是“IM消息ID技术专题”系列文章的第5篇,专题总目录如下:《IM消息ID技术专题(一):微信的海量IM聊天消息序列号生成实践(算法原理篇)》 《IM消息ID技术

  • 轻松两步,在 SpringBoot 服务上实现接口限流

    2020年Java原创面试题库连载中【000期】Java最全面试题库思维导图 【020期】JavaSE系列面试题汇总(共18篇) 【028期】JavaWeb系列面试题汇总(共10篇) 【042期】JavaEE系列面试题汇总(共13篇)【049期】数据库系列面试题汇总(共6篇)【053期】中间件系列面试题汇总(共3篇) 【065期】数据结构与算法面试题汇总(共11篇)【076期】分布式面试题汇总(共10篇)【077期】综合面试题系列(一)【078期】综合面试题系列(二) 【079期】综合面试题系列(三)【080期】综合面试题系列(四)【081期】综合面试题系列(五) 【082期】综合面试题系列(六)【083期】综合面试题系列(七) 【084期】综合面试题系列(八) 【085期】综合面试题系列(九)【086期】综合面试题系列(十)【087期】综合面试题系列(十一)【088期】综合面试题系列(十二)【089期】综合面试题系列(十三)更多内容,点击上面蓝字查看来源|https://urlify.cn/YjY322Sentinel是阿里巴巴开源的限流器熔断器,并且带有可视化操作界面。在日常开发中

  • 压倒eBay 挑战亚马逊 Shopify到底厉害在哪儿?

    超过1100亿美元的市值,占据美国电商零售5.9%的市场份额——Shopify稳稳地坐上第二把交椅(仅次于亚马逊)。独立站的高歌猛进,无疑让作为系统服务商头部玩家的Shpoify成为了风口上的“明星”,尤其是在今年疫情发生之后。本文就带你一起看看Shpoify到底有何厉害之处。Shopify是谁? Shopify是一家总部位于加拿大的全球化企业,2006年正式上线,2015年在纽约和多伦多两地的证券交易所上市。自2019年以来,Shopify的股价一路高涨。截止到9月14日收盘,Shpoify股价为每股931.83美元,市值为1112.29亿美元。931.83美元的股价较17美元的发行价已经上涨了近55倍。从过去几年的成长性来看,Shopify2015年和2016年的营收几乎都同比上面翻了一番,2017年至2019年营收则增长了近50%。其中,2019年公司营业收入为15.78亿美元,同比上涨47.05%。华尔街预计其在2020年的收入将再增长37%。截止到2019年,Shopify服务的商家数量已超过100万,GMV占美国所有零售电商销售额的5.9%,仅次于亚马逊37.3%的份额。根

  • [Centos7]自定义开机自启脚本

    本文编写于205天前,最后修改于205天前,其中某些信息可能已经过时。1.自定义一个Django启动脚本[root@xls~]#vi/Django/mysite/start.sh #!/bin/sh #启动脚本 ps-aux|greppython|xargskill-9 nohuppythonmanage.pyrunserver0.0.0.0:8000>djo.out2>&1&复制2.给脚本设置执行权限chmod+x/Django/mysite/start.sh复制3.将/etc/rc.d/rc.local文件设置为可执行权限chmod+x/etc/rc.d/rc.local复制4.编辑/etc/rc.d/rc.local文件,设置脚本开机自启vi/ect/rc.d/rc.local #在该文件末尾添加需要自启的脚本即可,一定得完整路径 /Django/mysite/start.sh复制

  • LeetCode 85 | 如何从矩阵当中找到数字围成的最大矩形的面积?

    今天是LeetCode专题53篇文章,我们一起来看看LeetCode中的85题,MaximalRectangle(最大面积矩形)。今天的这道题目和上一篇文章讲的LargestRectangleinHistogram这题有一定的相似,所以如果没有看过上一篇文章的同学,建议先移步观看一下上一篇。LeetCode84|单调栈解决最大矩形问题 85题的官方难度是Hard,点赞2757,反对69,通过率37.2%左右。它的情况和84题非常相似,点赞比很高,然后通过率也差不多。虽然它是84题的变形题,但是整体的题目质量还是很高的,没有因为这一点被诟病。那么和84题相比,究竟它的变动在哪里呢,让我们一起来看题目吧。题意给定一个只包含0和1的数字矩阵,要求在这个矩阵当中找到一个由1组成的最大面积的矩形,返回这个面积。我们来看个样例:Input: [ ["1","0","1","0","0"], ["1","0","1","1"

  • 聊点基础的--sizeof,strlen,数组,字符串在一起能整哪些坑?

    来源:公众号【编程珠玑】作者:守望先生ID:shouwangxiansheng 对于初学者来说,sizeof,strlen,数组,字符串整在一起是痛苦的,它总能在某些莫名其妙的时候整一个措手不及。本文看看它们在一起能挖什么坑。例子在说明这些问题之前,先看一段代码,看看你是否都理解了。(注:以下代码结果为编译为64位程序后运行结果)//来源:公众号【编程珠玑】 #include<stdio.h> #include<string.h> voidtestArr(constcharstr[]) { printf("%lu%lu\n",sizeof(str),strlen(str)); } intmain(void) { /*test0*/ charstr[]="hello"; printf("test0%lu%lu\n\n",sizeof(str),strlen(str));//65 /*test1*/ charstr1[8]="hello"; printf("test1%lu%

  • 大数据入门与实战-PySpark的使用教程

    1PySpark简介ApacheSpark是用Scala编程语言编写的。为了用Spark支持Python,ApacheSpark社区发布了一个工具PySpark。使用PySpark,您也可以使用Python编程语言处理RDD。正是由于一个名为Py4j的库,他们才能实现这一目标。 这里不介绍PySpark的环境设置,主要介绍一些实例,以便快速上手。2PySpark-SparkContextSparkContext是任何spark功能的入口点。当我们运行任何Spark应用程序时,会启动一个驱动程序,它具有main函数,并且此处启动了SparkContext。然后,驱动程序在工作节点上的执行程序内运行操作。SparkContext使用Py4J启动JVM并创建JavaSparkContext。默认情况下,PySpark将SparkContext作为'sc'提供,因此创建新的SparkContext将不起作用。以下代码块包含PySpark类的详细信息以及SparkContext可以采用的参数。classpyspark.SparkContext( master=None, ap

  • python解析json文件并提取_python读取文件并判断

    该博客持续更新……使用python读取json文件#数据路径 path="C:\\data.json" #读取文件数据 withopen(path,"r")asf: row_data=json.load(f) #读取每一条json数据 fordinrow_data: print(d)复制使用python流式读取json.gz文件importgzip importjson #数据路径 path="C:\\data.json.gz" #流式读取函数 defparse(path): g=gzip.open(path,'rb') forling: yieldjson.loads(l) #读取每条数据 fordinparse(path): print(d)复制版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至举报,一经查实,本站将立刻删除。发布者:全栈程序员栈长,转载请注明出处:https:/

  • 为了随时随地能敲代码,他用树莓派手搓一台 Linux掌上电脑

    詹士发自凹非寺量子位|公众号QbitAI手搓一台巴掌大小Linux电脑,只需树莓派加点儿零件就行?你没看错,有人都做出来了。36键触控键盘,4.3英寸触摸显示屏,Linux系统,功能一应俱全,单手可握:续航长达4小时,能外接显示器及输入设备:目前该项目在GitHub已获星超300颗。DIY掌上电脑,只为随时随地敲代码谈及为什么要做掌上电脑,小哥自曝——起初,自己只是想换掉基于OrangePi的自制电脑,正好疫情刚爆发时,手里屯了一批树莓派RPI4,那做一台PICOmputer小型终端似乎顺理成章,平日可外接屏幕和键盘。但他还不满意,想要重新设计键盘布局和屏幕尺寸,提升便捷性——至于这么做的目的,他说,希望自己能在朋友家、工作室都能随时随地抄起电脑敲代码搞事情。就这样,他开动了。从零开始手搓既然要解决「随时随地编代码」,键盘得好好设计一下。不过,小哥此前就多次摆弄过键盘,甚至自己还设计了好几个,这回,他选择了自己涉及的一种名为Plaid(格子)的键盘。这种键盘共4行,最多12列,键位上有一层通孔壳覆盖,键位排布跟日常电脑键盘一致。有意思的是,整个键盘中间被一块AtMega328分隔开,让

  • Json:Java对象和Json文本转换工具类

    Json是一个用于Java对象和Json文本相互转换的工具类。 安装 下载源码 gitclonehttps://github.com/njdi/durian.git 复制 编译源码 cddurian/ 复制 切换至最新版本(Tag),如:0.4, gitcheckout0.4 复制 编译安装至本地Maven仓库: mvncleanpackage 复制 添加依赖 SpringBoot应用使用Config时,需要在Mavenpom.xml中添加: <dependency> <groupId>io.njdi</groupId> <artifactId>durian-common</artifactId> <version>${version}</version> </dependency> 复制 ${version}替换为具体的版本号,如:0.4。 Java对象 Java对象支持如下类型:基本数据类型、数组、列表、字典。 基本数据类型 Integer/int Long/long Float/fl

  • 前台线程和后台线程区别与使用技巧

    概念:. 线程有两种:前台线程和后台线程。区别是:应用程序必须运行完所有的前台线程才可以退出;而对于后台线程,应用程序则可以不考虑其是否已经运行完毕而直接退出,所有的后台线程在应用程序退出时都会自动结束。 .net环境使用Thread建立的线程默认情况下是前台线程,即线程属性IsBackground=false,在进程中,只要有一个前台线程未退出,进程就不会终止。主线程就是一个前台线程。而后台线程不管线程是否结束,只要所有的前台线程都退出(包括正常退出和异常退出)后,进程就会自动终止。    因此使用技巧如下: 一般后台线程用于处理时间较短的任务,如在一个Web服务器中可以利用后台线程来处理客户端发过来的请求信息。而前台线程一般用于处理需要长时间等待的任务,如在Web服务器中的监听客户端请求的程序,或是定时对某些系统资源进行扫描的程序。   下面的代码演示了前台和后台线程的区别: publicstaticvoidmyStaticThreadMethod(){   Thread.Sleep(3000);}Threadthread

  • PowerDesigner中Table视图同时显示Code和Name

    PowerDesigner中Table视图同时显示Code和Name,像下图这样的效果: 实现方法:Tools-DisplayPreference

  • frame之导航栏不变主体改变实练习

    index.html文件:<framesetcols="150px,*"><framesrc="content.html"/><framesrc="main.html"name="mainframe"></frameset><noframes></noframes> content.html文件: <ahref="file1.html"target="mainframe">广州航海学院</a></br><ahref="file2.html"target="mainframe">广州工商学院</a> main.htm文件: <body>学校简介</body> file1.html文件: <body>广州航海学院是海事院校</body> 效果图:  

  • COGS 1043. [Clover S2] Freda的迷宫

    ★  输入文件:mazea.in  输出文件:mazea.out   简单对比时间限制:1s  内存限制:128MB Freda的迷宫 (mazea.pas/.c/.cpp)题目叙述Freda是一个迷宫爱好者,她利用业余时间建造了许多迷宫。每个迷宫都是由若干房间和走廊构成的,每条走廊都连接着两个不同的房间,两个房间之间最多只有一条走廊直接相连,走廊都是双向通过。黄昏时候,Freda喜欢在迷宫当中漫步。每天,Resodo都会为Freda设计一个挑战方案。Resodo会指定起点和终点,请Freda来找到一条从起点到终点的简单路径。一条简单路径定 义为一个房间序列,每个房间至多在序列里出现一次,且序列中相邻的两个房间有走廊相连。 当起点和终点之间存在且仅存在一条简单路径的时候,Freda认为这个挑战方案是RD的。现 在,请你帮帮Resodo来写一个程序,判断一个挑战方案是否是RD的。   输入格式 第一行三个整数N,M,Q.分别表示房间数,走廊数,询问数。 接下来M行每行2个整数x,

  • 深度学习(dropout)

    other_techniques_for_regularization 随手翻译,略作参考,禁止转载 www.cnblogs.com/santian/p/5457412.html Dropout: Dropoutisaradicallydifferenttechniqueforregularization.UnlikeL1andL2regularization,dropoutdoesn'trelyonmodifyingthecostfunction.Instead,indropoutwemodifythenetworkitself.Letmedescribethebasicmechanicsofhowdropoutworks,beforegettingintowhyitworks,andwhattheresultsare. Supposewe'retryingtotrainanetwork:   Dropout技术:Dropout是一个同正则化完全不同的技术,与L1和L2范式正则化不同。dropout并不会修改代价函数而是修改深度网络本身。在我描述dropout的工

  • jemalloc在linux上从安装到使用

    jemalloc在linux上从安装到使用 上次在引导大家安装Redis时提到可能会报错:  发现了redis有用到jemalloc。 首先,jemalloc是干什么的? 我们看看作者自己的介绍: jemallocisageneralpurposemalloc(3)implementationthatemphasizesfragmentationavoidanceandscalableconcurrencysupport 意思是说jemalloc干了malloc干的活,而且干得好一些,主要体现在避免内存碎片与并发扩展上。 首先,什么是内存碎片? 假设系统只有一片64字节的内存,分配给4个单元,每个16个字节:  将这4个单元分配释放再重新分配4个12字节的内存片:  我们发现多了4*4不连续的内存片,下次我们就不能分配12或者16字节的内存了。 另外,glibc分配内存一般向4或者8取整,比如我们向申请13字节的内存,实际上得到的内存片会是16字节,多出来的3个字节我们不知道,也就无法使用了。 内存碎片很

  • Java的三大特性:封装、继承、多态

    一、类的概念: 类一般包括两个部分:属性(成员变量)和方法(成员方法)方法组成部分:修饰符(可选)返回值类型(必须)方法名(必须)参数列表(可选) packagecom.classTest.project; publicclassClassTest{//成员变量 Stringname; intage;//成员方法 publicvoidcount(){ this.age+=1; } }复制   二、定义方法的几点说明 1、返回值类型:基本数据类型(整型(int)、浮点型(float)、字符串类型(String)、字符型(char)等)、引用数据类型(数组、类、接口)   例子:    ①基本数据类型作为返回值类型:    ⑴整型(int)    ⑵浮点型(float)    ⑶字符串类型(String)    ⑷字符型(char) packagecom.returntype.project; publiccl

  • 如何实现密码输入框focus状态弹出提示信息

    一、密码输入提示框样式实现 效果图如下: 源码如下: <html> <styletype="text/css"> *{ padding:0; margin:0; } .pwd_content{ position:relative; top:100px; } .pwd_tips{ width:140px; position:absolute; left:230px; top:-20px; border:1pxsolid#c2c2c2; padding:5px; font-size:12px; color:#666; font-weight:normal; display:none; } .arrow1,.arrow2{ position:absolute; left:-13px; top:25px; border-top:6pxtransparentdashed; border-left:6pxtransparentdashed; border-bottom:6pxtransparentdashed; border-right:6pxsolid#c2c2c2;

相关推荐

推荐阅读