按实体训练

这个管道示例的目的是展示 Beam 中的按实体训练。按实体训练是指为每个实体训练一个机器学习模型的过程,而不是为所有实体训练一个模型。在这种方法中,会根据特定于每个实体的数据为每个实体训练一个单独的模型。按实体训练在以下情况下可能会有益

数据集

这个示例使用 成人人口普查收入数据集。该数据集包含有关个人的信息,包括他们的人口统计特征、就业状况和收入水平。该数据集包括分类特征和数值特征,例如年龄、教育程度、职业和每周工作时间,以及一个二元标签,指示个人收入是否高于或低于 50,000 美元。该数据集的主要目标是用于分类任务,其中模型将根据提供的特征预测个人收入是否高于或低于某个阈值。管道需要 adult.data CSV 文件作为输入。该文件可以从 这里下载。

运行管道

首先,安装必要的软件包 apache-beam==2.44.0scikit-learn==1.0.2pandas==1.3.5。您可以在 GitHub 上查看代码。使用 python per_entity_training.py --input path/to/adult.data

训练管道

管道可以分解为以下主要步骤

  1. 从提供的输入路径读取数据。
  2. 根据某些条件筛选数据。
  3. 根据教育水平创建键。
  4. 根据生成的键对数据集进行分组。
  5. 预处理数据集。
  6. 按教育水平训练模型。
  7. 保存训练后的模型。

以下代码片段包含详细步骤

    with beam.Pipeline(options=pipeline_options) as pipeline:
        _ = (
            pipeline | "Read Data" >> beam.io.ReadFromText(known_args.input)
            | "Split data to make List" >> beam.Map(lambda x: x.split(','))
            | "Filter rows" >> beam.Filter(custom_filter)
            | "Create Key" >> beam.ParDo(CreateKey())
            | "Group by education" >> beam.GroupByKey()
            | "Prepare Data" >> beam.ParDo(PrepareDataforTraining())
            | "Train Model" >> beam.ParDo(TrainModel())
            |
            "Save" >> fileio.WriteToFiles(path=known_args.output, sink=ModelSink()))