Spark ML基本算法【ChiSquareTest卡方检验】

    技术2022-08-12  99

    一.简介

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