每個實體的訓練
此管線範例的目的是展示 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
您是否找到您想要的所有內容?
是否所有內容都有用且清楚?是否有任何您想要變更的內容?請告訴我們!