目录

0. 相关文章链接

1. 概述

2. 实例

3. 代码演示


0. 相关文章链接

算法文章汇总

1. 概述

ChiSqSelector代表Chi-Squared特性选择。 它对具有分类特征的标记数据进行操作。 ChiSqSelector使用独立的卡方检验来决定选择哪些特性。 它支持五种选择方法:numTopFeatures, percentile, fpr, fdr, fwe:

  • numTopFeatures:根据卡方测试选择固定数量的顶级特征。 这类似于生成具有最强大预测能力的特征。

  • perentile:类似于numTopFeatures,只是选择所有特性的一部分,而不是一个固定的数字。

  • fpr: 选择所有p值低于阈值的特征,从而控制了选择的误报率。

  • fdr: 使用Benjamini-Hochberg程序来选择所有错误发现率低于阈值的特征。

  • fwe :选择所有p值小于阈值的特征。 阈值按1/numFeatures缩放,从而控制了选择的家庭式错误率。 默认情况下,选择方法是numTopFeatures,顶级特性的默认数量设置为50。 用户可以使用setSelectorType选择一个选择方法。

2. 实例

假设我们有一个DataFrame,列id,特征,点击,这是我们要预测的目标:

id | features              | clicked
---|-----------------------|---------
 7 | [0.0, 0.0, 18.0, 1.0] | 1.0
 8 | [0.0, 1.0, 12.0, 0.0] | 0.0
 9 | [1.0, 0.0, 15.0, 0.1] | 0.0

如果我们使用ChiSqSelector和numTopFeatures = 1,那么根据我们点击的标签,我们的特性中最后一列被选为最有用的特性:

id | features              | clicked | selectedFeatures
---|-----------------------|---------|------------------
 7 | [0.0, 0.0, 18.0, 1.0] | 1.0     | [1.0]
 8 | [0.0, 1.0, 12.0, 0.0] | 0.0     | [0.0]
 9 | [1.0, 0.0, 15.0, 0.1] | 0.0     | [0.1]

3. 代码演示

object FeatureSelectorsChiSqSelector {

    def main(args: Array[String]): Unit = {

        // 创建运行环境
        val spark: SparkSession = SparkSession
            .builder()
            .appName("FeatureSelectorsVectorSlicer")
            .master("local[*]")
            .getOrCreate()


        val data = Seq(
            (7, Vectors.dense(0.0, 0.0, 18.0, 1.0), 1.0),
            (8, Vectors.dense(0.0, 1.0, 12.0, 0.0), 0.0),
            (9, Vectors.dense(1.0, 0.0, 15.0, 0.1), 0.0)
        )

        import spark.implicits._
        val df = spark.createDataset(data).toDF("id", "features", "clicked")

        val selector = new ChiSqSelector()
            .setNumTopFeatures(2)
            .setFeaturesCol("features")
            .setLabelCol("clicked")
            .setOutputCol("selectedFeatures")

        val result = selector.fit(df).transform(df)

        /*
            +---+------------------+-------+----------------+
            | id|          features|clicked|selectedFeatures|
            +---+------------------+-------+----------------+
            |  7|[0.0,0.0,18.0,1.0]|    1.0|      [18.0,1.0]|
            |  8|[0.0,1.0,12.0,0.0]|    0.0|      [12.0,0.0]|
            |  9|[1.0,0.0,15.0,0.1]|    0.0|      [15.0,0.1]|
            +---+------------------+-------+----------------+
         */
        println(s"ChiSqSelector output with top ${selector.getNumTopFeatures} features selected")
        result.show()

    }
}

注:其他相关文章链接由此进 -> 算法文章汇总


Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