一.簡介
假設檢驗是一種強大的統計工具,可用來確定結果是否具有統計學意義,以及該結果是否偶然發生。spark.ml當前支持Pearson的卡方測試獨立性。
ChiSquareTest針對標籤上的每個功能進行Pearson的獨立性測試。對於每個要素,(要素,標籤)對將轉換爲列聯矩陣,針對該列矩陣計算卡方統計量。所有標籤和特徵值必須是分類的。
二.代碼實戰
package spark2.ml
import org.apache.log4j.{Level, Logger}
import org.apache.spark.ml.linalg.{Vectors}
import org.apache.spark.ml.stat.ChiSquareTest
import org.apache.spark.sql.SparkSession
/**
* Created by Administrator on 2020/6/28.
*/
object MLChiSquareTest {
/**
* 設置日誌級別
*/
Logger.getLogger("org").setLevel(Level.WARN)
def main(args: Array[String]) {
val spark = SparkSession
.builder
.appName(s"${this.getClass.getSimpleName}")
.config("spark.driver.maxResultSize", "2G")
.master("local[2]")
.getOrCreate()
import spark.implicits._
val data = Seq(
(0.0, Vectors.dense(1.0, 1.0, 1.0)),
(0.0, Vectors.dense(1.0, 1.0, 2.0)),
(0.0, Vectors.dense(1.0, 1.0, 3.0)),
(1.0, Vectors.dense(1.0, 3.0, 4.0)),
(1.0, Vectors.dense(1.0, 3.0, 5.0)),
(1.0, Vectors.dense(1.0, 3.0, 6.0))
)
val df = data.toDF("label", "features")
val chi = ChiSquareTest.test(df, "features", "label")
chi.show(false)
}
}
更多源碼:Spark Github
三.執行結果及分析
- pValues:評測值,越大【接近1】代表該特徵列越無意義,對標籤的區分作用越低,反之,越小【接近0】越有區分價值。
- degreeOfFreedom:自由度,degreeOfFreedom+1等價於該特徵值的種類。
- statistics:處理邏輯比較複雜,可以認爲是越大分類價值越高,越小分類價值越低。