首页 >> 大全

建立脑影像机器学习模型的step-by-step教程

2023-10-24 大全 19 作者:考证青年

机器学习的日益普及导致了一些工具的开发,旨在使这种方法的应用易于机器学习新手。这些努力已经产生了和这样的工具,这并不需要任何编程技能。然而,尽管这些工具可能非常有用,但它们的简单性是以透明度和灵活性为代价的。学习如何编程一个机器学习管道(即使是一个简单的)是一个很好的方式来洞察这种分析方法的优势,以及沿着机器学习管道可能发生的扭曲。此外,它还允许更大的灵活性,如使用任何机器学习算法或感兴趣的数据模式。尽管学习如何为机器学习管道编程有明显的好处,但许多研究人员发现这样做很有挑战性,而且不知道如何着手。

在本文中,我们提供了一个循序渐进的教程,介绍如何使用-learn实现一个标准的有监督机器学习管道,-learn是编程语言中一种广泛流行且易于使用的机器学习库。在流程的每个步骤中,我们都提供了简短的基本原理和对代码的解释,当相关的时候,我们会向读者提供有用的外部资源,这些资源提供了进一步的示例或更深入的讨论。示例代码遵循第2章中描述的工作流程。鼓励读者参考本章,以获得机器学习管道主要元素的更深入的理论解释。

本教程的目标是机器学习初学者。由于这个原因,它需要最少的编程知识。但是,鼓励读者熟悉基本的。是一种广泛使用的编程语言,有很多可用的资源。中级用户也会发现本教程很有用。示例代码的结构方式很容易用其他技术删除、添加或替换某些技术。这样,读者可以尝试不同的方法,并在代码的基础上开发更复杂的管道。该实现遵循严格的方法,以避免双重倾斜等常见错误,并获得可靠的结果。本文发表在本文发表在 and to Brain 。

我们首先简要介绍如何安装和所有必要的库,以及如何访问该代码的数据集和在线版本。

19.2安装和主要库

在本教程中,源代码是使用 3编写的。和大多数编程语言一样,是在库中组织的。每个库都包含一组用于特定目的的专用函数。在本教程中,我们使用以下库:

和numpy是被广泛使用的用于加载、操作和汇总数据的库。虽然用于处理表格数据(例如,数据排列在表格中,有行和列),numpy是一个更通用的库。我们还使用科学计算的基础库scipy运行一些单变量统计数据,以探索数据并为统计分析做准备。和是用于数据可视化的库。这在研究数据或总结结果时非常有用。最后,-learn,或者更通俗的说法是,可以说是最流行和最容易访问的机器学习库。它是一个高级库,这意味着许多复杂的应用程序被封装在更简单、更短和易于使用的函数中。

要运行本教程中的示例代码,读者需要安装 3以及上述所有库。最简单的方法是下载并安装。这是用于科学计算的编程语言的免费和开源发行版,旨在简化包的管理和部署。

19.3如何读本章

在本章中,读者会发现不同的文本风格区分不同种类的信息。代码块(称为代码片段)将出现在下面的框中。代码片段有编号,以便更容易地引用分析的不同阶段。每个代码段的输出都显示在代码下面。

在某些情况下,一行代码可能太长,必须分成两行。这将用\表示(注意这不是在代码的在线版本中)。示例代码的在线版本是用笔记本格式编写的。>>>符号表示命令的输出将在笔记本中显示。对于某些代码段,输出可能太长,在这种情况下,只显示输出的一部分。这将被标记为“... .”。文本中对主要库或特定库中特定工具的引用以新字体显示。

19.4使用大脑形态测量学对精神分裂症患者和健康对照组进行分类

本教程中使用的例子涉及到使用神经解剖学数据对精神分裂症患者(SZ)和健康对照组(HC)进行分类。模拟输出的数据集包含了大脑101个区域的灰质体积和厚度,以及每个参与者的ID、年龄、性别和诊断结果。图19.1展示了本教程最后一个流程的概要。为了本练习的目的,我们假设特征提取,即从原始结构磁共振成像(MRI)图像中提取体积和厚度值的过程已经完成。因此,我们从为机器学习分析准备数据开始我们的教程。在这个步骤中,我们将探索缺失数据、混杂变量和类别不平衡的数据,并讨论如何解决这些问题。接下来,我们定义了具有10次迭代(外部CV)的交叉验证(CV)方案。在每次迭代中,训练集和测试集分别进行数据转换,以避免知识泄漏。然后将支持向量机(SVM)模型用于训练集。SVM依赖于超参数C。为了决定使用C的哪个值,我们创建了一个包含10折的内部CV。这意味着,对于我们想要测试的每一个C值,一个SVM模型都要训练和测试10次;对于给定的C值,最后的性能是通过平均10个性能来估计的。然后使用最优的C参数在整个训练集上训练SVM模型。该训练模型的性能在测试集中进行测量。整个过程重复10次(即外部CV的10次迭代)。一旦完成,我们的SVM模型的最终性能是通过平均10个外部折的性能指标来计算的。最后,我们调查哪些特征在驱动模型的预测中更重要,并测试我们的模型的最终性能的统计显著性。

图19.1本教程中实现的机器学习流程概述。

19.5示例代码

在我们的例子中使用的机器学习管道包括以下组件:问题制定、数据准备、特征工程、模型训练、模型评估和事后分析。在开始之前,我们首先需要导入所有必要的库,将随机种子设置为一个固定值,并组织我们的工作区。

19.5.1导入库

