使用模型深入分析框架最佳化模型
模型深入分析架構提供資料科學家在Data Science Workspace中的工具,以便根據實驗快速且明智地選擇最佳機器學習模型。 此架構將提高機器學習工作流程的速度和有效性,並改善資料科學家的易用性。 為每個機器學習演演算法型別提供預設範本,以協助模型調整,藉此完成調整。 最終結果可讓資料科學家和公民資料科學家為其最終客戶做出更好的模型最佳化決策。
什麼是量度?
實作和訓練模型後,資料科學家的下一步是找出模型執行的效果。 您可使用各種量度來瞭解模型與其他量度相比時的效能。 所使用量度的部分範例包括:
- 分類準確度
- 曲線下的區域
- 混淆矩陣
- 分類報告
設定配方代碼
目前,模型深入分析架構支援下列執行階段:
您可以在下的experience-platform-dsw-referencerecipes存放庫中找到配方範常式式碼。 在本教學課程中,將會參考此存放庫中的特定檔案。
Scala scala
有兩種方式可將量度帶入配方。 一種是使用SDK提供的預設評估量度,另一種是撰寫自訂評估量度。
Scala的預設評估量度
預設評估作為分類演演算法的一部分進行計算。 以下是目前已實作之評估器的部分預設值:
evaluation.classcom.adobe.platform.ml.impl.DefaultBinaryClassificationEvaluatorcom.adobe.platform.ml.impl.DefaultMultiClassificationEvaluatorcom.adobe.platform.ml.impl.RecommendationsEvaluator可以在資料夾的application.propertiesrecipe檔案的配方中定義評估器。 啟用DefaultBinaryClassificationEvaluator的範常式式碼如下所示:
evaluation.class=com.adobe.platform.ml.impl.DefaultBinaryClassificationEvaluator
evaluation.labelColumn=label
evaluation.predictionColumn=prediction
training.evaluate=true
啟用評估器類別後,在訓練期間預設會計算一些量度。 您可以將下列行新增至application.properties,以明確宣告預設量度。
evaluation.metrics.com=com.adobe.platform.ml.impl.Constants.DEFAULT
變更evaluation.metrics.com的值即可啟用特定量度。 在以下範例中,會啟用F分數量度。
evaluation.metrics=com.adobe.platform.ml.impl.Constants.FSCORE
下表列出每個類別的預設度量。 使用者也可以使用evaluation.metric欄中的值來啟用特定量度。
evaluator.classevaluation.metricDefaultBinaryClassificationEvaluator— 召回
— 混淆矩陣
-F分數
— 精確度
— 接收器操作特性下的接收器操作特性
— 區域
PRECISION-
RECALL-
CONFUSION_MATRIX-
FSCORE-
ACCURACY-
ROC-
AUROCDefaultMultiClassificationEvaluator— 召回
— 混淆矩陣
-F分數
— 精確度
— 接收器操作特性下的接收器操作特性
— 區域
PRECISION-
RECALL-
CONFUSION_MATRIX-
FSCORE-
ACCURACY-
ROC-
AUROCRecommendationsEvaluator— 標準化折現累積增益
— 平均倒數排名
— 量度K
MEAN_AVERAGE_PRECISION-
NDCG-
MRR-
METRIC_KScala的自訂評估量度
可藉由延伸MLEvaluator.scala檔案中的Evaluator.scala介面來提供自訂評估器。 在範例Evaluator.scala檔案中,我們定義了自訂split()和evaluate()函式。 我們的split()函式以8:2的比率隨機分割資料,而我們的evaluate()函式定義並傳回3個量度:MAPE、MAE和RMSE。
MLMetric類別,在建立新的"measures"時不要對valueType使用MLMetric,否則量度將不會填入自訂評估量度表格中。metrics.add(new MLMetric("MAPE", mape, "double"))不是這個:
metrics.add(new MLMetric("MAPE", mape, "measures"))在配方中定義之後,下一步就是在配方中啟用它。 這是在專案資料夾的application.propertiesresources檔案中完成的。 此處,evaluation.class設定為Evaluator中定義的Evaluator.scala類別
evaluation.class=com.adobe.platform.ml.Evaluator
在Data Science Workspace中,使用者將可以在實驗頁面的「評估量度」索引標籤中看到深入分析。
Python/Tensorflow pythontensorflow
截至目前,Python或Tensorflow沒有預設的評估量度。 因此,若要取得Python或Tensorflow的評估量度,您必須建立自訂評估量度。 這可透過實作Evaluator類別來完成。
Python的自訂評估量度
對於自訂評估量度,有兩個主要方法需要針對評估器實作: split()和evaluate()。
對於Python,這些方法將在類別的evaluator.pyEvaluator中定義。 請依照evaluator.py連結來取得Evaluator的範例。
在Python中建立評估度量需要使用者實作evaluate()和split()方法。
evaluate()方法傳回量度物件,該物件包含屬性為name、value和valueType的量度物件陣列。
split()方法的目的是輸入資料,並輸出訓練與測試資料集。 在我們的範例中,split()方法使用DataSetReader SDK輸入資料,然後移除不相關的欄來清除資料。 從那裡,系統會根據資料中現有的原始功能建立其他功能。
split()方法應傳回訓練和測試資料流,然後pipeline()方法會使用此資料流來訓練和測試ML模型。
Tensorflow的自訂評估量度
對於Tensorflow (類似於Python),evaluate()類別中的方法split()和Evaluator將需要實作。 針對evaluate(),當split()傳回訓練與測試資料集時,應傳回量度。
from ml.runtime.python.Interfaces.AbstractEvaluator import AbstractEvaluator
class Evaluator(AbstractEvaluator):
def __init__(self):
print ("initiate")
def evaluate(self, data=[], model={}, config={}):
return metrics
def split(self, config={}):
return 'train', 'test'
R r
R目前沒有預設的評估量度。因此,若要取得R的評估量度,您必須將applicationEvaluator類別定義為配方的一部分。
R的自訂評估量度
applicationEvaluator的主要用途是傳回包含量度索引鍵值配對的JSON物件。
此applicationEvaluator.R可作為範例使用。 在此範例中,applicationEvaluator分為三個相似的區段:
- 載入資料
- 資料準備/功能工程
- 擷取已儲存的模型並評估
資料會先從retail.config.json中定義的來源載入到資料集。 從那裡,資料經過清理和工程,以適合機器學習模型。 最後,此模型可用我們的資料集進行預測,並根據預測值和實際值計算量度。 在此案例中,MAPE、MAE和RMSE已定義並傳回metrics物件。
使用預先建立的量度和視覺效果圖表
Sensei Model Insights Framework將為每種型別的機器學習演演算法支援一個預設範本。 下表顯示常見的高階機器學習演演算法類別以及對應的評估量度和視覺效果。
- MAPE
- MASE
- MAE
— 精確召回
— 精確度
- F分數(特別的是F1,F2)
- AUC
- ROC
— 針對每個類別:
— 精確召回率
- F分數(尤其是F1、F2)
- RI (蘭德指數)、ARI (調整蘭德指數)
— 同質性分數、完整性分數和V-measure
- FMI (福克斯 — 馬洛指數)
— 純度
- Jaccard指數
— 剪影係數
- CHI (Calinski-Harabaz索引)
- DBI (Davies-Bouldin索引)
- Dunn索引
— 標準化折現累積增益
— 平均倒數排名
— 量度K