全部產品
Search
文件中心

Platform For AI:標籤傳播分類

更新時間:Jul 13, 2024

標籤傳播分類為半監督的分類演算法,原理為用已標記節點的標籤資訊去預測未標記節點的標籤資訊。標籤傳播分類組件能夠輸出圖中所有節點對應的標籤及其權重佔比。

演算法說明

在演算法執行過程中,每個節點的標籤按相似性傳播給相鄰節點,在節點傳播的每一步,每個節點根據相鄰節點的標籤來更新自己的標籤。與該節點相似性越大,其相鄰節點對其標註的影響權值越大,相似節點的標籤越趨於一致,其標籤就越容易傳播。在標籤傳播過程中,保持已標註資料的標籤不變,使其像一個源頭把標籤傳向未標註資料。最終,當迭代過程結束時,相似節點的機率分布也趨於相似,可以劃分到同一個類別中,從而完成標籤傳播過程。

配置組件

方法一:可視化方式

在Designer工作流程頁面添加標籤傳播分類組件,並在介面右側配置相關參數:

參數類型

參數

描述

欄位設定

頂點表:選擇頂點列

點表的點所在列。

頂點表:選擇標籤列

點表的點的標籤所在列。

頂點表:選擇權值列

點表的點的權重所在列。

邊表:選擇源頂點列

邊表的起點所在列。

邊表:選擇目標頂點列

邊表的終點所在列。

邊表:選擇權值列

邊表邊的權重所在列。

參數設定

最大迭代次數

最大迭代次數,預設值為30。

阻尼係數

阻尼係數,預設值為0.8。

收斂係數

收斂係數,預設值為0.000001。

執行調優

進程數

作業並存執行的節點數。數字越大並行度越高,但是架構通訊開銷會增大。

進程記憶體

單個作業可使用的最大記憶體量,單位:MB,預設值為4096。

如果實際使用記憶體超過該值,會拋出OutOfMemory異常。

方法二:PAI命令方式

使用PAI命令配置標籤傳播分類組件參數。您可以使用SQL指令碼組件進行PAI命令調用,詳情請參見情境4:在SQL指令碼組件中執行PAI命令

PAI -name LabelPropagationClassification
    -project algo_public
    -DinputEdgeTableName=LabelPropagationClassification_func_test_edge
    -DfromVertexCol=flow_out_id
    -DtoVertexCol=flow_in_id
    -DinputVertexTableName=LabelPropagationClassification_func_test_node
    -DvertexCol=node
    -DvertexLabelCol=label
    -DoutputTableName=LabelPropagationClassification_func_test_result
    -DhasEdgeWeight=true
    -DedgeWeightCol=edge_weight
    -DhasVertexWeight=true
    -DvertexWeightCol=label_weight
    -Dalpha=0.8
    -Depsilon=0.000001;

參數

是否必選

預設值

描述

inputEdgeTableName

輸入邊表名。

inputEdgeTablePartitions

全表讀入

輸入邊表的分區。

fromVertexCol

輸入邊表的起點所在列。

toVertexCol

輸入邊表的終點所在列。

inputVertexTableName

輸入焦點表名稱。

inputVertexTablePartitions

全表讀入

輸入焦點表的分區。

vertexCol

輸入焦點表的點所在列。

outputTableName

輸出表名。

outputTablePartitions

輸出表的分區。

lifecycle

輸出表的生命週期。

workerNum

未設定

作業並存執行的節點數。數字越大並行度越高,但是架構通訊開銷會增大。

workerMem

4096

單個作業可使用的最大記憶體量,單位:MB,預設值為4096。

如果實際使用記憶體超過該值,會拋出OutOfMemory異常。

splitSize

64

資料切分的大小,單位:MB。

hasEdgeWeight

false

輸入邊表的邊是否有權重。

edgeWeightCol

輸入邊表邊的權重所在列。

hasVertexWeight

false

輸入焦點表的點是否有權重。

vertexWeightCol

輸入焦點表的點的權重所在列。

alpha

0.8

阻尼係數。

epsilon

0.000001

收斂係數。

maxIter

30

最大迭代次數。

使用樣本

  1. 添加SQL指令碼組件,輸入以下SQL語句產生訓練資料。

    drop table if exists LabelPropagationClassification_func_test_edge;
    create table LabelPropagationClassification_func_test_edge as
    select * from
    (
        select 'a' as flow_out_id, 'b' as flow_in_id, 0.2 as edge_weight
        union all
        select 'a' as flow_out_id, 'c' as flow_in_id, 0.8 as edge_weight
        union all
        select 'b' as flow_out_id, 'c' as flow_in_id, 1.0 as edge_weight
        union all
        select 'd' as flow_out_id, 'b' as flow_in_id, 1.0 as edge_weight
    )tmp
    ;
    drop table if exists LabelPropagationClassification_func_test_node;
    create table LabelPropagationClassification_func_test_node as
    select * from
    (
        select 'a' as node,'X' as label, 1.0 as label_weight
        union all
        select 'd' as node,'Y' as label, 1.0 as label_weight
    )tmp;

    對應的資料結構圖:

    image

  2. 添加SQL指令碼組件,輸入以下PAI命令進行訓練。

    drop table if exists ${o1};
    PAI -name LabelPropagationClassification
        -project algo_public
        -DinputEdgeTableName=LabelPropagationClassification_func_test_edge
        -DfromVertexCol=flow_out_id
        -DtoVertexCol=flow_in_id
        -DinputVertexTableName=LabelPropagationClassification_func_test_node
        -DvertexCol=node
        -DvertexLabelCol=label
        -DoutputTableName=${o1}
        -DhasEdgeWeight=true
        -DedgeWeightCol=edge_weight
        -DhasVertexWeight=true
        -DvertexWeightCol=label_weight
        -Dalpha=0.8
        -Depsilon=0.000001;
  3. 右擊上一步的組件,選擇查看資料 > SQL指令碼的輸出,查看訓練結果。

    | node | tag | weight              |
    | ---- | --- | ------------------- |
    | a    | X   | 1.0                 |
    | c    | X   | 0.5370370370370371  |
    | c    | Y   | 0.4629629629629629  |
    | b    | X   | 0.16666666666666666 |
    | b    | Y   | 0.8333333333333333  |
    | d    | Y   | 1.0                 |