PageRank演算法用于衡量網頁的重要性。它通過分析超連結,認為連結到某網頁的數量和品質可以表明該網頁的重要性。網頁獲得的連結越多,它的排名越高,同時,連結來源的權重也會影響最終的PageRank分數。PageRank組件能夠輸出各節點的權重。
演算法說明
PageRank演算法是一種基於連結分析的方法,用於評估網頁的相對重要性。核心原則如下:
如果一個網頁被眾多其他網頁所連結,那麼它通常被認為是更重要或品質更高的資源。
演算法不僅計算指向該網頁的連結數量,還考慮了每個連結網頁本身的權重,即這些網頁本身的PageRank值,以及它們指向其他網頁的連結數。
在使用者構成的社交網路中,PageRank理念同樣適用。使用者的影響力不僅由其個人屬性決定,也受到其社交聯絡的品質的影響。例如,在新浪微博中,一個使用者對其粉絲群體的影響力會受到和粉絲之間關係密切程度的影響,與使用者關係較親近的家人、同學、同事等通常會受到更大的影響。在這種人際網路模型中,邊的權重反映了使用者之間關係的親密程度,被視作關係強度的指標。
帶連結權重的PageRank公式為:
W(i):節點i的權重。
C(Ai):連結權重。
d:阻尼係數。
W(A):演算法迭代穩定後的節點權重,即每個使用者的影響力指數。
配置組件
方法一:可視化方式
在Designer工作流程頁面添加PageRank組件,並在介面右側配置相關參數:
參數類型 | 參數 | 描述 |
欄位設定 | 選擇源頂點列 | 邊表的起點所在列。 |
選擇目標頂點列 | 邊表的終點所在列。 | |
選擇邊權值列 | 邊表邊的權重所在列。 | |
參數設定 | 最大迭代次數 | 演算法自身會收斂並停止迭代,預設值為30。 |
阻尼係數 | 在任意時刻,使用者到達某網頁後並繼續向後瀏覽的機率。 | |
執行調優 | 進程數 | 作業並存執行的節點數。數字越大並行度越高,但是架構通訊開銷會增大。 |
進程記憶體 | 單個作業可使用的最大記憶體量,單位:MB,預設值為4096。 如果實際使用記憶體超過該值,會拋出 |
方法二:PAI命令方式
使用PAI命令配置PageRank組件參數。您可以使用SQL指令碼組件進行PAI命令調用,詳情請參見情境4:在SQL指令碼組件中執行PAI命令。
PAI -name PageRankWithWeight
-project algo_public
-DinputEdgeTableName=PageRankWithWeight_func_test_edge
-DfromVertexCol=flow_out_id
-DtoVertexCol=flow_in_id
-DoutputTableName=PageRankWithWeight_func_test_result
-DhasEdgeWeight=true
-DedgeWeightCol=weight
-DmaxIter 100;
參數 | 是否必選 | 預設值 | 描述 |
inputEdgeTableName | 是 | 無 | 輸入邊表名。 |
inputEdgeTablePartitions | 否 | 全表讀入 | 輸入邊表的分區。 |
fromVertexCol | 是 | 無 | 輸入邊表的起點所在列。 |
toVertexCol | 是 | 無 | 輸入邊表的終點所在列。 |
outputTableName | 是 | 無 | 輸出表名。 |
outputTablePartitions | 否 | 無 | 輸出表的分區。 |
lifecycle | 否 | 無 | 輸出表的生命週期。 |
workerNum | 否 | 未設定 | 作業並存執行的節點數。數字越大並行度越高,但是架構通訊開銷會增大。 |
workerMem | 否 | 4096 | 單個作業可使用的最大記憶體量,單位:MB,預設值為4096。 如果實際使用記憶體超過該值,會拋出 |
splitSize | 否 | 64 | 資料切分的大小,單位:MB。 |
hasEdgeWeight | 否 | false | 輸入邊表的邊是否有權重。 |
edgeWeightCol | 否 | 無 | 輸入邊表邊的權重所在列。 |
maxIter | 否 | 30 | 最大迭代次數。 |
使用樣本
添加SQL指令碼組件,去勾選使用Script模式和是否由系統添加Create Table語句,並在SQL指令碼中輸入以下SQL語句。
drop table if exists PageRankWithWeight_func_test_edge; create table PageRankWithWeight_func_test_edge as select * from ( select 'a' as flow_out_id,'b' as flow_in_id,1.0 as weight union all select 'a' as flow_out_id,'c' as flow_in_id,1.0 as weight union all select 'b' as flow_out_id,'c' as flow_in_id,1.0 as weight union all select 'b' as flow_out_id,'d' as flow_in_id,1.0 as weight union all select 'c' as flow_out_id,'d' as flow_in_id,1.0 as weight )tmp;
對應的資料結構圖:
添加SQL指令碼組件,去勾選使用Script模式和是否由系統添加Create Table語句,在SQL指令碼中輸入以下PAI命令,並將步驟 1和步驟 2的組件進行連線。
drop table if exists ${o1}; PAI -name PageRankWithWeight -project algo_public -DinputEdgeTableName=PageRankWithWeight_func_test_edge -DfromVertexCol=flow_out_id -DtoVertexCol=flow_in_id -DoutputTableName=${o1} -DhasEdgeWeight=true -DedgeWeightCol=weight -DmaxIter 100;
單擊左上方,運行工作流程。
待運行結束,按右鍵步驟 2的組件,選擇查看資料 > SQL指令碼的輸出,查看訓練結果。
| node | weight | | ---- | ---------- | | a | 0.12841452 | | b | 0.18299069 | | c | 0.26076174 | | d | 0.42783305 |