使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。

使用 Amazon SageMaker Data Wrangler 为医疗保健和生命科学进行大规模特征工程

机器学习 (ML) 正在以前所未有的速度颠覆许多行业。 近年来,医疗保健和生命科学 (HCLS) 行业经历了快速发展,在众多用例中采用机器学习来提供优质护理和改善患者治疗效果。

在典型的 ML 生命周期中,数据工程师和科学家将大部分时间花在数据准备和特征工程步骤上,甚至在开始模型构建和训练过程之前。 拥有一个工具可以降低数据准备的准入门槛,从而提高生产力,是这些角色的一个非常理想的要求。 亚马逊SageMaker数据牧马人 是 AWS 专门构建的,旨在减少学习曲线,使数据从业者能够以更少的精力和时间完成数据准备、清理和特征工程任务。 它提供了一个带有许多内置功能的 GUI 界面,并与其他 AWS 服务集成,例如 亚马逊简单存储服务 (Amazon S3)和 Amazon SageMaker功能商店,以及合作伙伴数据源,包括 Snowflake 和 Databricks。

在这篇文章中,我们演示了如何使用 Data Wrangler 来准备医疗保健数据,以训练模型来预测心力衰竭,给定患者的人口统计数据、先前的医疗状况和实验室测试结果历史。

解决方案概述

该解决方案包括以下步骤:

  1. 获取医疗保健数据集作为 Data Wrangler 的输入。
  2. 使用 Data Wrangler 的内置转换函数来转换数据集。 这包括删除列、特征化数据/时间、连接数据集、估算缺失值、编码分类变量、缩放数值、平衡数据集等等。
  3. 使用 Data Wrangler 的自定义转换函数(Pandas 或 PySpark 代码)来补充内置转换之外所需的其他转换,并展示 Data Wrangler 的可扩展性。 这包括过滤行、分组数据、根据条件形成新的数据框等等。
  4. 使用 Data Wrangler 的内置可视化功能执行可视化分析。 这包括目标泄漏、特征关联、快速模型等。
  5. 使用 Data Wrangler 的内置导出选项将转换后的数据集导出到 Amazon S3。
  6. 启动 Jupyter 笔记本以使用 Amazon S3 中转换后的数据集作为输入来训练模型。

生成数据集

既然我们已经确定了 ML 问题陈述,我们首先将目光投向了获取我们需要的数据。 研究性研究,例如 心力衰竭预测 可能会提供已经处于良好状态的数据。 但是,我们经常遇到数据非常混乱的情况,需要加入、清理和其他几个非常特定于医疗保健领域的转换,然后才能用于 ML 训练。 我们希望找到或生成足够混乱的数据,并引导您完成使用 Data Wrangler 准备数据的步骤。 考虑到这一点,我们选择了 Synthea 作为生成符合我们目标的合成数据的工具。 合成 是一个开源的合成病人生成器,可以模拟合成病人的病史。 要生成数据集,请完成以下步骤:

  1. 按照说明按照 快速启动 创建文档 亚马逊SageMaker Studio 域并启动 Studio。
    这是一个先决条件。 如果您的帐户中已设置 Studio,则此选项是可选的。
  2. Studio 启动后,在 发射台 标签,选择 系统终端.
    这将启动一个终端会话,为您提供一个命令行界面来使用。
  3. 要安装 Synthea 并生成 CSV 格式的数据集,请在启动的终端会话中运行以下命令:
    $ sudo yum install -y java-1.8.0-openjdk-devel
    $ export JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk.x86_64
    $ export PATH=$JAVA_HOME/bin:$PATH
    $ git clone https://github.com/synthetichealth/synthea
    $ git checkout v3.0.0
    $ cd synthea
    $ ./run_synthea --exporter.csv.export=true -p 10000

我们提供一个参数来生成人口规模为 10,000 的数据集。 请注意,size 参数表示种群中存活成员的数量。 此外,Synthea 还为人口中的死亡成员生成数据,这可能会在指定的样本量之上添加一些额外的数据点。