默认情况是不加载用于计算机器学习分析的库。因此,在开始编写代码文件时,最好先导入我们需要的所有库。除了、numpy、scipy、、和之外,我们还使用模块来组织文件夹,并使用模块在分析过程中抑制任何无用的警告(两者都是自带的,因此我们不需要安装它们)。如果读者决定修改代码,我们建议通过抑制代码片段1中的最后一行来重新激活警告。理解这些警告可以帮助读者避免错误并调试代码。为了使代码更易于阅读,在导入多次使用的库时,通常会指定一个别名。例如,库通常作为pd导入。这样,每当我们想要调用这个库时,只需输入pd即可。

19.5.2设置随机种子

我们分析中的一些步骤将受到随机性的影响。例如,我们可能希望在数据清理期间随机删除一些参与者。同样,在定义CV方案时,每次迭代的训练/测试分区也是随机进行的。在中,这种随机性可以通过将种子值设置为固定值来控制。没有定义一个特定的种子值意味着依赖于这个随机性元素的变量在每次我们运行代码时都会有不同的表现。例如,每次迭代的训练测试分区将是不同的,这可能会导致不同的模型性能。因此,我们将种子值设置为一个固定的数字,以保证每次运行代码时都得到相同的结果。有些函数需要将随机种子作为参数再次传递。

19.5.3组织工作空间

在开始分析之前,我们应该首先创建文件夹结构,用于存储所有结果。在本教程中,读者可能希望沿着机器学习的管道测试不同的策略,例如,不同的预处理策略或机器学习算法。在大量测试之后,我们很容易就会忘记哪些结果与哪些策略有关。为每个实验指定一个名称,在结果目录中创建一个具有相同名称的文件夹,并将实验输出存储在该目录中,这是一种很好的做法。

19.5.4问题公式化

在进行任何类型的项目时,有一个良好框架的问题是至关重要的,特别是在机器学习中,可能有许多可能的方法来分析相同的数据集。在本教程中,我们的机器学习问题如下:使用结构MRI数据对SZ和HC患者进行分类。从这个公式中,我们可以推导出机器学习问题的主要元素:

19.5.5数据准备

这一步的目的是执行一系列的统计分析,为机器学习模型准备数据。在这里,根据机器学习问题的性质和数据类型,可能需要不同的统计分析。

19.5.5.1导入数据

在本教程中,我们使用表格数据。数据以逗号分隔值(CSV)文件的形式存储。我们使用从中的()函数来加载csv文件。这个函数将数据加载到一个名为的对象类型中,我们将其命名为。

在我们的数据集中,诊断和性别是由单词定义的。有时,人们用不同的名字存储信息;例如,在列诊断中不使用sz,我们可以用“”这个词来定义这个问题属于一个病人。为了使这些代码更容易适应不同的格式,我们在代码的开头定义了我们的符号.

让我们从数据的前六行开始。使用选择的子部分是很简单的。有不同的方法可以做到这一点。这里,我们只是简单地指出中需要的索引(注意,第一行索引为0,最后一行不包括在内)。

从输出中,我们可以看到顶部的列名和前六个参与者的数据。列包括诊断,性别,年龄,以及几个脑区的灰质体积和厚度。ID在代码片段4中设置为列索引。我们可以看到至少缺少一个值(第c006行)。我们稍后会处理这个问题。知道数据集中可用的所有特征的名称也可能很有用。为此,只需知道数据列的名称。

接下来检查数据集的大小。

_影像模拟_影像建模软件

为了处理构建机器学习管道时一些最常见的问题,我们的数据准备阶段将检查以下数据集:

19.5.5.2缺失数据

大多数机器学习模型不支持缺失值的数据。因此,检查中是否有任何缺失值是很重要的。下面我们使用来自的函数()来确定每个特性总共有多少缺失数据,以及缺失数据的参与者的id。

我们可以看到有43个缺失的年龄值。没有这方面的资料,就无法对不平衡的人口数据进行彻底的评估,这在解释结果时可能会有问题。这里有许多不同复杂程度的选项(关于这些选项的更多信息请参见第14章)。因为删除这些参与者只会损失总数据的6%,所以我们将简单地删除他们。我们可以通过使用来自的()函数来做到这一点。

正如预期的那样,新的比以前少了43个参与者。

19.5.5.3类别不平衡

接下来,让我们检查每个类别的总人数:

在我们的数据集中,共有367名对照组和330名患者。类别之间似乎没有很大的不平衡。然而,这两个类别并不完全匹配。正如我们在第2章中提到的,这可能会在估计模型性能时产生问题。一种选择是将HC降采样以匹配SZ组。然而,这意味着除了我们已经丢弃的6%之外,还会丢失更多的数据,这是不希望看到的。由于不平衡不是太大,我们将保留相同的数据,并使用平衡的准确性作为我们选择的性能指标,以及分层CV方案,以确保CV迭代中SZ/HC的比例相同。

19.5.5.4混淆变量

人们可能想要检查许多潜在的混淆变量。在这里,我们将调查两个明显的问题:性别和年龄。

将性别作为可能的混淆因素进行调查的一种简单方法是验证患者和对照组中男性和女性的比例。让我们先用来可视化一下每一组的性别比例。使用这个库绘制数据非常简单()。请注意,操作基于另一个名为的库,这是中使用最广泛的绘图库。为了编辑图形中的一些元素(例如,将图形框中的M和F改为Male和),我们也将使用。

我们可以看到这两组的男性数量相当相似。然而,对照组比患者组有更多的女性。除了使数据可视化之外,最好总是执行适当的统计检验,即使在目视检查中没有明显的偏差。由于性别是一个分类变量,我们将采用齐性的检验来检查这种差异是否具有统计学意义。在本例中,我们想检验零假设,即HC组中的女性比例与患者组中的女性比例没有差异(相当于检验HC组的男性比例与患者组的男性比例没有差异)。

以上结果表明,这两个类别在性别方面确实存在统计学上的显著差异(p

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了