全部產品
Search
文件中心

Platform For AI:PS-SMART多分類

更新時間:Jul 13, 2024

參數伺服器PS(Parameter Server)致力於解決大規模的離線及線上訓練任務,SMART(Scalable Multiple Additive Regression Tree)是GBDT(Gradient Boosting Decision Tree)基於PS實現的迭代演算法。PS-SMART支援百億樣本及幾十萬特徵的訓練任務,可以在上千節點中運行。同時,PS-SMART支援多種資料格式及長條圖近似等最佳化技術。

使用限制

PS-SMART多分類組件的輸入資料需要滿足以下要求:

  • PS-SMART多分類組件的目標列僅支援數實值型別。如果MaxCompute表資料是STRING類型,則需要進行類型轉換。例如,分類目標是Good/Medium/Bad字串,需要轉換為0/1/2

  • 如果資料是KV格式,則特徵ID必須為正整數,特徵值必須為實數。如果特徵ID為字串類型,則需要使用序列化組件進行序列化。如果特徵值為類型字串,需要進行特徵離散化等特徵工程處理。

  • 雖然PS-SMART多分類組件支援數十萬特徵任務,但是消耗資源大且運行速度慢,可以使用GBDT類演算法進行訓練。GBDT類演算法適合直接使用連續特徵進行訓練,除需要對類別特徵進行One-Hot編碼(篩除低頻特徵)外,不建議對其他連續型數值特徵進行離散化。

  • PS-SMART演算法會引入隨機性。例如,data_sample_ratiofea_sample_ratio表示的資料和特徵採樣、演算法使用的長條圖近似最佳化及局部Sketch歸併為全域Sketch的順序隨機性。雖然多個Worker分布式執行時,樹結構不同,但是從理論上可以保證模型效果相近。如果您在訓練過程中,使用相同資料和參數,多次得到的結果不一致,屬於正常現象。

  • 如果需要加速訓練,可以增大計算核心數。因為PS-SMART演算法需要所有伺服器獲得資源後,才能開始訓練,所以叢集忙碌時,申請較多資源會增加等待時間。

注意事項

使用PS-SMART多分類組件時,需要注意以下事宜:

  • 雖然PS-SMART多分類組件支援數十萬特徵任務,但是消耗資源大且運行速度慢,可以使用GBDT類演算法進行訓練。GBDT類演算法適合直接使用連續特徵進行訓練,除需要對類別特徵進行One-Hot編碼(篩除低頻特徵)外,不建議對其他連續型數值特徵進行離散化。

  • PS-SMART演算法會引入隨機性。例如,data_sample_ratiofea_sample_ratio表示的資料和特徵採樣、演算法使用的長條圖近似最佳化及局部Sketch歸併為全域Sketch的順序隨機性。雖然多個Worker分布式執行時,樹結構不同,但是從理論上可以保證模型效果相近。如果您在訓練過程中,使用相同資料和參數,多次得到的結果不一致,屬於正常現象。

  • 如果需要加速訓練,可以增大計算核心數。因為PS-SMART演算法需要所有伺服器獲得資源後,才能開始訓練,所以叢集忙碌時,申請較多資源會增加等待時間。

組件配置

您可以使用以下任意一種方式,配置PS-SMART多分類組件參數。

方式一:可視化方式

Designer工作流程頁面配置組件參數。

頁簽

參數

描述

欄位設定

是否稀疏格式

稀疏格式的KV之間使用空格分隔,keyvalue之間使用英文冒號(:)分隔。例如1:0.3 3:0.9

選擇特徵列

輸入表中,用於訓練的特徵列。如果輸入資料是Dense格式,則只能選擇數值(BIGINT或DOUBLE)類型。如果輸入資料是Sparse KV格式,且keyvalue是數實值型別,則只能選擇STRING類型。

選擇標籤列

輸入表的標籤列,支援STRING類型。如果是內部列儲存,則內容僅支援數實值型別。例如二分類中的0和1。

選擇權重列

列可以對每行樣本進行加權,支援數實值型別。

參數設定

類別數

多分類的類別數量。如果類別數n,則標籤列的取值為{0,1,2,...,n-1}

評估指標類型

支援multiclass negative log likelihoodmulticlass classification error類型。

樹數量