等到数据生成完成。 此步骤通常需要大约一个小时或更短的时间。 Synthea 生成多个数据集,包括 patients, medications, allergies, conditions, 和更多。 在这篇文章中,我们使用了三个生成的数据集:

  • 患者.csv – 该数据集大约 3.2 MB,包含大约 11,000 行患者数据(25 列,包括患者 ID、出生日期、性别、地址等)
  • 条件.csv – 该数据集大约 47 MB​​,包含大约 370,000 行医疗状况数据(六列,包括患者 ID、状况开始日期、状况代码等)
  • 观察.csv – 该数据集约 830 MB,包含约 5 万行观察数据(八列,包括患者 ID、观察日期、观察代码、值等)

之间存在一对多的关系 patientsconditions 数据集。 之间也存在一对多的关系 patientsobservations 数据集。 有关详细的数据字典,请参阅 CSV 文件数据字典.

  1. 要将生成的数据集上传到 Amazon S3 中的源存储桶,请在终端会话中运行以下命令:
    $ cd ./output/csv
    $ aws s3 sync . s3://<source bucket name>/

启动数据管理员

SageMaker资源 在 Studio 的导航页面和 项目 菜单中选择 数据管理员 创建 Data Wrangler 数据流。 有关如何从 Studio 中启动 Data Wrangler 的详细步骤,请参阅 开始使用 Data Wrangler.

使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。

导入日期

要导入您的数据,请完成以下步骤:

  1. Amazon S3 并在 S3 存储桶中找到 patients.csv 文件。
  2. 更多信息 窗格中,选择 第一个 K 打样.
  3. 输入 1100 样本大小.
    在预览窗格中,Data Wrangler 从数据集中提取前 100 行并将它们列为预览。
  4. 进口.
    Data Wrangler 从 Synthea 生成的总患者(1,100 行)中选择前 11,000 名患者并导入数据。 抽样方法让 Data Wrangler 只处理样本数据。 它使我们能够使用更小的数据集开发数据流,从而加快处理速度并缩短反馈循环。 创建数据流后,我们可以将开发的配方提交给 SageMaker 处理 作业以分布式方式横向扩展整个或更大数据集的处理。
    使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。
  5. 重复此过程 conditionsobservations 数据集。
    1. 如报名参加 conditions 数据集,输入 37000 样本大小,这是 Synthea 生成的总 1 行的 10/370,000。
    2. 如报名参加 observations 数据集,输入 500000 样本大小,这是 Synthea 生成的 1 万行总观测值的 10/5。

您应该看到三个数据集,如以下屏幕截图所示。

使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。

转换数据

数据转换是更改数据集中一个或多个列的结构、值或格式的过程。 该过程通常由数据工程师开发,对于具有较小数据工程技能的人来说,破译为转换提出的逻辑可能具有挑战性。 数据转换是更广泛的特征工程过程的一部分,正确的步骤顺序是设计此类配方时要牢记的另一个重要标准。

Data Wrangler 旨在成为一种低代码工具,以减少有效数据准备的进入障碍。 它带有 300 多种预配置的数据转换供您选择,而无需编写任何代码。 在以下部分中,我们将了解如何在 Data Wrangler 中转换导入的数据集。

在 patients.csv 中删除列

