使用SQL實現機器學習預測
本文介紹如何在云原生數據倉庫 AnalyticDB MySQL 版中,利用SQL語言快速部署BST(Behavior Sequence Transformer)模型執行機器學習任務,包括從數據加工、模型創建、訓練到最終的評估與預測的整個流程。
使用場景
您可以通過SQL查詢快速部署模型訓練和推理服務,輕松利用SQL來完成數據預處理、訓練和推理。
AnalyticDB for MySQL支持部署BST模型,該模型適用于需要理解用戶行為模式、分析用戶偏好、預測未來趨勢以及實現個性化推薦等應用場景。例如,在游戲或電子商務領域,通過捕捉用戶行為之間的長期依賴關系,可以更準確地理解和預測用戶的行為模式和偏好,從而提供個性化的服務和推薦。
BST模型是一種用于處理行為序列數據的模型。該模型接收由行為事件ID組成的序列作為輸入,并輸出0或1,作為對這個序列分類的結果。
假設在一款游戲中,玩家的交互行為可以被記錄并轉換成一系列的行為事件。
例如,一位玩家在游戲中可能產生如下行為序列:登錄、領取登錄獎勵、接受任務、戰斗、戰斗、戰斗、完成任務、充值、戰斗、登出。
這些具體的行為序列會被轉化為以下事件ID序列:0、1、2、3、3、3、4、5、3、6。此序列隨后將以字符串格式提供給BST模型。模型分析后,將返回一個分類結果,即0或1,用來指示特定的行為序列屬于哪個預設類別。
前提條件
集群的產品系列為企業版或湖倉版。
集群的內核需為3.2.4.0及以上版本。
說明查看企業版或湖倉版集群的內核版本,請執行
SELECT adb_version();
。如需升級內核版本,請聯系技術支持。已開通AI資源組功能。AI資源組功能處于公測階段,請聯系技術支持開通AI資源組功能。
步驟一:創建AI資源組并綁定普通資源組
使用SQL執行機器學習任務,需要兩種資源組:
AI資源組:專為支持機器學習任務設計,用于管理機器學習任務所需的GPU資源,支持模型訓練和預測中的計算密集型操作。
普通資源組:用于處理常規SQL查詢,如生成訓練數據或執行預測函數。
SQL會被首先提交至普通資源組執行,若執行過程中發現SQL有AI計算需求,則會自動投遞AI計算到與之綁定的AI資源組上執行。
因此請先按照下列步驟創建AI資源組并綁定普通資源組。
登錄云原生數據倉庫AnalyticDB MySQL控制臺,在左上角選擇集群所在地域。在左側導航欄,單擊集群列表。在集群列表上方,選擇產品系列,然后單擊目標集群ID。
在左側導航欄,單擊集群管理>資源管理,單擊資源組管理頁簽。
單擊資源組列表右上角的新增資源組,并創建AI資源組。
參數名稱
說明
資源組名稱
自定義資源組的名稱。輸入長度在2~30位,以字母開頭,只能包含字母、數字和下劃線。
任務類型
在下拉列表中選擇AI型資源組。
重要如果沒有AI選項,說明您的實例尚未開通AI資源組功能,請聯系技術支持。
規格
GPU、CPU和內存的資源組合。可選擇ADB.MLLarge.24、ADB.MLLarge.2或者ADB.MLAdvavced.6。
最小個數
資源組合的最小數量。
最大個數
資源組合的最大數量。
單擊確定,完成新建資源組。
選擇目標普通資源組操作列的修改,并使用ML作業投遞規則將該資源組綁定到新創建的目標AI資源組。
步驟二:數據加工
數據加工是將業務中產生的原始數據轉換為適合模型訓練所需格式的過程。這一過程緊密依賴于三個關鍵因素:原始數據的具體形態、原始數據的存儲位置以及模型對輸入數據格式的要求。
模型訓練數據表結構要求
輸入特征列:此列為字符串類型,包含一系列以逗號分隔的整數。每個條目代表一個樣本的特征向量。
目標標簽列:此列包含兩個可能的值(例如0或1),用于表示分類任務中的類別標簽。
數據表結構示例:('1,2,3',0),('3,2,1',1)。
數據加工方法
如果您的原始數據格式和模型訓練所需格式有差異,請使用下面方法加工數據:
準備JAR包:把編寫的Spark數據加工程序打包成的JAR包,上傳到OSS存儲空間。
配置Spark作業參數:在提交Spark作業時,配置作業需要的參數。配置參數詳情請參見Spark應用配置參數說明。
如果您的原始數據符合模型訓練所需格式,可省略此步驟。
步驟三:模型創建與訓練
創建一個機器學習模型,定義模型參數、指定訓練數據以及檢查模型狀態。
在左側導航欄,單擊
。在SQLConsole中使用模型語句,創建模型并訓練。
-- 創建模型
-- 指定資源組
/*+resource_group=itrain*/
CREATE MODEL bstdemo.bst-- 模型名稱
OPTIONS (
model_type='bst_classification', -- 模型類型
feature_cols=(event_list), -- 特征列
target_cols=(target), -- 要預測的目標列
hyperparameters = ( -- 其他模型超參
use_best_ckpt = 'False',
early_stopping_patience='0'
)
)
AS SELECT event_list, target FROM bstdemo.adb; -- 模型數據來源,此查詢的結果將會提供給上述引用的變量進行訓練
-- 查看模型訓練狀態,當狀態進入READY后即訓練完成
SHOW MODEL bstdemo.bst;
步驟四:模型評估
評估已經創建好的機器學習模型,驗證模型正確性。
-- 語句形式與創建模型類似
/*resource_group=rg1*/
EVALUATE MODEL bstdemo.bst
OPTIONS (
feature_cols=(event_list),
target_cols=(target),
)
AS SELECT event_list, target FROM bstdemo.adb01;
步驟五:模型預測
從表中選取特征列,將這些數據傳遞給已訓練好的模型,并獲取基于這些輸入數據的預測結果。
-- 使用訓練好的模型進行預測;
-- ml_predict函數的第一個參數是模型名稱,后續入參是模型的輸入列;
SELECT ML_PREDICT('bstdemo.bst', event_list) FROM bstdemo.adb02;