管理模型與MLflow集合體
2021年9月21日 在工程的博客
在機器學習中,一個係綜是一家集多元化模型提供更多比任何單一模型預測能力在一起的。多個學習算法結合的輸出通過一個平均的過程或投票,導致潛在的更好的預測對於一個給定的輸入。
然而,有權衡整體學習方法;每個預測變得更加難以“解釋”(模型解釋能力)。此外,這種方法可以增加工程的複雜性,通常不會立即明顯在它們的整個生命周期過程中如何管理整體模型。除了我們正在創造N不同模型,有幾個額外的關注,在他們的管理,如:
- 如果一個模型的變化,這將如何影響整體版本控製?
- 我們如何檢測模式漂移的合奏?
- 我們如何包整體構件和保持血統?
這篇博客走過的過程創建和管理樂團輔助MLflow和磚AutoML。如果創建和productionizing單個模型是困難的,然後做同樣的一個整體模型更難!因為磚AutoML創建的所有模型的重任,現在我們有機會利用集合體的努力少得多。一個簡單疊加策略使用前N模型的架構類型可能比最好的模型。
樂團
有些算法自然集合體(隨機森林,演算法),而其他的組合決策樹和更傳統的物流和線性回歸算法。他們甚至可以延伸到神經網絡和深度學習場景。由於每個算法都有自己的方法的建模數據的關係,他們的合奏可以降低總體方差和偏差同時提高準確性。
有幾個因素考慮而構建一個整體:
- 數據集的大小是什麼?
- 模型集合中包含多少?
- 多樣的個體模型如何?
- 模型的維護多個版本怎麼樣?
- 他們應如何包裝?
- 模型重用在不同的用例?
集合體通常表現得更好如果有很多數據的變化特征。有一組不同的學習者將幫助在整個預測。然而,有一個高原點,除了添加模型的性能沒有多大影響。因此,重要的是要平衡創建和管理成本的集合體和額外的性能收益。集合中的每個被將擁有自己的生命周期。有些人可能有更強的相互依賴關係而其他人可能更獨立。所以重要的是要考慮如何訓練和子模型打包為靈活的重用和升級。
讓我們看一看一些用例,從一個整體的策略中獲益:
- 分析了”的聲音Customer的數據
投訴數據根據監管需要解決的指導方針。這要求迅速、準確分類的投訴以及人工幹預糾正。這個數據是隨著常客喋喋不休。雖然在休閑好應對一些客戶查詢,標簽的“法律”或“監管”需要立即解決。這是一個很好的候選人用例樂團,因為即使是很小的精度提高放大對業務的影響。
- 在智能化場景中尋找最適合的產品推薦< /li>
處方數據進行分析,以找到合適的產品SKU。模型在每一層上一層的數據和細化分類。
一旦創建和部署,模型成為一個生活工件需要管理。需要考慮以下幾個挑戰在管理依賴和版本的整體和個體差異。此外,還有不同階段(環境),和一個模型已經成功地執行在每個階段提升到下一個更高。進一步加劇了當模型是整體的一部分。另一層次的複雜性是由不同的用例如果模型是共享的,每個用例可能是不同的版本。所以從生產獲取最新版本可能不是正確的做法為所有相關的用例。
簡化合奏與磚AutoML + MLflow的創建和管理
MLflow是一個開源的、可伸縮的端到端模型管理框架。艾滋病的整個MLOps周期工件從開發到部署可再生的。
一毫升從業者可以從頭創建模型或者利用磚AutoML。對於任何登錄MLflow組模型,不僅可以把最好的一個,但你也可以看看前N模型執行的組合。
磚AutoML是完全自動化的,玻璃盒子民主化機器學習方法模型開發解決方案的快速原型技術和使用所選的數據集。在底層,它利用MLflow。AutoML數據科學家解決了兩個關鍵問題,即快速驗證數據集的預測能力和作為一個基線模型或提煉開始,包括:
非常不尋常的數據團隊花費了大量的時間和精力在追求生產的幾款不同的建築類型優化模型的性能。與AutoML模型創建過程已經完全自動生成,從而簡化了後續的模型選擇的過程。
AutoML目前支持回歸和分類,包括這兩個階段:
- 配置:這是我們指定數據集、問題類型、目標或標簽列預測,評估指標和評分實驗運行,和停止條件(如數量的試驗或最大運行時間)
- 培訓:每毫升培訓運行在一個實驗,我們可以查詢和探索隨後以來所有的細節(代碼、參數、指標、模型、工件)是記錄。
- 評價:頂部模型基於我們的選擇標準是強調審查和隨後的登記。這是我們可以使用最好的模型(冠軍)或頂級模特的組合(挑戰者)如果優於冠軍。
讓我們檢查kaggle電信數據集用於預測哪些客戶可能在下次生產。beplay体育app下载地址根據選擇標準,AutoML建議不僅最好的模型,還提供了在所有運行在所有的細節模型類型。我們首先記錄推薦的最佳模型(冠軍)MLflow模型中的注冊表,每個子範疇的頂級模特(挑戰者)
使用測試數據集,我們比較了冠軍和挑戰者之間的性能筆記本。在整體的情況下,投票策略是用於最終的分類。如果整體性能更好,新的冠軍模型。用戶有不同的選項如何消費整體模型,單獨或集體。
選擇# 1< /td> | 選擇# 2< /td> |
|
|
在這個例子中,我們選擇選項2,需要記錄每一個模型獨立MLflow和作為一個整體包裝器模型。
整體封裝了所有獨立的模型作為一個pickle文件。這使我們能夠部署整體作為一個工件,它有自己的生命周期,獨立於個體貢獻模型,它可以繼續獨立發展。這非常類似於航運碼頭工人容器或一個超級jar之後結合相關的個人圖書館。
步驟# 1:獲取“最佳”模型的每個建築類型AutoML實驗:
filter_str =”參數。類如果ier LIKE 'DecisionTree%'"< /span>
=(客戶端模式。search_runs(experiment_ids=experiment_id, filter_string=filter_str,order_by = [”指標。val_f1_score DESC”)))(0]
best_runId = model.info.run_uuidDecisionTree_model_uri =f: /{best_runId}/模式”
DecisionTree_model = mlflow.sklearn.load_model (DecisionTree_model_uri)
第二步:建立一個定製pyfunc模型類,封裝了最好的模型
這將泡菜不同模型以及合奏。所需的函數集合類__init__, load_context ensembleTopN決定和預測方法——所有這些都將進一步完善。
類<b>係綜< /b> (mlflow.pyfunc.PythonModel):def__init__(自我、DecisionTree RandomForest、LGBM XGB):
自我。DecisionTree = DecisionTree
自我。RandomForest = RandomForest
自我。LGBM = LGBM
自我。XGB = XGB
第三步:提供一個預測函數
任何pyfunc模型的預測函數需要滿足以下範式,這是在推理時將使用取得新的數據。
預測函數接受的數據作為一個熊貓dataframe並返回另一個熊貓dataframe。這使得模型是可互操作的web API通過MLflow模型服務或通過Apache火花™udf /熊貓功能。
#輸入是熊貓dataframe或係列def預測(自我,上下文,model_input):dt = self.DecisionTree.predict (model_input)射頻= self.RandomForest.predict (model_input)lgbm = self.LGBM.predict (model_input)xgb = self.XGB.predict (model_input)合奏=自我。ensembleTopN(dt,rf,lgbm,xgb)返回pd.DataFrame ({“DecisionTreePredictions”:dt,“RandomForestPredictions”:射頻,“LGBMPredictions”:lgbm,“XGBPredictions”xgb,“集合預報”:合奏})
第四步:提供一個投票功能
預測的肉是由投票算法,可以有一些變化。這是一個例子,多數投票的簡單的方法。
# Helper函數基於模型提供的數量來決定def決定(自我,選票,num_scores):#輸出並返回為多級邏輯需要改變你需要返回低氮作為結果。如果票> =int(num_scores /2)+1:返回1其他的:返回0#分數是一個係列的預測其他分類器的列表defensembleTopN(自我,*分數):#這條線需要改變為創建投票支持多類。票= functools.reduce (λx, y: x + y,成績)num_scores =len(分數)decide_with_num_scores = functools。部分(決定,num_scores = num_scores)decide_vec = np.vectorize (decide_with_num_scores)#由於這是一個二進製分類將返回0或1返回decide_vec(票)
第五步:包和日誌模型在自定義pyfunc MLflow模型
出處封裝模型需要維護,這就是MLflow跟蹤服務器和參數/標簽是用於保存父uri模式整體運行。
與mlflow.start_run ()作為ensemble_run:mlflow.log_param (“DecisionTree”DecisionTree_model_uri)mlflow.log_param (“RandomForest”RandomForest_model_uri)mlflow.log_param (“LGBM”LGBM_model_uri)mlflow.log_param (“XGB”XGB_model_uri)mlflow.pyfunc.log_model (“合奏”python_model =合奏(DecisionTree_model RandomForest_model、LGBM_model XGB_model))
這一過程變得非常容易管理和版本,因為隻有一個工件。如果沒有功能的管道,有顯著減少移動部件,使它容易調試和驗證模型之前被放置在注冊表中。這種模式非常類似於航運sklearn管道,管道封裝所需的所有轉換前的預測。最後,你也隻需要管理一個注冊表的預測。
第六步:得分
模型現在可以取得新的數據:
進口mlflow#生成uri合奏模型從前麵跑single_ensemble_model =f 'runs: /{ensemble_run.info.run_uuid}/合奏”# PyFuncModel負載模型。loaded_model = mlflow.pyfunc.load_model (single_ensemble_model)#熊貓DataFrame預測。進口熊貓作為pd進口numpy作為nploaded_model.predict (X_test)
細微差別的集合體
多個模型並不一定意味著一個!
讓我們考慮物聯網數據的情況下從不同的機器發送到幾個工廠。每台機器都有不同的操作周期,所以基線在一起將是錯誤的。每台機器需要構建模型。傳入的數據過濾機的類型和一個適當的模型。一些人認為這是一個整體。它是一種“分而治之”的方法,但數據是由單個模型訓練/得分。多個模型不相結合提高精度;因此,這不是一個場景——它就是N模型。但是,前麵討論的投票策略可以被用於輸入數據特征被調用。
總結
合奏的方法是一種分層的方法,適度高性能un-correlated模型結合起來形成一個超級名模,提高精度,同時提高穩定性,通常是一個分而治之的策略用於大,不同的數據集。除了增加工程複雜性和可管理性,通常會有準確性和explainability之間的權衡,這就是為什麼人們有時回避樂團在生產中,盡管它在Kaggle比賽是首選方法。AutoML,其固有的使用MLflow援助通過自動化和簡化底層模型的創建和管理,從而幫助毫升從業者推動邊界的任務從數據中提取價值。