机器学习:特征选择之ChiSqSelector(SparkMLlib中的ChiSqSelector)
目录0. 相关文章链接1. 概述2. 实例3. 代码演示0. 相关文章链接算法文章汇总1. 概述ChiSqSelector代表Chi-Squared特性选择。 它对具有分类特征的标记数据进行操作。 ChiSqSelector使用独立的卡方检验来决定选择哪些特性。 它支持五种选择方法:numTopFeatures, percentile, fpr, fdr, fwe:numTopFeatures:根
目录
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()
}
}
注:其他相关文章链接由此进 -> 算法文章汇总
更多推荐



所有评论(0)