DataRobot 手把手教學:如何從其他專案調用 Blueprint(下)
DataRobot API 說明
本次 API 的文件參考使用 第 2.25.0 版 以下說明每一步驟的整套流程,以下說明先行條件:- 訓練好的 Project 是使用 DataRobot 的預設資料切割,也就是 5 fold CV + holdout (即 testing 資料,訓練與驗證中不會調用的資料)
- 新建 (尚未調用其他專案 Blueprint) 的 Project 也跟訓練好的 Project 同樣設定。
連結至你已經完成訓練的 Project
API 在連接 DataRobot 前須在 GUI 找到 token,可於 setting 裡的 Developer Tools 找到,下圖為範例。在 GUI 介面點進訓練好的 Project,網址會有一串 24 個字元的 Project ID,下圖為範例,將它複製到 get() 裡。import datarobot as dr import pandas as pd dr.Client(token=’輸入 token’,endpoint=’架設 DataRobot 的網域’) origin_project = dr.Project.get(‘輸入 project id’)
DataRobot 的Token 位置
Project ID 與 model ID 位置
如果 Project 有固定的命名方式,像範例有 ‘GUI_cifar’ 就可以當作搜尋條件,最後用 dict 去作為清單儲存 專案名字, id。project_list = dr.Project.list(search_params={‘project_name’: ‘GUI_cifar’}) project_dicts = {} for i in project_list:project_dicts[i.project_name] = i.id
找出的訓練好專案的 Blueprint ID
這裡有兩種方法可以選擇:推薦第一種方法,也就是優先選擇 DataRobot 推薦的模型。如果 Project 裡沒有推薦的模型,再採用第二種方法。原始專案的推薦模型
模型在一輪一輪訓練完之後,最後會以這個冠軍模型進行 100% 資料進行訓練變成推薦部屬模型。從下圖可以看到推薦模型會顯示綠色標籤。Project 中的推薦模型示意圖
從 leaderboard 找選用 metric 最佳的結果
以下有寫了一個function(get_model_scores) 在Python IDE中調用 leaderboard ,可以從中找選用 metric 最佳的結果。但此結果並不一定為 DataRobot 推薦的模型。defget_model_score(mod, metric):res = {}
res[‘model_number’] = mod.model_number
res[‘model_type’] = mod.model_type
res[‘model_category’] = mod.model_category
res[‘model’] = mod
res[‘sample_pct’] = mod.sample_pct
res[‘blueprint_id’] = mod.blueprint_id
res[‘metric_v’] = mod.metrics.get(metric, {}).get(‘validation’)
res[‘metric_cv’] = mod.metrics.get(metric, {}).get(‘crossValidation’)
return res
defget_model_scores(proj, metric=None, ascending=True):if metric is None:
metric = proj.metric
df = pd.DataFrame([get_model_score(m, metric) for m in proj.get_models(with_metric=metric)])
return df.sort_values([‘metric_cv’, ‘metric_v’], ascending=ascending, na_position=’last’)
#採用推薦模型 best_BPid = dr.ModelRecommendation.get(origin_project.id).get_model().blueprint_idif best_BPid is None:
#從 leaderboard 找最佳model_scores_ad = get_model_scores(origin_project, metric=’Accuracy’, ascending=False)
best_BPid = model_scores_ad.loc[model_scores_ad[“metric_v”] == max(model_scores_ad[“metric_v”]),’blueprint_id’].reset_index(drop=True)[0]
設定 target
同樣在 GUI 介面的時候,如果是監督式學習(supervised learning)的專案就必須要設定你的 target,在 API 也同理,這必須依專案的資料集做調整。要注意 mode 要設定成 “manual” 在後續的動作才可以指定 Blueprint。否則會自動跑 AutoML。worker_count 請依部署的資源做調整,但在本次教學中建議設定為 1 即可,因為只選用最佳模型的Blueprint 訓練,只需一個 worker 做運算。project_untrian.set_target(target=”class”, #專案的訓練目標
mode=”manual”, #設為手動才可以指定 blueprint
worker_count=1
)
將 Project 的 holdout 解開
最後推薦模型會把 100% 資料進行重新訓練,因此在新Project解開 holdout作為同樣條件把所有資料重新訓練。要注意 Project 的 holdout 解開後就無法再重新定義。project_untrian.unlock_holdout()
建立模型進行訓練
最後在開始進行訓練模型時,需要填入需調用的 Blueprint 的 ID 以及該隸屬的 Project 的 ID ,並且把要訓練的資料量調成 100%。scoring_type 為 “crossValidation” 只能在調用的資訊量小於64%才可使用。model_job_id = project_untrian.train(best_BPid,source_project_id = origin_project.id,
sample_pct =100,
scoring_type = “validation”)
[optional] 在API 中該如何知道模型已訓練完成?
當在 GUI 介面可以查看知道是否完成了,但在 Python API 的環境下他在 建立模型進行訓練 後就可以繼續做其他的動作了,如果是為了要計時或者等這個 model 訓練完成後才要做後續的操作。建議可以使用以下方法讓 Python 等待 model 訓練完成再進行下一動作。但有兩點須注意:- 如果 model 已經訓練完成的話,ModelJob 會抓不到並顯示 PendingJobFinished。原因在於若 model 是在訓練的的狀態,它的型態會是 ModelJob,只有這時候才能呼叫。
- 如果無法預估訓練時間,建議 max_wait 設長一點,否則會報錯。
model_job = dr.ModelJob.get(project_id=project_untrian.id,model_job_id=model_job_id)
model_job.wait_for_completion(max_wait=60*60*3) #(s*m*H)
[optional] 如何看結果呢?
以下有兩種方法可以查看結果直接從 GUI 介面查看
只要一行 api 指令就會直接打開瀏覽器,並且跳轉到當前 Project 的 leaderboard。#跳轉到當前 Project 的 leaderboard project_untrian.open_leaderboard_browser()
利用已經寫好的 function 呼叫
get_model_scores這個 function 在從 leaderboard 找選用 metric 最佳的結果出現過。可利用同樣方法呼叫相關結果於 python 變數中。# 呼叫 function model_scores_train = get_model_scores(project_untrian, metric=’AUC’, ascending=False)
DataRobot 手把手教學:如何從其他專案調用 Blueprint(上)
訂閱偉康科技洞察室部落格,掌握最新科技趨勢!
了解更多
DataRobot AutoML DataRobot MLOps偉康科技提供以雲端服務、智能數據、資安技術為核心的數位轉型解決方案,協助攻克企業資料治理遇到的難題,如有需求歡迎 聯絡我們
專人協助
由偉康業務人員為您詳細說明偉康的解決方案,以及相關產業經驗。