正態檢驗是一種用於判斷觀測資料是否來自常態分佈總體的統計方法,是擬合優度檢驗中的一種重要形式。常用的正態性檢驗方法包括Anderson-Darling檢驗、Kolmogorov-Smirnov檢驗和QQ圖檢驗等。通過這些檢驗,可以評估資料集的分布特性,從而為後續的統計分析和建模提供依據。
演算法說明
正態檢驗組件由Anderson-Darling Test、Kolmogorov-Smirnov Test和QQ圖檢驗方法組成,您可以選擇一種或多種檢驗方法。
Anderson-Darling檢驗:Anderson-Darling檢驗是一個增強擬合優度檢驗方法,專註於分布尾部的差異,通過加權累積分布函數的平方差異來評估樣本資料與特定理論分布的一致性。
Kolmogorov-Smirnov檢驗:Kolmogorov-Smirnov檢驗是一種非參數統計方法,用於比較樣本分布與參考分布或兩個樣本分布之間的差異,通過計算最大累積分布差異來評估分布的擬合優度。
QQ圖檢驗:QQ圖檢驗是一種圖形化診斷工具,用於直觀地比較樣本分布與理論分布或兩個樣本分布之間的相似性,通過分位元的對比來揭示分布偏差。
配置組件
方式一:可視化方式
在Designer工作流程頁面添加正態檢驗組件,並在介面右側配置相關參數:
參數類型 | 參數 | 描述 |
欄位設定 | 選擇欄位列 | 選擇用於執行正態性檢驗的欄位列。 |
參數設定 | Anderson-Darling檢驗 | 是否進行Anderson-Darling檢驗。 |
Kolmogorov-Smirnov檢驗 | 是否進行Kolmogorov-Smirnov檢驗。 | |
使用QQ圖 | 是否進行QQ圖檢驗。 | |
執行調優 | 計算的核心數 | 計算的核心數,取值為正整數。 |
每個核心的記憶體(MB) | 每個核心的記憶體。 |
方式二:PAI命令方式
使用PAI命令配置正態檢驗組件參數。您可以使用SQL指令碼組件進行PAI命令調用,詳情請參見情境4:在SQL指令碼組件中執行PAI命令。
PAI -name normality_test
-project algo_public
-DinputTableName=test
-DoutputTableName=test_out
-DselectedColNames=col1,col2
-Dlifecycle=1;
參數 | 是否必選 | 預設值 | 描述 |
inputTableName | 是 | 無 | 輸入表的名稱。 |
outputTableName | 是 | 無 | 輸出表名稱列表。 |
selectedColNames | 否 | 無 | 輸入表選擇列名類型。支援選擇多列,類型為DOUBLE或BIGINT。 |
inputTablePartitions | 否 | ”” | 輸入表分區名稱。 |
enableQQplot | 否 | true | 是否進行QQ圖檢驗。 |
enableADtest | 否 | true | 是否進行Anderson-Darling檢驗。 |
enableKStest | 否 | true | 是否進行Kolmogorov-Smirnov檢驗。 |
lifecycle | 否 | -1 | 指定輸出表的生命週期。取值為整數,且≥-1。當為預設值-1時,表示不設定生命週期。 |
coreNum | 否 | -1 | 與參數memSizePerCore配對使用,取值為正整數。當為預設值-1時,系統會根據輸入資料量計算所取instance的數量。 |
memSizePerCore | 否 | -1 | 單個節點記憶體大小,單位MB。取值為正整數,範圍為(100, 64*1024)。當為預設值-1時,系統會根據輸入資料量計算所需記憶體大小。 |
使用樣本
添加SQL指令碼組件,去勾選使用Script模式和是否由系統添加Create Table語句,並在SQL指令碼中輸入以下SQL語句。
drop table if exists normality_test_input; create table normality_test_input as select * from ( select 1 as x union all select 2 as x union all select 3 as x union all select 4 as x union all select 5 as x union all select 6 as x union all select 7 as x union all select 8 as x union all select 9 as x union all select 10 as x ) tmp;
添加SQL指令碼組件,去勾選使用Script模式和是否由系統添加Create Table語句,在SQL指令碼中輸入以下PAI命令,並將步驟 1和步驟 2的組件進行連線。
drop table if exists ${o1}; PAI -name normality_test -project algo_public -DinputTableName=normality_test_input -DoutputTableName=${o1} -DselectedColNames=x -Dlifecycle=1;
單擊左上方,運行工作流程。
待運行結束,按右鍵步驟 2的組件,選擇查看資料 > SQL指令碼的輸出,查看訓練結果。
| colname | testname | testvalue | pvalue | | ------- | ----------------------- | ------------------- | ------------------ | | x | | 1.0 | 0.8173291742279805 | | x | | 2.0 | 2.470864450785345 | | x | | 3.0 | 3.5156067948020056 | | x | | 4.0 | 4.3632330349313095 | | x | | 5.0 | 5.128868067945126 | | x | | 6.0 | 5.871131932054874 | | x | | 7.0 | 6.6367669650686905 | | x | | 8.0 | 7.4843932051979944 | | x | | 9.0 | 8.529135549214654 | | x | | 10.0 | 10.182670825772018 | | x | Anderson_Darling_Test | 0.1411092332197832 | 0.9566579606430077 | | x | Kolmogorov_Smirnov_Test | 0.09551932503797644 | 0.9999888659426232 |