參數服務器PS(Parameter Server)致力于解決大規模的離線及在線訓練任務,SMART(Scalable Multiple Additive Regression Tree)是GBDT(Gradient Boosting Decision Tree)基于PS實現的迭代算法。PS-SMART支持百億樣本及幾十萬特征的訓練任務,可以在上千節點中運行。同時,PS-SMART支持多種數據格式及直方圖近似等優化技術。
使用限制
支持的計算引擎為MaxCompute。
使用說明
PS-SMART二分類訓練組件的目標列僅支持數值類型,且0表示負例,1表示正例。如果MaxCompute表數據是STRING類型,則需要進行類型轉換。例如,分類目標是Good/Bad字符串,需要轉換為1/0。
如果數據是KV格式,則特征ID必須為正整數,特征值必須為實數。如果特征ID為字符串類型,則需要使用序列化組件進行序列化。如果特征值為類別型字符串,需要進行特征離散化等特征工程處理。
雖然PS-SMART二分類訓練組件支持數十萬特征任務,但是消耗資源大且運行速度慢,可以使用GBDT類算法進行訓練。GBDT類算法適合直接使用連續特征進行訓練,除需要對類別特征進行One-Hot編碼(篩除低頻特征)以外,不建議對其他連續型數值特征進行離散化。
PS-SMART算法會引入隨機性。例如,data_sample_ratio及fea_sample_ratio表示的數據和特征采樣、算法使用的直方圖近似優化及局部Sketch歸并為全局Sketch的順序隨機性。雖然多個worker分布式執行時,樹結構不同,但是從理論上可以保證模型效果相近。如果您在訓練過程中,使用相同數據和參數,多次得到的結果不一致,屬于正常現象。
如果需要加速訓練,可以增大計算核心數。因為PS-SMART算法需要所有服務器獲得資源后,才能開始訓練,所以集群忙碌時,申請較多資源會增加等待時間。
組件配置
您可以使用以下任意一種方式,配置PS-SMART二分類組件參數。
方式一:可視化方式
在Designer工作流頁面配置組件參數。
頁簽 | 參數 | 描述 |
字段設置 | 是否稀疏格式 | 稀疏格式的KV之間使用空格分隔,key與value之間使用英文冒號(:)分隔。例如1:0.3 3:0.9。 |
選擇特征列 | 輸入表中,用于訓練的特征列。如果輸入數據是Dense格式,則只能選擇數值(BIGINT或DOUBLE)類型。如果輸入數據是Sparse KV格式,且key和value是數值類型,則只能選擇STRING類型。 | |
選擇標簽列 | 輸入表的標簽列,支持STRING及數值類型。但列存儲內容僅支持數值類型,例如二分類中的0和1。 | |
選擇權重列 | 列可以對每行樣本進行加權,支持數值類型。 | |
參數設置 | 評估指標類型 | 支持以下幾種類型:
|
樹數量 | 需要配置為樹數量,正整數,樹數量和訓練時間成正比。 | |
樹最大深度 | 默認值為5,即最多16個葉子節點。取值為正整數。 | |
數據采樣比例 | 構建每棵樹時,采樣部分數據進行學習,構建弱學習器,從而加快訓練。 | |
特征采樣比例 | 構建每棵樹時,采樣部分特征進行學習,構建弱學習器,從而加快訓練。 | |
L1懲罰項系數 | 控制葉子節點大小。該參數值越大,葉子節點規模分布越均勻。如果過擬合,則增大該參數值。 | |
L2懲罰項系數 | 控制葉子節點大小。該參數值越大,葉子節點規模分布越均勻。如果過擬合,則增大該參數值。 | |
學習速率 | 取值范圍為(0,1)。 | |
近似Sketch精度 | 構造Sketch的切割分位點閾值。該參數值越小,獲得的桶越多。一般使用默認值0.03,無需手動配置。 | |
最小分裂損失變化 | 分裂節點所需要的最小損失變化。該參數值越大,分裂越保守。 | |
特征數量 | 特征數量或最大特征ID。如果估計使用資源時,未配置該參數,則系統會啟動SQL任務自動計算。 | |
全局偏置項 | 所有樣本的初始預測值。 | |
隨機數產生器種子 | 隨機數種子,整型。 | |
特征重要性類型 | 支持以下幾種類型:
| |
執行調優 | 計算核心數 | 默認為系統自動分配。 |
每個核內存大小 | 單個核心使用的內存,單位為MB。通常無需手動配置,系統會自動分配。 |
方式二:PAI命令方式
使用PAI命令方式,配置該組件參數。您可以使用SQL腳本組件進行PAI命令調用,詳情請參見SQL腳本。
#訓練。
PAI -name ps_smart
-project algo_public
-DinputTableName="smart_binary_input"
-DmodelName="xlab_m_pai_ps_smart_bi_545859_v0"
-DoutputTableName="pai_temp_24515_545859_2"
-DoutputImportanceTableName="pai_temp_24515_545859_3"
-DlabelColName="label"
-DfeatureColNames="f0,f1,f2,f3,f4,f5"
-DenableSparse="false"
-Dobjective="binary:logistic"
-Dmetric="error"
-DfeatureImportanceType="gain"
-DtreeCount="5"
-DmaxDepth="5"
-Dshrinkage="0.3"
-Dl2="1.0"
-Dl1="0"
-Dlifecycle="3"
-DsketchEps="0.03"
-DsampleRatio="1.0"
-DfeatureRatio="1.0"
-DbaseScore="0.5"
-DminSplitLoss="0";
#預測。
PAI -name prediction
-project algo_public
-DinputTableName="smart_binary_input"
-DmodelName="xlab_m_pai_ps_smart_bi_545859_v0"
-DoutputTableName="pai_temp_24515_545860_1"
-DfeatureColNames="f0,f1,f2,f3,f4,f5"
-DappendColNames="label,qid,f0,f1,f2,f3,f4,f5"
-DenableSparse="false"
-Dlifecycle="28";
模塊 | 參數 | 是否必選 | 描述 | 默認值 |
數據參數 | featureColNames | 是 | 輸入表中,用于訓練的特征列。如果輸入表是Dense格式,則只能選擇數值(BIGINT或DOUBLE)類型。如果輸入表是Sparse KV格式,且KV格式中key和value是數值類型,則只能選擇STRING類型。 | 無 |
labelColName | 是 | 輸入表的標簽列,支持STRING及數值類型。如果是內部存儲,則僅支持數值類型。例如二分類中的0和1。 | 無 | |
weightCol | 否 | 列可以對每行樣本進行加權,支持數值類型。 | 無 | |
enableSparse | 否 | 是否為稀疏格式,取值范圍為{true,false}。稀疏格式的KV之間使用空格分隔,key與value之間使用英文冒號(:)分隔。例如1:0.3 3:0.9。 | false | |
inputTableName | 是 | 輸入表的名稱。 | 無 | |
modelName | 是 | 輸出的模型名稱。 | 無 | |
outputImportanceTableName | 否 | 輸出特征重要性的表名。 | 無 | |
inputTablePartitions | 否 | 格式為ds=1/pt=1。 | 無 | |
outputTableName | 否 | 輸出至MaxCompute的表,二進制格式,不支持讀取,只能通過SMART的預測組件獲取。 | 無 | |
lifecycle | 否 | 輸出表的生命周期,單位為天。 | 3 | |
算法參數 | objective | 是 | 目標函數類型。如果進行二分類訓練,則選擇binary:logistic。 | 無 |
metric | 否 | 訓練集的評估指標類型,輸出在Logview文件Coordinator區域的stdout。支持以下類型:
| 無 | |
treeCount | 否 | 樹數量,與訓練時間成正比。 | 1 | |
maxDepth | 否 | 樹的最大深度,正整數,取值范圍為1~20。 | 5 | |
sampleRatio | 否 | 數據采樣比例,取值范圍為(0,1]。如果取值為1.0,則表示不采樣。 | 1.0 | |
featureRatio | 否 | 特征采樣比例,取值范圍為(0,1]。如果取值為1.0,則表示不采樣。 | 1.0 | |
l1 | 否 | L1懲罰項系數。該參數值越大,葉子節點分布越均勻。如果過擬合,則增大該參數值。 | 0 | |
l2 | 否 | L2懲罰項系數。該參數值越大,葉子節點分布越均勻。如果過擬合,則增大該參數值。 | 1.0 | |
shrinkage | 否 | 取值范圍為(0,1)。 | 0.3 | |
sketchEps | 否 | 構造Sketch的切割分位點閾值,桶數為O(1.0/sketchEps)。該參數值越小,獲得的桶越多。一般使用默認值,無需手動配置。取值范圍為(0,1)。 | 0.03 | |
minSplitLoss | 否 | 分裂節點所需要的最小損失變化。該參數值越大,分裂越保守。 | 0 | |
featureNum | 否 | 特征數量或最大特征ID。如果估計使用資源時,未配置該參數,則系統會啟動SQL任務自動計算。 | 無 | |
baseScore | 否 | 所有樣本的初始預測值。 | 0.5 | |
randSeed | 否 | 隨機數種子,整型。 | 無 | |
featureImportanceType | 否 | 計算特征重要性的類型,包括:
| gain | |
調優參數 | coreNum | 否 | 核心數量,該參數值越大,算法運行越快。 | 系統自動分配 |
memSizePerCore | 否 | 每個核心使用的內存,單位為MB。 | 系統自動分配 |
示例
使用ODPS SQL節點執行如下SQL語句,生成訓練數據(以Dense格式數據為例)。
drop table if exists smart_binary_input; create table smart_binary_input lifecycle 3 as select * from ( select 0.72 as f0, 0.42 as f1, 0.55 as f2, -0.09 as f3, 1.79 as f4, -1.2 as f5, 0 as label union all select 1.23 as f0, -0.33 as f1, -1.55 as f2, 0.92 as f3, -0.04 as f4, -0.1 as f5, 1 as label union all select -0.2 as f0, -0.55 as f1, -1.28 as f2, 0.48 as f3, -1.7 as f4, 1.13 as f5, 1 as label union all select 1.24 as f0, -0.68 as f1, 1.82 as f2, 1.57 as f3, 1.18 as f4, 0.2 as f5, 0 as label union all select -0.85 as f0, 0.19 as f1, -0.06 as f2, -0.55 as f3, 0.31 as f4, 0.08 as f5, 1 as label union all select 0.58 as f0, -1.39 as f1, 0.05 as f2, 2.18 as f3, -0.02 as f4, 1.71 as f5, 0 as label union all select -0.48 as f0, 0.79 as f1, 2.52 as f2, -1.19 as f3, 0.9 as f4, -1.04 as f5, 1 as label union all select 1.02 as f0, -0.88 as f1, 0.82 as f2, 1.82 as f3, 1.55 as f4, 0.53 as f5, 0 as label union all select 1.19 as f0, -1.18 as f1, -1.1 as f2, 2.26 as f3, 1.22 as f4, 0.92 as f5, 0 as label union all select -2.78 as f0, 2.33 as f1, 1.18 as f2, -4.5 as f3, -1.31 as f4, -1.8 as f5, 1 as label ) tmp;
生成的訓練數據如下。
構建如下工作流,并運行組件,詳情請參見算法建模。
在Designer左側組件列表中,分別搜索讀數據表組件、PS-SMART二分類訓練組件、預測組件、寫數據表組件,并拖入右側畫布中。
參照上圖,通過連線的方式,將各個節點組織構建成為一個有上下游關系的工作流。
配置組件參數。
在畫布中單擊讀數據表-1組件,在右側表選擇頁簽,配置表名為smart_binary_input。
在畫布中單擊PS-SMART二分類訓練-1組件,在右側配置如下表中的參數,其余參數使用默認值。
頁簽
參數
描述
字段設置
特征列
選擇f0、f1、f2、f3、f4、及f5列。
標簽列
選擇label列。
參數設置
評估指標類型
選擇Area under curve for classification。
樹數量
輸入5。
在畫布中單擊預測-1組件,在右側字段設置頁簽,選擇原樣輸出列為全選。其余參數使用默認值。
在畫布中單擊寫數據表-1組件,在右側表選擇頁簽,配置寫入表表名為smart_binary_output。
參數配置完成后,單擊運行按鈕,運行工作流。
右鍵單擊預測-1組件,在快捷菜單中,選擇1表示正例,0表示負例。
,查看預測結果。其中prediction_detail列的右鍵單擊PS-SMART二分類訓練-1組件,在快捷菜單,選擇
,查看特征重要性表。其中:id:表示傳入的特征序號。因為該示例傳入的特征為f0、f1、f2、f3、f4及f5,所以id列的0表示f0特征列,id列的4表示f4特征列。如果輸入數據是KV格式,則id列表示KV中的key。
value:表示特征重要性類型,默認為gain,即該特征對模型帶來的信息增益之和。
該特性重要性表中僅有3個特性,表示樹在分裂過程中僅使用了這三個特性,可以認為其他特性的特征重要性為0。
PS-SMART模型部署說明
如果您需要將PS-SMART組件生成的模型部署為在線服務,您需要在該組件的下游接入通用模型導出組件,并按照PS系列組件的使用方式配置組件參數,詳情請參見通用模型導出。
組件運行成功后,您可以前往PAI EAS模型在線服務頁面,部署模型服務,詳情請參見服務部署:控制臺。
相關文檔
關于Designer組件更詳細的內容介紹,請參見Designer概述。
Designer預置了多種算法組件,你可以根據不同的使用場景選擇合適的組件進行數據處理,詳情請參見組件參考:所有組件匯總。