需要配置為樹數量,正整數,樹數量和訓練時間成正比。

樹最大深度

預設值為5,即最多32個葉子節點。

資料採樣比例

構建每棵樹時,採樣部分資料進行學習,構建弱學習器,從而加快訓練。

特徵採樣比例

構建每棵樹時,採樣部分特徵進行學習,構建弱學習器,從而加快訓練。

L1懲罰項係數

控制葉子節點大小。該參數值越大,葉子節點規模分布越均勻。如果過擬合,則增大該參數值。

L2懲罰項係數

控制葉子節點大小。該參數值越大,葉子節點規模分布越均勻。如果過擬合,則增大該參數值。

學習速率

取值範圍為(0,1)

近似Sketch精度

構造Sketch的切割分位點閾值。該參數值越小,獲得的桶越多。一般使用預設值0.03,無需手動設定。

最小分裂損失變化

分裂節點所需要的最小損失變化。該參數值越大,分裂越保守。

特徵數量

特徵數量或最大特徵ID。如果需要估計使用資源,則必須手動設定該參數。

全域偏置項

所有樣本的初始預測值。

隨機數產生器種子

隨機數種子,整型。

特徵重要性類型

支援模型中,該特徵做為分裂特徵的次數模型中,該特徵帶來的資訊增益模型中,該特徵在分裂節點覆蓋的樣本數類型。

執行調優

核心數

預設為系統自動分配。

每個核的記憶體大小

單個核心使用的記憶體,單位為MB。通常無需手動設定,系統自動分配。

方式二:PAI命令方式

使用PAI命令方式,配置該組件參數。您可以使用SQL指令碼組件進行PAI命令調用,詳情請參見SQL指令碼

#訓練。
PAI -name ps_smart
    -project algo_public
    -DinputTableName="smart_multiclass_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="features"
    -DenableSparse="true"
    -Dobjective="multi:softprob"
    -Dmetric="mlogloss"
    -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_multiclass_input";
    -DmodelName="xlab_m_pai_ps_smart_bi_545859_v0"
    -DoutputTableName="pai_temp_24515_545860_1"
    -DfeatureColNames="features"
    -DappendColNames="label,features"
    -DenableSparse="true"
    -DkvDelimiter=":"
    -Dlifecycle="28"

模組

參數

是否必選

描述

預設值

資料參數

featureColNames

輸入表中,用於訓練的特徵列。如果輸入表是Dense格式,則只能選擇數值(BIGINT或DOUBLE)類型。如果輸入表是Sparse KV格式,且KV格式中keyvalue是數實值型別,則只能選擇STRING類型。

labelColName

輸入表的標籤列,支援STRING及數實值型別。如果是內部儲存,則僅支援數實值型別。例如多分類的{0,1,2,…,n-1},其中n表示類別數量。

weightCol

列可以對每行樣本進行加權,支援數實值型別。

enableSparse

是否為稀疏格式,取值範圍為{true,false}。稀疏格式的KV之間使用空格分隔,keyvalue之間使用英文冒號(:)分隔。例如1:0.3 3:0.9

false

inputTableName

輸入表的名稱。

modelName

輸出的模型名稱。

outputImportanceTableName

輸出特徵重要性的表名。

inputTablePartitions

格式為ds=1/pt=1

outputTableName

輸出至MaxCompute的表,二進位格式,不支援讀取,只能通過SMART的預測組件擷取。

lifecycle

輸出表的生命週期。

3

演算法參數

classNum

多分類的類別數量。如果類別數量為n,則標籤列取值為{0,1,2,...,n-1}

objective

目標函數類型。如果進行多分類訓練,則選擇multi:softprob

metric

訓練集的評估指標類型,輸出在Logview檔案Coordinator地區的stdout。支援以下類型:

  • mlogloss:對應可視化方式的multiclass negative log likelihood類型。

  • merror:對應可視化方式中的multiclass classification error類型。

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。如果需要估計使用資源,則必須手動設定該參數。

baseScore

所有樣本的初始預測值。

0.5

randSeed

隨機數種子,整型。

featureImportanceType

計算特徵重要性的類型,包括:

  • weight:在模型中,該特徵作為分裂特徵的次數。

  • gain:在模型中,該特徵帶來的資訊增益。

  • cover:在模型中,該特徵在分裂節點覆蓋的樣本數。

