<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【機器學習】一文徹底搞懂自動機器學習AutoML:H2O

          共 10053字,需瀏覽 21分鐘

           ·

          2022-04-18 07:38


          前面和大家一起學習了一文徹底搞懂自動機器學習AutoML:Auto-Sklearn,今天將和大家一起研習另一個AutoML框架H2O,本文從安裝、實例詳盡介紹框架的使用方法,最后深入研習了該框架對模型可解釋部分,一起研習吧!

          H2O 是一個用于分布式、可擴展機器學習的內(nèi)存平臺。H2O 使用熟悉的界面,如 R、Python、Scala、Java、JSON 和 Flow notebook/web 界面,并與 Hadoop 和 Spark 等大數(shù)據(jù)技術(shù)無縫協(xié)作。H2O 提供了許多流行算法的實現(xiàn),例如廣義線性模型 (GLM)、梯度提升機(包括 XGBoost)、隨機森林、深度神經(jīng)網(wǎng)絡(luò)、堆疊集成、樸素貝葉斯、廣義加性模型 (GAM)、Cox 比例風險、K- Means、PCA、Word2Vec,以及全自動機器學習算法(H2O AutoML)。

          安裝

          自動化機器學習H2O

          從命令行下載并運行

          如果計劃專門使用 H2O 的 Web GUI Flow[4],那么應(yīng)該使用這種方法。

          1. 單擊h2o下載[5]頁面上的按鈕。這會下載一個 zip 文件,其中包含你開始使用所需的所有內(nèi)容。Download H2O
          2. 從你的終端,解壓縮并啟動 H2O,如下例所示。
          cd?~/Downloads
          unzip?h2o-3.30.0.6.zip
          cd?h2o-3.30.0.6
          java?-jar?h2o.jar
          1. 將瀏覽器指向http://localhost:54321以打開 H2O Flow Web GUI。

          python

          在終端窗口中運行以下命令以安裝 H2O for Python。

          1. 安裝依賴項(如果需要,在前面加上sudo):
          pip?install?requests
          pip?install?tabulate
          pip?install?future

          注意:這些是運行 H2O 所需的依賴項。完整的依賴項列表保存在以下文件中:https[6] ://github.com/h2oai/h2o-3/blob/master/h2o-py/conda/h2o/meta.yaml 。

          1. 用于pip安裝此版本的 H2O Python 模塊。
          pip?install?-f?http://h2o-release.s3.amazonaws.com/h2o/latest_stable_Py.html?h2o

          還需要安裝Java環(huán)境,因為底層是Java所寫,

          導入數(shù)據(jù)

          這里使用kaggle中Titanic數(shù)據(jù)為分析例子。詳情可參見kaggle泰坦尼克案例[7]

          import?h2o
          import?pandas?as?pd
          h2o.init()

          #?h2o導入方式
          #?train_1?=?h2o.import_file("/kaggle/input/titanic/train.csv")
          #?test_1?=?h2o.import_file("/kaggle/input/titanic/test.csv")

          #?pandas導入方式
          train?=?pd.read_csv('/kaggle/input/titanic/train.csv')
          test?=?pd.read_csv('/kaggle/input/titanic/test.csv')

          數(shù)據(jù)處理

          如果你是個新手,剛開始接觸數(shù)據(jù)預處理,建議可以試試H2O。如下一些常用的操作,官網(wǎng)上都是有例子的:

          上傳文件
          導入文件
          導入多個文件
          下載數(shù)據(jù)
          更改列類型
          合并來自兩個數(shù)據(jù)集的列
          合并來自兩個數(shù)據(jù)集的行
          填寫 NA
          通過...分組
          輸入數(shù)據(jù)
          合并兩個數(shù)據(jù)集
          透視表
          替換框架中的值
          切片列
          切片行
          對列進行排序
          將數(shù)據(jù)集拆分為訓練/測試/驗證
          標記字符串

          H2O 也有特征工程的方法。目標編碼是一種分類編碼技術(shù),它用目標變量的平均值替換分類值(對于高基數(shù)特征特別有用)。Word2vec 是一種文本處理方法,它將文本語料庫轉(zhuǎn)換為詞向量的輸出。

          本例子中,使用慣用的pandas進行相關(guān)分析。

          train_indexs?=?train.index
          test_indexs?=?test.index
          print(len(train_indexs),?len(test_indexs))
          #?(891,?418)

          df?=??pd.concat(objs=[train,?test],?axis=0).reset_index(drop=True)
          df?=?df.drop('PassengerId',?axis=1)
          train?=?df.loc[train_indexs]
          test?=?df[len(train_indexs):]
          test?=?test.drop(labels=["Survived"],?axis=1)

          AutoML

          H2O是簡化機器學習的第一步,涉及為各種機器學習算法開發(fā)簡單、統(tǒng)一的接口。

          H2O 的 AutoML 可用于自動化機器學習工作流程,其中包括在用戶指定的時間限制內(nèi)自動訓練和調(diào)整許多模型。

          H2O 提供了許多適用于AutoML對象以及單個模型的模型可解釋性方法。可以通過單個函數(shù)調(diào)用自動生成解釋,提供一個簡單的界面來探索和解釋 AutoML 模型。

          必需參數(shù)

          所需數(shù)據(jù)參數(shù)

          • y:此參數(shù)是目標變量列的名稱(或索引)
          • training_frame:指定訓練集。

          所需的停止參數(shù)

          必須指定以下停止策略之一(基于時間或模型數(shù)量)。設(shè)置這兩個選項后,AutoML 運行將在達到這些限制之一時立即停止。

          • max_runtime_secs:此參數(shù)指定 AutoML 進程將運行的最長時間。默認值為 0(無限制),但如果用戶未指定 max_runtime_secsmax_models 指定,則動態(tài)設(shè)置為 1 小時。
          • max_models:指定在 AutoML 運行中構(gòu)建的最大模型數(shù),不包括 Stacked Ensemble 模型。默認為 NULL/None。

          部分可選數(shù)據(jù)參數(shù)

          • x:預測列名稱或索引的列表/向量。僅當用戶想要從一組預測變量中排除列時才需要指定此參數(shù)。如果在預測中應(yīng)使用所有列(除了目標變量),則不需要設(shè)置。
          • validation_frame:若nfolds == 0,不然此參數(shù)將被忽略。可以指定一個驗證frame,并用于提前停止單個模型和提前停止網(wǎng)格搜索(除非max_models或max_runtime_secs覆蓋基于指標的提前停止)。默認情況下,當nfolds > 1時,交叉驗證指標將用于早期停止,因此validation_frame將被忽略。
          • leaderboard_frame:此參數(shù)允許用戶指定一個特定的數(shù)據(jù)框,用于在排行榜上對模型進行評分和排名。除了排行榜得分外,該框架不會用于任何其他用途。如果用戶未指定排行榜框架,則排行榜將使用交叉驗證指標,或者如果通過設(shè)置nfolds = 0關(guān)閉交叉驗證,則將從訓練框架自動生成排行榜框架。
          • blending_frame:指定用于計算預測的框架,作為 Stacked Ensemble 模型 metalearner 的訓練框架。如果提供,所有由 AutoML 生成的 Stacked Ensemble 都將使用 Blending(又名 Holdout Stacking)而不是基于交叉驗證的默認 Stacking 方法進行訓練。
          • fold_column:指定每個觀察具有交叉驗證折疊索引分配的列。這用于覆蓋 AutoML 運行中各個模型的默認、隨機、5 折交叉驗證方案。
          • weights_column:指定具有觀察權(quán)重的列。將某些觀察值賦予零權(quán)重相當于將其從數(shù)據(jù)集中排除;給一個觀察相對權(quán)重 2 相當于重復該行兩次。
          from?h2o.automl?import?H2OAutoML

          hf?=?h2o.H2OFrame(train)
          test_hf?=?h2o.H2OFrame(test)
          hf.head()

          #?選擇預測變量和目標
          hf['Survived']?=?hf['Survived'].asfactor()
          predictors?=?hf.drop('Survived').columns
          response?=?'Survived'

          #?切分數(shù)據(jù)集,添加停止條件參數(shù)為最大模型數(shù)和最大時間,然后訓練
          train_hf,?valid_hf?=?hf.split_frame(ratios=[.8],?seed=1234)
          aml?=?H2OAutoML(
          ????max_models=20,
          ????max_runtime_secs=300,
          ????seed=1234,
          )

          aml.train(x=predictors,
          ????????y=response,
          ????????training_frame=hf,
          )
          ModelMetricsBinomialGLM: stackedensemble
          ** Reported on train data. **

          MSE: 0.052432901181573156
          RMSE: 0.22898231630755497
          LogLoss: 0.19414205126074563
          Null degrees of freedom: 890
          Residual degrees of freedom: 885
          Null deviance: 1186.6551368246774
          Residual deviance: 345.9611353466487
          AIC: 357.9611353466487
          AUC: 0.9815107745076109
          AUCPR: 0.9762820080059409
          Gini: 0.9630215490152219
          lb?=?aml.leaderboard
          lb.head(rows=5)
          model_id	auc	logloss	aucpr	mean_per_class_error	rmse	mse
          StackedEnsemble_BestOfFamily_4_AutoML_1_20211228_171936 0.880591 0.389491 0.868648 0.170573 0.346074 0.119767
          GBM_5_AutoML_1_20211228_171936 0.880452 0.392546 0.87024 0.172323 0.347309 0.120624
          StackedEnsemble_BestOfFamily_5_AutoML_1_20211228_171936 0.879773 0.391389 0.867679 0.175702 0.347747 0.120928
          StackedEnsemble_AllModels_2_AutoML_1_20211228_171936 0.879339 0.395392 0.866278 0.175774 0.348615 0.121533
          StackedEnsemble_BestOfFamily_3_AutoML_1_20211228_171936 0.878607 0.394689 0.86662 0.178339 0.348864 0.121706
          valid_pred?=?aml.leader.predict(valid_hf)
          metrics.accuracy_score(valid_pred.as_data_frame()['predict'],?valid_hf.as_data_frame()['Survived'])
          0.9441340782122905

          模型可解釋性

          我們使用來自Kaggle的著名 Teleco Churn Dataset [8]來解釋可解釋性接口。數(shù)據(jù)集混合了數(shù)字變量和分類變量,我們感興趣的變量是“流失”,用于識別上個月內(nèi)離開的客戶。我們使用原始格式的數(shù)據(jù)集,因為我們的重點是解釋模型而不是模型性能。

          h2o.explain()

          輸出解釋模型

          解釋多個模型

          h2o.explain()提供模型列表時,將默認生成以下全局解釋:

          • 排行榜(比較所有模型)
          • Leader模型的混淆矩陣(僅限分類)
          • Leader模型的殘差分析(僅限回歸)
          • 排行榜頂部基礎(chǔ)模型(非堆疊)的重要性
          • 變量重要性熱圖(比較所有非堆疊模型)
          • 模型相關(guān)熱圖(比較所有模型)
          • 基于頂層樹模型(TreeSHAP)的SHAP總結(jié)
          • 部分依賴多圖 (PD) (比較所有模型)
          • 個體條件期望圖 (ICE)

          解釋單個模型

          h2o.explain()提供單個模型時,我們得到以下全局解釋:

          • 混淆矩陣(僅限分類)
          • 殘差分析(僅限回歸)
          • 變量重要性
          • 部分依賴圖 (PD)
          • 個體條件期望圖 (ICE)

          解釋繪圖功能

          函數(shù)內(nèi)部使用了許多單獨的繪圖explain()函數(shù)。其中一些函數(shù)將一組模型作為輸入,而其他函數(shù)一次只評估一個模型。

          殘差分析

          殘差分析在測試數(shù)據(jù)集上繪制擬合值與殘差。理想情況下,殘差應(yīng)該是隨機分布的。此圖中的模式可以指示模型選擇的潛在問題,例如,使用比必要更簡單的模型,不考慮異方差、自相關(guān)等。

          ra_plot?=?model.residual_analysis_plot(test)
          explain_residual_analysis_wine

          變量重要性

          變量重要性圖顯示了模型中最重要變量的相對重要性。

          該圖顯示了模型中最重要變量的相對重要性。H2O 在 0 和 1 之間縮放后顯示每個特征的重要性。變量重要性是通過每個變量的相對影響來計算的,主要用于像隨機森林這樣的基于樹的模型:在構(gòu)建樹時是否選擇了該變量進行拆分,以及平方誤差(整體樹)作為結(jié)果。

          ra_plot?=?model.varimp_plot()
          explain_varimp_wine

          解釋這個圖很簡單。具有最長條的變量(也就是最頂部的)是最重要的,而具有最短條的變量(也就是最底部的)是最不重要的。

          變量重要性熱圖

          變量重要性熱圖顯示了多個模型中的重要變量。默認情況下,模型和變量按相似度排序。

          H2O 中的一些模型為分類列的單熱(二進制指示符)編碼版本(例如深度學習、XGBoost)返回可變重要性。為了在所有模型類型中比較分類列的變量重要性,我們計算所有 one-hot 編碼特征的變量重要性的匯總,并返回原始分類特征的單個變量重要性。

          va_plot?=?aml.varimp_heatmap()

          #?或者如果需要一些模型的子集,就可以使用積分排行榜的一部分,
          #?例如,使用MAE作為排序指標
          va_plot?=?h2o.varimp_heatmap(aml.leaderboard.sort("mae").head(10))

          #?甚至可以使用擴展排行榜
          va_plot?=?h2o.varimp_heatmap(
          ???h2o.automl.get_leaderboard(
          ????????aml,extra_columns="training_time_ms"
          ????).sort("training_time_ms").head(10))
          explain_varimp_heatmap_wine

          解釋

          我們可以看顏色越深(紅色),對應(yīng)模型的變量的重要性就越高。即“alcihol”變量對所有 GBM / XGBoost 模型都比較重要,“type”對大多數(shù)模型并不重要。

          模型相關(guān)熱圖

          該圖顯示了模型預測之間的相關(guān)性。對于分類任務(wù),使用相同預測的頻率。默認情況下,模型按相似度排序(通過層次聚類計算)。GAM、GLM 和 RuleFit 等可解釋模型使用紅色文本突出顯示。

          mc_plot?=?aml.model_correlation_heatmap(test)

          #?或者如果需要一些模型的子集,就可以使用積分排行榜的一部分,
          #?例如,使用MAE作為排序指標
          mc_plot?=?h2o.model_correlation_heatmap(
          ??aml.leaderboard.sort("mae").head(10),?test)

          #?甚至可以使用擴展排行榜
          mc_plot?=?h2o.model_correlation_heatmap(
          ??h2o.automl.get_leaderboard(aml,
          ?????????????????????????????extra_columns="training_time_ms"
          ????????????????????????????).sort("training_time_ms").head(10),?test)

          #?也可以在排行榜上使用更復雜的查詢,
          #?例如,5個最快的模型之間的模型相關(guān)性訓練和堆疊整體
          leaderboard?=?h2o.automl.get_leaderboard(aml,?extra_columns="training_time_ms").sort("training_time_ms")
          mc_plot?=?h2o.model_correlation_heatmap(
          ??leaderboard.head(5).rbind(leaderboard[leaderboard["model_id"].grep("StackedEnsemble",?output_logical=True)]),?test)
          explain_model_correlation_heatmap_wine

          我們可以看到屬于同一家族的模型之間具有較強的相關(guān)性。顏色越深(紅色),兩個模型之間的相關(guān)性越強。

          SHAP 總結(jié)圖

          SHAP 值是SHapley Additive exPlanations的首字母縮寫詞,它解釋了給定變量具有特定值的影響,與如果該變量取某個基線值而我們所做的預測相比。如果你對SHAP不是很熟悉,推薦你查看??:??
          用 SHAP 可視化解釋機器學習模型實用指南(上)
          用 SHAP 可視化解釋機器學習模型實用指南(下)

          shap_plot?=?model.shap_summary_plot(test)
          explain_shap_summary_wine
          • y軸表示變量名,通常按照從上到下的重要性降序排列。
          • x軸上的SHAP值表示log-odds的變化。從這個值中,我們可以提取事件的概率(在本例中是churn)。
          • 漸變顏色表示該變量的原始值。在二元分類問題中(如我們的例子),它將使用兩種顏色,但它可以包含數(shù)值目標變量的整個光譜(回歸問題)。
          • 圖中的每個點表示來自原始數(shù)據(jù)集的一條記錄。

          SHAP 局部解釋

          SHAP 解釋顯示了給定實例的特征的貢獻。特征貢獻和偏置項之和等于模型的原始預測,即應(yīng)用反向鏈接函數(shù)之前的預測。H2O 實現(xiàn)了 TreeSHAP,當特征相關(guān)時,可以增加對預測沒有影響的特征的貢獻。

          shapr_plot?=?model.shap_explain_row_plot(test,?row_index=0)
          explain_row_shap_row1

          部分依賴圖(PDP)

          雖然變量重要性顯示了哪些變量對預測的影響最大,但部分依賴圖顯示了變量如何影響預測。對于那些熟悉線性或回歸模型的人來說,PD 圖的解釋與這些回歸模型中的系數(shù)類似。

          部分依賴圖 (PDP) 以圖形方式描述變量對響應(yīng)的邊際效應(yīng)。變量的影響是通過平均響應(yīng)的變化來衡量的。它假定計算 PDP 的特征與其他特征之間是獨立的。

          pd_plot?=?aml.pd_multi_plot(test,?column)

          #?或者如果需要一些模型的子集,就可以使用積分排行榜的一部分,
          #?例如,使用MAE作為排序指標
          pd_plot?=?h2o.pd_multi_plot(aml.leaderboard.sort("mae"),
          ????????????????????????????test,?column)
          explain_pd_multiplot_wine_alcohol

          部分依賴單模型圖

          這個可以回答該問題:控制所有其他特征,alcohol對紅酒質(zhì)量有什么影響?

          pd_plot?=?model.pd_plot(test,?column)
          explain_pd_plot_wine_alcohol

          單模型、單行、PD 圖

          pd_plot?=?model.pd_plot(test,?column,?row_index=0)
          explain_row_ice_plot_wine_alcohol_row1

          個體條件期望 (ICE) 圖

          單個條件期望 (ICE) 圖以圖形方式描述了變量對響應(yīng)的邊際影響。ICE 圖類似于部分依賴圖(PDP);PDP 顯示變量的平均影響,而 ICE 圖顯示單個實例的影響。此函數(shù)將繪制每個十分位數(shù)的影響。

          雖然 PDP 簡單易懂,但這種簡單性隱藏了各個實例之間潛在的有趣關(guān)系。例如,如果一個實例子集的特征值趨于負,而另一個子集趨于正,則平均過程可能會抵消它們。

          ICE地塊解決了這個問題。ICE 圖展開曲線,這是 PDP 中聚合過程的結(jié)果。每條 ICE 曲線不是對預測進行平均,而是顯示改變實例特征值的預測。當在單個圖中一起呈現(xiàn)時,它顯示了實例子集之間的關(guān)系以及各個實例行為方式的差異。

          ice_plot?=?model.ice_plot(test,?column)
          explain_ice_plot_wine_alcohol

          學習曲線

          學習曲線圖顯示了誤差度量對學習進度的依賴性(例如 RMSE 與迄今為止在 GBM 中訓練的樹的數(shù)量)。該圖可以幫助診斷模型是過擬合還是欠擬合——在理想情況下,訓練曲線和驗證曲線會收斂。最多可以有 4 條曲線顯示錯誤,并且將繪制所有可用的指標:

          • 訓練
          • 驗證(validation_frame設(shè)置時可用)
          • CV 模型訓練(在nfolds>1時可用)
          • 交叉驗證(在nfolds>1時可用)
          learning_curve_plot?=?model.learning_curve_plot()
          explain_learning_curve_plot_airlines

          保存和導入模型

          #?構(gòu)建模型
          model?=?H2ODeepLearningEstimator(params)
          model.train(params)

          #?保存模型
          model_path?=?h2o.save_model(model=model,?path="/tmp/mymodel",?force=True)
          print(model_path)
          >>>?/tmp/mymodel/DeepLearning_model_python_1441838096933

          #?導入模型
          saved_model?=?h2o.load_model(model_path)

          #?將上面構(gòu)建的模型下載到本地機器
          my_local_model?=?h2o.download_model(model,?path="/Users/UserName/Desktop")

          #?上傳你剛才下載的模型
          #?to?the?H2O?cluster
          uploaded_model?=?h2o.upload_model(my_local_model)

          參考資料

          [1]

          GitHub地址: https://github.com/h2oai/h2o-3

          [2]

          Download地址: http://h2o-release.s3.amazonaws.com/h2o/latest_stable.html

          [3]

          Document地址: https://docs.h2o.ai/h2o/latest-stable/h2o-docs/index.html

          [4]

          Flow: http://docs.h2o.ai/h2o/latest-stable/h2o-docs/flow.html

          [5]

          h2o下載: http://h2o-release.s3.amazonaws.com/h2o/latest_stable.html

          [6]

          https: https://github.com/h2oai/h2o-3/blob/master/h2o-py/conda/h2o/meta.yaml

          [7]

          kaggle泰坦尼克案例: https://www.kaggle.com/code/andreshg/titanic-dicaprio-s-safety-guide-h2o-automl/notebook

          [8]

          Teleco Churn Dataset : https://www.kaggle.com/blastchar/telco-customer-churn


          往期精彩回顧




          瀏覽 97
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  影音先锋女人av噜噜色 | 丁香色五月在线 | 派遣素描模特儿居家作画 却假藉 | 久久亚洲AV成人影视 | 豆花视频AⅤ一区二区三区 |