一.简介
假设检验是一种强大的统计工具,可用来确定结果是否具有统计学意义,以及该结果是否偶然发生。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
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:处理逻辑比较复杂,可以认为是越大分类价值越高,越小分类价值越低。