每個實體的訓練

此管線範例的目的是展示 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()))