按实体训练
这个管道示例的目的是展示 Beam 中的按实体训练。按实体训练是指为每个实体训练一个机器学习模型的过程,而不是为所有实体训练一个模型。在这种方法中,会根据特定于每个实体的数据为每个实体训练一个单独的模型。按实体训练在以下情况下可能会有益
拥有独立的模型可以为每个组提供更个性化和更定制的预测。每个组可能具有不同的特征、模式和行为,单个大型模型可能无法有效地捕捉到这些特征、模式和行为。
拥有独立的模型还可以帮助降低整体模型的复杂性,使其更有效率。整体模型只需要关注单个组的特定特征和模式,而不是试图考虑所有组的所有可能特征和模式。
拥有独立的模型可以解决偏差和公平性问题。由于在多样化数据集上训练的单个模型可能无法很好地推广到某些组,因此为每个组创建独立的模型可以减少偏差的影响。
这种方法在生产环境中经常被采用,因为它更容易检测到特定于总体人口有限部分的问题。
当处理较小的模型和数据集时,训练和再训练过程可以更快速、更有效地完成。训练和再训练都可以并行完成,从而减少等待结果的时间。此外,较小的模型和数据集也具有资源消耗更低的优势,这使它们能够在成本更低的硬件上运行。
数据集
这个示例使用 成人人口普查收入数据集。该数据集包含有关个人的信息,包括他们的人口统计特征、就业状况和收入水平。该数据集包括分类特征和数值特征,例如年龄、教育程度、职业和每周工作时间,以及一个二元标签,指示个人收入是否高于或低于 50,000 美元。该数据集的主要目标是用于分类任务,其中模型将根据提供的特征预测个人收入是否高于或低于某个阈值。管道需要 adult.data
CSV 文件作为输入。该文件可以从 这里下载。
运行管道
首先,安装必要的软件包 apache-beam==2.44.0
、scikit-learn==1.0.2
和 pandas==1.3.5
。您可以在 GitHub 上查看代码。使用 python per_entity_training.py --input path/to/adult.data
训练管道
管道可以分解为以下主要步骤
- 从提供的输入路径读取数据。
- 根据某些条件筛选数据。
- 根据教育水平创建键。
- 根据生成的键对数据集进行分组。
- 预处理数据集。
- 按教育水平训练模型。
- 保存训练后的模型。
以下代码片段包含详细步骤
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()))
最后更新于 2024/10/31
您是否找到了您要找的所有内容?
这些内容是否有用且清晰?您想更改任何内容吗?请告诉我们!