我们首先从 patients 数据集。 删除冗余列可以从数据集中删除不相关的信息,并帮助我们减少处理数据集和训练模型所需的计算资源量。 在本节中,我们删除了 SSN 或护照号码等列,因为这些列没有预测价值。 换句话说,它们不能帮助我们的模型预测心力衰竭。 我们的研究也不关心其他列,例如出生地或医疗保健费用对患者心力衰竭的影响,因此我们也将其删除。 还可以通过运行 Data Wrangler 中内置的目标泄漏、特征相关性、多重共线性等内置分析来识别冗余列。 有关支持的分析类型的更多详细信息,请参阅 分析和可视化. 此外,您可以使用 数据质量和洞察报告 对数据集执行自动分析以得出要消除的冗余列的列表。

  1. 选择旁边的加号 资料类型 对于患者.csv 数据集并选择 添加变换.
    使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。
  2. 添加步骤 并选择 管理栏.
    使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。
  3. 针对 改造¸选择 下降柱.
  4. 针对 要删除的列,选择以下列:
    1. SSN
    2. DRIVERS
    3. PASSPORT
    4. PREFIX
    5. FIRST
    6. LAST
    7. SUFFIX
    8. MAIDEN
    9. RACE
    10. ETHNICITY
    11. BIRTHPLACE
    12. ADDRESS
    13. CITY
    14. STATE
    15. COUNTY
    16. ZIP
    17. LAT
    18. LON
    19. HEALTHCARE_EXPENSES
    20. HEALTHCARE_COVERAGE
  5. 预览 查看转换后的数据集,然后选择 地址.
    使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。
    你应该看到步骤 下降柱 在您的转换列表中。
    使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。

在患者.csv 中突出日期/时间

现在我们使用特征化日期/时间函数来生成新特征 Year 来自 BIRTHDATE 在列 patients 数据集。 我们在后续步骤中使用新功能来计算患者在观察时的年龄。

  1. 变换 你的窗格 下降柱 页面为 patients 数据集,选择 添加步骤.
  2. 选择 突出日期/时间 转变。
    使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。
  3. 提取列.
  4. 针对 输入列, 添加列 BIRTHDATE.
  5. 选择 并取消选择 , , 小时, 分钟, 二。
    使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。
  6. 预览,然后选择 地址.

在observations.csv 中添加转换

