因子分解機FM(Factorization Machines)是一種通用的預測模型,特別適合處理高維稀疏資料。FM演算法通過引入隱向量的方式建模特徵之間的互動,可以看作是矩陣分解技術的推廣,廣泛應用於推薦系統、廣告點選率預測等領域。
演算法說明
FM演算法包括兩個過程:FM訓練和FM預測。這兩個過程分別對應模型的構建和應用階段。
FM訓練:這一過程的核心目標是通過給定的訓練資料集來學習模型參數,以便模型能夠準確地預測目標變數。在此階段,演算法會對輸入資料進行分析和參數最佳化,以確保模型的高效性和準確性。
FM預測:在這一過程中,已經訓練好的模型被用來對新輸入資料進行預測。在FM預測階段,模型的參數已經被鎖定,通過這些固定的參數,模型能夠計算並輸出新資料的預測結果。
配置組件
方式一:可視化方式
FM訓練
在Designer工作流程頁面添加FM訓練組件,並在介面右側配置相關參數:
參數類型 | 參數 | 描述 | |
欄位設定 | 特徵列 | 根據輸入資料表的特徵選取特徵列。支援STRING和DOUBLE類型的資料。 | |
標籤列 | 根據輸入資料表的特徵選取標籤列。僅支援DOUBLE類型。 | ||
進階選項 | 僅在Designer控制台,需要配置該參數。 如果選中進階選項複選框,則Flink配置項生效,需配置Flink計算引擎,詳情請參見Flink配置。 | ||
參數設定 | 任務類型 | 支援以下取值:
| |
迭代數 | 總訓練迭代次數,預設為10。 | ||
正則化係數 | 使用英文逗號(,)分隔的三個浮點數,分別表示0階項、1階項及2階項的正則化係數。 | ||
學習率 | 如果訓練發散,則降低該參數取值。 | ||
參數初始化標準差 | 參數初始化的標準差,用來歸一化資料。DOUBLE類型,預設為0.05。 | ||
維度 | 使用英文逗號(,)分隔的三個正整數,分別表示0階項、1階項、2階項的長度。 | ||
資料區塊大小 | 績效參數。 | ||
輸出表生命週期 | 僅在原PAI-Studio控制台,需要配置該參數。 輸出表的生命週期。 | ||
執行調優 | 底層Alink作業使用的計算資源 | MaxCompute | 使用MaxCompute/Flink計算資源,節點個數和單節點佔用的記憶體大小配置方法請參見附錄:如何預估資源的使用量。 |
Flink | |||
DLC | 使用DLC計算資源,請根據介面提示配置資源規格。 |
FM預測
在Designer工作流程頁面添加FM預測組件,並在介面右側配置相關參數:
參數類型 | 參數 | 描述 | |
參數設定 | 預測結果列名 | 預測結果列的名稱。 | |
詳細預測資訊列名 | 詳細預測資訊列的名稱。 | ||
保持列 | 儲存至輸出結果表的列。 | ||
進階選項 | 僅在Designer控制台,需要配置該參數。 如果選中進階選項複選框,則每個Worker預測使用的線程數目、模型大小類型生效。 | ||
執行調優 | 底層Alink作業使用的計算資源 | MaxCompute | 使用MaxCompute/Flink計算資源,節點個數和單節點佔用的記憶體大小配置方法請參見附錄:如何預估資源的使用量。 |
Flink | |||
DLC | 使用DLC計算資源,請根據介面提示配置資源規格。 |
方式二:PAI命令方式
使用PAI命令配置FM訓練/FM預測組件參數。您可以使用SQL指令碼組件進行PAI命令調用,詳情請參見情境4:在SQL指令碼組件中執行PAI命令。
FM訓練
參數 | 是否必選 | 預設值 | 描述 |
tensorColName | 是 | 無 | 特徵列名稱。 資料格式為key:value,多個特徵使用英文逗號(,)分隔。例如1:1.0,3:1.0。 |
labelColName | 是 | 無 | label列名。資料必須是數實值型別。如果task取值為binary_classification,則label只能取0或1。 |
task | 是 | regression | 任務類型。取值範圍為{regression,binary_classification}。 |
numEpochs | 否 | 10 | 迭代數。 |
dim | 否 | 1,1,10 | 使用英文逗號(,)分隔的三個整數,分別表示0次項、線性項及二次項的長度。 |
learnRate | 否 | 0.01 | 學習率。 如果訓練發散,則降低學習率。 |
lambda | 否 | 0.01,0.01,0.01 | 使用英文逗號(,)分隔的三個浮點數,分別表示0次項、線性項及二次項的正則化係數。 |
initStdev | 否 | 0.05 | 參數初始化標準差。 |
FM預測
參數 | 是否必選 | 預設值 | 描述 |
predResultColName | 否 | prediction_result | 預測結果列名。 |
predScoreColName | 否 | prediction_score | 預測得分列名。 |
predDetailColName | 否 | prediction_detail | 詳細預測資訊列名。 |
keepColNames | 否 | 所有列 | 儲存至輸出結果表的列。 |
使用樣本
使用以下資料作為基於Alink架構的FM推薦模板的輸入資料,訓練產生的模型AUC約為0.97。