gain

調優參數

coreNum

核心數量,該參數值越大,演算法運行越快。

系統自動分配

memSizePerCore

每個核心使用的記憶體,單位為MB。

系統自動分配

樣本

  1. 使用開發ODPS SQL任務建立表smart_multiclass_input。以KV格式資料為例,命令如下。

    drop table if exists smart_multiclass_input;
    create table smart_multiclass_input lifecycle 3 as
    select
    *
    from
    (
    select '2' as label, '1:0.55 2:-0.15 3:0.82 4:-0.99 5:0.17' as features 
        union all
    select '1' as label, '1:-1.26 2:1.36 3:-0.13 4:-2.82 5:-0.41' as features 
        union all
    select '1' as label, '1:-0.77 2:0.91 3:-0.23 4:-4.46 5:0.91' as features 
        union all
    select '2' as label, '1:0.86 2:-0.22 3:-0.46 4:0.08 5:-0.60' as features 
        union all
    select '1' as label, '1:-0.76 2:0.89 3:1.02 4:-0.78 5:-0.86' as features 
        union all
    select '1' as label, '1:2.22 2:-0.46 3:0.49 4:0.31 5:-1.84' as features 
        union all
    select '0' as label, '1:-1.21 2:0.09 3:0.23 4:2.04 5:0.30' as features 
        union all
    select '1' as label, '1:2.17 2:-0.45 3:-1.22 4:-0.48 5:-1.41' as features 
        union all
    select '0' as label, '1:-0.40 2:0.63 3:0.56 4:0.74 5:-1.44' as features 
        union all
    select '1' as label, '1:0.17 2:0.49 3:-1.50 4:-2.20 5:-0.35' as features 
    ) tmp;

    產生的資料如下。PS-smart輸入資料

  2. 構建如下工作流程,詳情請參見演算法建模image

  3. 配置組件參數。

    1. 單擊讀資料表-1組件,在右側表選擇頁簽中,配置表名為smart_multiclass_input。

    2. 配置PS-SMART多分類-1組件的參數(配置如下表格中的參數,其餘參數使用預設值)。

      頁簽

      參數

      描述

      欄位設定

      特徵列

      選擇features列。

      標籤列

      選擇label列。

      是否稀疏格式

      選中是否稀疏格式複選框。

      參數設定

      類別數

      輸入3

      評估指標類型

      選擇multiclass negative log likelihood

      樹數量

      輸入5

    3. 配置預測-1組件的參數(配置如下表格中的參數,其餘參數使用預設值)。

      頁簽

      參數

      描述

      欄位設定

      特徵列

      選擇features列。

      原樣輸出資料行

      選擇label列和features列。

      疏鬆陣列

      選中疏鬆陣列複選框。

      key與value分隔字元

      輸入半形冒號(:)。

      kv對間的分隔字元

      使用空格作為分隔字元,留空即可。

    4. 單擊寫資料表-1組件,在右側表選擇頁簽中,配置寫入表表名為smart_multiclass_output。

  4. 單擊畫布中的運行按鈕image,運行工作流程。

  5. 工作流程執行成功後,按右鍵預測-1組件,在捷徑功能表中,選擇查看資料 > 預測結果輸出,查看統一預測組件的預測結果。image其中:

    • prediction_detail列中的012表示多分類的類別。

    • predict_result列表示預測的結果類別。

    • predict_score列表示預測為predict_result類別的機率。

  6. 按右鍵PS-SMART多分類-1組件,在捷徑功能表中,選擇查看資料 > 輸出特徵重要性表,查看特徵重要性。

    image其中:

    • id列表示傳入的特徵序號。因為該樣本的輸入資料是KV格式,所以id列表示KV對中的key

    • value列表示特徵重要性類型,預設為gain,即該特徵對模型帶來的資訊增益之和。

PS-SMART模型部署說明

如果您需要將PS-SMART組件產生的模型部署為線上服務,您需要在該組件的下遊接入通用模型匯出組件,並按照PS系列組件的使用方式配置組件參數,詳情請參見通用模型匯出

組件運行成功後,您可以前往PAI EAS模型線上服務頁面,部署模型服務,詳情請參見服務部署:控制台