Data Wrangler 支持使用 Python(用户定义的函数)、PySpark、Pandas 或 PySpark (SQL) 进行自定义转换。 您可以根据对每个选项和偏好的熟悉程度来选择转换类型。 对于后三个选项,Data Wrangler 公开了变量 df 供您访问数据框并对其应用转换。 有关详细说明和示例,请参阅 自定义转换. 在本节中,我们将三个自定义转换添加到 observations 数据集。

  1. 向observations.csv 添加一个转换并删除 DESCRIPTION 列。
    使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。
  2. 预览,然后选择 地址.
  3. 变换 窗格中,选择 添加步骤 并选择 自定义变换.
  4. 在下拉菜单上,选择 Python(熊猫).
    使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。
  5. 输入以下代码:
    df = df[df["CODE"].isin(['8867-4','8480-6','8462-4','39156-5','777-3'])]

    这些是 LONIC 代码,对应于我们感兴趣的以下观察结果,这些观察结果可用作预测心力衰竭的特征:

    heart rate: 8867-4
    systolic blood pressure: 8480-6
    diastolic blood pressure: 8462-4
    body mass index (BMI): 39156-5
    platelets [#/volume] in Blood: 777-3

  6. 预览,然后选择 地址.
  7. 添加转换以提取 YearQuarter 来自 DATE 列。
    使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。
  8. 预览,然后选择 地址.
  9. 添加步骤 并选择 自定义变换.
  10. 在下拉菜单上,选择 蟒蛇(PySpark).
    使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。
    这五种类型的观察可能并不总是在同一日期记录。 例如,患者可能会在 21 月 2 日拜访他们的家庭医生,并测量和记录他们的收缩压、舒张压、心率和体重指数。 但是,包含血小板的实验室测试可能会在 XNUMX 月 XNUMX 日晚些时候进行。因此,并非总是可以在观察日期之前加入数据框。 在这里,我们在季度基础上以粗粒度加入数据帧。
  11. 输入以下代码:
    from pyspark.sql.functions import col
    
    systolic_df = (
        df.select("patient", "DATE_year", "DATE_quarter", "value")
                       .withColumnRenamed("value", "systolic")
                       .filter((col("code") == "8480-6"))
      )
    
    diastolic_df = (
        df.select("patient", "DATE_year", "DATE_quarter", "value")
                       .withColumnRenamed('value', 'diastolic')
                       .filter((col("code") == "8462-4"))
        )
    
    hr_df = (
        df.select("patient", "DATE_year", "DATE_quarter", "value")
                       .withColumnRenamed('value', 'hr')
                       .filter((col("code") == "8867-4"))
        )
    
    bmi_df = (
        df.select("patient", "DATE_year", "DATE_quarter", "value")
                       .withColumnRenamed('value', 'bmi')
                       .filter((col("code") == "39156-5"))
        )
    
    platelets_df = (
        df.select("patient", "DATE_year", "DATE_quarter", "value")
                       .withColumnRenamed('value', 'platelets')
                       .filter((col("code") == "777-3"))
        )
    
    df = (
        systolic_df.join(diastolic_df, ["patient", "DATE_year", "DATE_quarter"])
                                .join(hr_df, ["patient", "DATE_year", "DATE_quarter"])
                                .join(bmi_df, ["patient", "DATE_year", "DATE_quarter"])
                                .join(platelets_df, ["patient", "DATE_year", "DATE_quarter"])
    )

  12. 预览,然后选择 地址.
  13. 添加步骤,然后选择 管理行.
  14. 针对 改造,选择 删除重复项.
    使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。
  15. 预览,然后选择 地址.
  16. 添加步骤 并选择 自定义变换.
  17. 在下拉菜单上,选择 Python(熊猫).
  18. 输入以下代码以取共享相同时间值的数据点的平均值:
    import pandas as pd
    df.loc[:, df.columns != 'patient']=df.loc[:, df.columns != 'patient'].apply(pd.to_numeric)
    df = df.groupby(['patient','DATE_year','DATE_quarter']).mean().round(0).reset_index()

  19. 预览,然后选择 地址.
    使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。

加入patients.csv 和observations.csv

在这一步中,我们展示了如何通过 Data Wrangler 强大的 UI 有效且轻松地在数据集上执行复杂的连接,而无需编写任何代码。 要了解有关支持的联接类型的更多信息,请参阅 转换资料.

  1. 在 - 的右边 转换:患者.csv, 选择旁边的加号 步骤 并选择 加入.
    您可以看到下面列出的转换后的 patients.csv 文件 数据集 在左侧窗格中。
    使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。
  2. 在 - 的右边 转换:observations.csv,点击 步骤 启动加入操作。
    转换后的观察.csv 文件现在列在下面 数据集 在左侧窗格中。
    使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。
  3. 配置.
  4. 针对 联接类型,选择 .
  5. 针对 ,选择 Id.
  6. 针对 ,选择 病人.
  7. 预览,然后选择 地址.
    使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。

向连接的数据集添加自定义转换

在这一步中,我们计算观察时患者的年龄。 我们还删除不再需要的列。

  1. 选择旁边的加号 第一次加入 并选择 添加变换.
  2. 在 Pandas 中添加自定义转换:
    df['age'] = df['DATE_year'] - df['BIRTHDATE_year']
    df = df.drop(columns=['BIRTHDATE','DEATHDATE','BIRTHDATE_year','patient'])

  3. 预览,然后选择 地址.

将自定义转换添加到 conditions.csv

  1. 选择旁边的加号 转换:conditions.csv 并选择 添加变换.
  2. 在 Pandas 中添加自定义转换:
    df = df[df["CODE"].isin(['84114007', '88805009', '59621000', '44054006', '53741008', '449868002', '49436004'])]
    df = df.drop(columns=['DESCRIPTION','ENCOUNTER','STOP'])

请注意: 如前所述,您可以使用自定义代码或使用 Data Wrangler 提供的内置转换来删除列。 Data Wrangler 中的自定义转换提供了灵活性,可以在支持的框架中以代码片段的形式引入您自己的转换逻辑。 如果需要,以后可以搜索和应用这些片段。

上述变换中的编码为SNOMED-CT编码,对应以下条件。 这 heart failure or chronic congestive heart failure 条件成为标签。 我们使用剩余的条件作为预测心力衰竭的特征。 我们还删除了一些不再需要的列。

Heart failure: 84114007
Chronic congestive heart failure: 88805009
Hypertension: 59621000
Diabetes: 44054006
Coronary Heart Disease: 53741008
Smokes tobacco daily: 449868002
Atrial Fibrillation: 49436004

  1. 接下来,让我们在 PySpark 中添加一个自定义转换:
    from pyspark.sql.functions import col, when
    
    heartfailure_df = (
        df.select("patient", "start")
                          .withColumnRenamed("start", "heartfailure")
                       .filter((col("code") == "84114007") | (col("code") == "88805009"))
      )
    
    hypertension_df = (
        df.select("patient", "start")
                       .withColumnRenamed("start", "hypertension")
                       .filter((col("code") == "59621000"))
      )
    
    diabetes_df = (
        df.select("patient", "start")
                       .withColumnRenamed("start", "diabetes")
                       .filter((col("code") == "44054006"))
      )
    
    coronary_df = (
        df.select("patient", "start")
                       .withColumnRenamed("start", "coronary")
                       .filter((col("code") == "53741008"))
      )
    
    smoke_df = (
        df.select("patient", "start")
                       .withColumnRenamed("start", "smoke")
                       .filter((col("code") == "449868002"))
      )
    
    atrial_df = (
        df.select("patient", "start")
                       .withColumnRenamed("start", "atrial")
                       .filter((col("code") == "49436004"))
      )
    
    df = (
        heartfailure_df.join(hypertension_df, ["patient"], "leftouter").withColumn("has_hypertension", when(col("hypertension") < col("heartfailure"), 1).otherwise(0))
        .join(diabetes_df, ["patient"], "leftouter").withColumn("has_diabetes", when(col("diabetes") < col("heartfailure"), 1).otherwise(0))
        .join(coronary_df, ["patient"], "leftouter").withColumn("has_coronary", when(col("coronary") < col("heartfailure"), 1).otherwise(0))
        .join(smoke_df, ["patient"], "leftouter").withColumn("has_smoke", when(col("smoke") < col("heartfailure"), 1).otherwise(0))
        .join(atrial_df, ["patient"], "leftouter").withColumn("has_atrial", when(col("atrial") < col("heartfailure"), 1).otherwise(0))
    )

    我们执行左外连接以保留心力衰竭数据帧中的所有条目。 一个新的专栏 has_xxx 是根据病情的开始日期为除心力衰竭以外的每种情况计算的。 我们只对心力衰竭之前记录的医疗状况感兴趣,并将它们用作预测心力衰竭的特征。

  2. 添加内置 管理栏 转换以删除不再需要的冗余列:
    1. hypertension
    2. diabetes
    3. coronary
    4. smoke
    5. atrial
  3. 提取 Year 和  Quarter 来自 heartfailure 列。
    这与我们之前在转换中使用的粒度相匹配 observations 数据集。
  4. 对于 conditions.csv,我们应该总共有 6 个步骤。
    使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。

加入 conditions.csv 到加入的数据集

我们现在执行一个新的连接来将条件数据集连接到连接的 patientsobservations 数据集。

  1. 变换:第一次加入.
  2. 选择加号并选择 加入.
  3. 步骤 旁边 转换:conditions.csv.
    使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。
  4. 配置.
  5. 针对 联接类型,选择 左外.
  6. 针对 ,选择 Id.
  7. 针对 ,选择 病人.
  8. 预览,然后选择 地址.
    使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。

向连接的数据集添加转换

现在我们已经连接了所有三个数据集,让我们应用一些额外的转换。

  1. 在 PySpark 中添加以下自定义转换,以便 has_heartfailure 成为我们的标签列:
    from pyspark.sql.functions import col, when
    df = (
        df.withColumn("has_heartfailure", when(col("heartfailure").isNotNull(), 1).otherwise(0))
    )

  2. 在 PySpark 中添加以下自定义转换:
    from pyspark.sql.functions import col
    
    df = (
        df.filter(
          (col("has_heartfailure") == 0) | 
          ((col("has_heartfailure") == 1) & ((col("date_year") <= col("heartfailure_year")) | ((col("date_year") == col("heartfailure_year")) & (col("date_quarter") <= col("heartfailure_quarter")))))
        )
    )

    我们只对在诊断出心力衰竭状况之前记录的观察结果感兴趣,并将它们用作预测心力衰竭的特征。 在诊断出心力衰竭后进行的观察可能会受到患者服用药物的影响,因此我们希望排除这些观察。

  3. 删除不再需要的冗余列:
    1. Id
    2. DATE_year
    3. DATE_quarter
    4. patient
    5. heartfailure
    6. heartfailure_year
    7. heartfailure_quarter
  4. 点击 分析 标签,用于 分析类型¸选择 表格摘要.
    快速浏览摘要显示 MARITAL 列缺少数据。
    使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。
  5. 选择 时间 选项卡并添加一个步骤。
  6. 处理缺失.
  7. 针对 改造,选择 补缺.
  8. 针对 输入列,选择 婚姻.
  9. 针对 填充值,输入 S.
    我们的策略是在婚姻状况缺失值的情况下假设患者是单身。 你可以有不同的策略。
    使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。
  10. 预览,然后选择 地址.
  11. 将缺失值填充为 0 has_hypertension, has_diabetes, has_coronary, has_smoke, has_atrial.

MaritalGender 是分类变量。 Data Wrangler 具有对分类变量进行编码的内置函数。

  1. 添加一个步骤并选择 编码分类.
  2. 针对 改造,选择 一键编码.
  3. 针对 输入列,选择 婚姻.
  4. 针对 输出样式,选择 .
    此输出样式在单独的列中生成编码值。
    使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。
  5. 预览,然后选择 地址.
  6. 重复这些步骤 性别 列。

one-hot 编码将 Marital 列拆分为 Marital_M (已婚)和 Marital_S (单个),并将 Gender 列拆分为 Gender_M (男)和 Gender_F (女性)。 因为 Marital_MMarital_S 是互斥的(因为是 Gender_MGender_F),我们可以删除一列以避免冗余特征。

  1. 下降 Marital_SGender_F.

收缩压、心率和年龄等数字特征具有不同的单位标准。 对于基于线性回归的模型,我们需要首先对这些数字特征进行归一化。 否则,某些具有较高绝对值的特征可能比其他具有较低绝对值的特征具有不必要的优势,并导致模型性能不佳。 Data Wrangler 具有内置的变换 Min-max 缩放器来规范化数据。 对于基于决策树的分类模型,不需要标准化。 我们的研究是一个分类问题,所以我们不需要应用归一化。 不平衡类是分类中的常见问题。 当训练数据集包含严重偏斜的类分布时,就会发生不平衡。 例如,当我们的数据集包含的没有心力衰竭的患者比有心力衰竭的患者多得多时,它可能导致模型偏向于预测没有心力衰竭并且表现不佳。 Data Wrangler 有一个内置函数来解决这个问题。

  1. 在 Pandas 中添加自定义转换,将列的数据类型从“对象”类型转换为数值类型:
    import pandas as pd
    df=df.apply(pd.to_numeric)

  2. 选择 分析 标签。
  3. 针对 分析类型¸选择 直方图.
  4. 针对 X轴,选择 心力衰竭.
  5. 预览.
    使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。
    很明显,我们有一个不平衡的类别(标记为无心力衰竭的数据点多于标记为心力衰竭的数据点)。
  6. 返回到 时间 标签。 选择 添加步骤 并选择 余额数据.
  7. 针对 目标列,选择 心力衰竭.
  8. 针对 所需比例,输入 1.
  9. 针对 改造,选择 冒烟.
    使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。
    SMOTE 代表合成少数过采样技术。 这是一种创建新的少数实例并添加到数据集以达到类平衡的技术。 有关详细信息,请参阅 SMOTE:综合少数族裔过采样技术.
  10. 预览,然后选择 地址.
  11. 重复步骤 20-23 中的直方图分析。 结果是一个平衡的类。
    使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。

可视化目标泄漏和特征相关性

接下来,我们将使用 Data Wrangler 丰富的高级 ML 支持分析类型工具集执行一些可视化分析。 首先,我们看一下目标泄漏。 当训练数据集中的数据与目标标签高度相关,但在推理时在真实数据中不可用时,就会发生目标泄漏。

  1. 点击 分析选项卡,为 分析类型¸选择 目标泄漏.
  2. 针对 问题类型,选择 分类.
  3. 针对 目标,选择 心力衰竭.
  4. 预览.
    使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。
    根据分析, hr 是目标泄漏。 我们将在后续步骤中删除它。 age 被标记为目标泄漏。 可以合理地说,患者的年龄将在推理时间可用,因此我们将年龄作为一个特征。 Systolicdiastolic 也被标记为可能的目标泄漏。 我们希望在推理期间获得这两个测量值,因此我们将它们保留为特征。
  5. 地址 添加分析。

然后,我们看特征相关性。 我们希望选择与目标相关但彼此之间不相关的特征。

  1. 点击 分析选项卡,为 分析类型¸选择 特征相关.
  2. 针对 相关类型¸选择 线性.
  3. 预览.
    使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。

系数分数表明以下对之间的强相关性:

  • systolicdiastolic
  • bmiage
  • has_hypertensionhas_heartfailure (标签)

对于强相关的特征,矩阵在计算上难以反演,这可能导致数值不稳定的估计。 为了减轻相关性,我们可以简单地从对中删除一个。 我们放下 diastolicbmi 并保持 systolicage 在随后的步骤中。

删除舒张压柱和 bmi 柱

添加额外的转换步骤以删除 hr, diastolicbmi 使用内置转换的列。

生成数据质量和洞察报告

AWS 最近 公布 Data Wrangler 中的新数据质量和洞察报告功能。 此报告会自动验证数据质量并检测数据中的异常情况。 数据科学家和数据工程师可以使用此工具高效、快速地应用领域知识来处理数据集以进行 ML 模型训练。 此步骤是可选的。 要在我们的数据集上生成此报告,请完成以下步骤:

  1. 点击 分析 标签,用于 分析类型,选择 数据质量和洞察报告.
  2. 针对 目标列,选择 心力衰竭.
  3. 针对 问题类型, 选择 分类.
  4. 创建.
    使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。

几分钟后,它会生成一份包含摘要、视觉效果和建议的报告。

生成快速模型分析

我们已经完成了数据准备、清理和特征工程。 Data Wrangler 有一个内置函数,可以粗略估计我们数据集中的预期预测质量和特征的预测能力。

  1. 点击 分析 标签,用于 分析类型¸选择 快速模型.
  2. 针对 标签,选择 心力衰竭.
  3. 预览.
    使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。

根据我们的快速模型分析,我们可以看到该功能 has_hypertension 在所有特征中具有最高的特征重要性得分。

导出数据并训练模型

现在让我们将转换后的 ML-ready 特征导出到目标 S3 存储桶,并将我们迄今为止使用样本创建的整个特征工程管道以分布式方式扩展到整个数据集。

  1. 选择数据流中最后一个框旁边的加号并选择 添加目的地.
  2. Amazon S3.
    使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。
  3. 输入 数据集名称。 对于 亚马逊 S3 位置,选择一个 S3 存储桶,然后选择 添加目的地.
  4. 建立工作 启动分布式 PySpark 处理作业以执行转换并将数据输出到目标 S3 存储桶。
    使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。
    根据数据集的大小,此选项使我们可以轻松配置集群并以无代码方式进行水平扩展。 我们不必担心对数据集进行分区或管理集群和 Spark 内部。 所有这些都由 Data Wrangler 自动处理。
  5. 在左侧窗格中,选择 接下来,2. 配置作业。
    使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。
  6. 然后选择 运行.
    使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。

或者,我们也可以通过 Jupyter Notebook 将转换后的输出导出到 S3。 使用这种方法,Data Wrangler 会自动生成一个 Jupyter 笔记本,其中包含启动处理作业所需的所有代码,以便在更大的完整数据集上应用数据流步骤(使用示例创建),并使用转换后的数据集作为特征来踢稍后停止培训工作。 无论是否进行更改,笔记本​​代码都可以轻松运行。 现在让我们逐步了解如何通过 Data Wrangler 的 UI 完成这项工作。

  1. 选择数据流中最后一步旁边的加号并选择 输出到.
  2. Amazon S3(通过 Jupyter Notebook).
    使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。
  3. 它会自动打开一个带有 Jupyter 笔记本的新选项卡。
  4. 在 Jupyter 笔记本中,找到 (可选)后续步骤 部分和更改 run_optional_stepsFalseTrue.
    笔记本中启用的可选步骤执行以下操作:
    • 使用 XGBoost 训练模型
      使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。
  5. 返回笔记本顶部并在 运行 菜单中选择 运行所有单元格.

如果您按原样使用生成的笔记本,它会启动一个 SageMaker 处理作业,该作业将处理扩展到两个 m5.4xlarge 实例,以处理 S3 存储桶上的完整数据集。 您可以根据数据集大小和完成作业所需的时间来调整实例数量和实例类型。

使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。

等到最后一个单元的训练作业完成。 它会在 SageMaker 默认 S3 存储桶中生成一个模型。

使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。

经过训练的模型已准备好部署用于实时推理或批量转换。 请注意,我们使用合成数据来演示 Data Wrangler 中的功能,并将处理后的数据用于训练模型。 鉴于我们使用的数据是合成的,因此训练模型的推理结果并不适用于现实世界的医疗状况诊断或替代医生的判断。

您还可以通过选择直接将转换后的数据集导出到 Amazon S3 出口 在转换预览页面的顶部。 如果在导入期间启用了采样,则直接导出选项仅导出转换后的样本。 如果您正在处理较小的数据集,则此选项最适合。 转换后的数据也可以直接提取到特征存储中。 有关详细信息,请参阅 Amazon SageMaker功能商店. 数据流也可以导出为 SageMaker 管道,可以根据您的要求进行编排和计划。 有关详细信息,请参阅 Amazon SageMaker管道.

结论

在这篇文章中,我们展示了如何使用 Data Wrangler 以工具驱动的低代码方式处理医疗保健数据并执行可扩展的特征工程。 我们学习了如何在任何需要的地方恰当地应用内置转换和分析,并将其与自定义转换相结合,从而为我们的数据准备工作流程增加更多灵活性。 我们还介绍了通过分布式处理作业扩展数据流配方的不同选项。 我们还了解了如何轻松使用转换后的数据来训练模型来预测心力衰竭。

Data Wrangler 中还有许多其他功能我们没有在这篇文章中介绍。 探索什么是可能的 使用 Amazon SageMaker Data Wrangler 准备 ML 数据 并了解如何将 Data Wrangler 用于您的下一个数据科学或机器学习项目。


作者简介

使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。福雷斯特·孙 是加拿大多伦多 AWS 公共部门团队的高级解决方案架构师。 在过去的二十年里,他一直在医疗保健和金融行业工作。 工作之余,他喜欢和家人一起露营。

使用 Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence 为医疗保健和生命科学进行大规模特征工程。 垂直搜索。 哎。阿伦普拉萨特·香卡(Arunprasath Shankar) 是 AWS 的人工智能和机器学习 (AI/ML) 专家解决方案架构师,帮助全球客户在云中有效和高效地扩展他们的 AI 解决方案。 在业余时间,阿伦喜欢看科幻电影和听古典音乐。

时间戳记:

更多来自 AWS机器学习