您的位置:首页 > 其它

ChiSqSelector (卡方特征选择器)

2019-11-11 18:05 2556 查看

ChiSqSelector (卡方特征选择器)

描述:ChiSqSelector是一个Estimator。

     卡方检验最基本的思想就是通过观察实际值与理论值的偏差来确定理论的正确与否。具体做的时候常常先假设两个变量确实是独立的(行话就叫做“原假设”),然后观察实际值(也可以叫做观察值)与理论值(这个理论值是指“如果两者确实独立”的情况下应该有的值)的偏差程度,如果偏差足够小,我们就认为误差是很自然的样本误差,是测量手段不够精确导致或者偶然发生的,两者确确实实是独立的,此时就接受原假设;如果偏差大到一定程度,使得这样的误差不太可能是偶然产生或者测量不精确所致,我们就认为两者实际上是相关的,即否定原假设,而接受备择假设。

    卡方特征选择来源于统计学中的卡方检验,用来衡量两个变量是否一致。将其用于特征选择中,可根据特征与Label分布相似性来选择特征。

BucketedRandomProjectionLSH
参数信息 参数描述 备注 其他
setFeaturesCol DF中待变换的特征 特征类型必须为:vector 必填项
setOutputCol 变换后的特征名称 转换后的类型为:array[vector] 必填项
setLabelCol String 标签列 必填项
setNumTopFeatures Integer 将原始特征向量(特征数为3)降维(特征数为2) 默认:1
setSelectorType String 选择器类别,枚举值:【numTopFeatures,percentile,fpr】 默认:numTopFeatures
setFpr Double 仅当SelectorType = "fpr" 默认:0.05
setPercentile Double 仅当selectorType = "percentile" 默认:0.1
BucketedRandomProjectionLSHModel
transform (dataset) 预测(转换)数据集 见下文:transform数据结果

程序示例:

//特征名称
var features = Array("weight", "height", "age")
//字段转换成特征向量,并切分为训练集合测试集
var vectorSplitDatas = new VectorAssembler()
.setInputCols(features)
.setOutputCol("vector_features")
.transform(dataFrame.select("id", "weight", "height", "age", "qualified"))
.randomSplit(Array(0.8, 0.2))
//使用卡方检验,
val selector = new ChiSqSelector()
.setFeaturesCol("vector_features")       //特征矢量
.setOutputCol("selected_features")       //降维后的特征矢量
.setLabelCol("qualified")                //标签列
.setNumTopFeatures(2)                    //将原始特征向量(特征数为3)降维(特征数为2)
.setSelectorType("numTopFeatures")       //numTopFeatures,percentile,fpr
//.setFpr(0.05)                          //仅当SelectorType = "fpr"
//.setPercentile(0.1)                    //仅当selectorType = "percentile"
//训练模型
var model: ChiSqSelectorModel = selector.fit(vectorSplitDatas.apply(0))
//模型选择的特征
model.selectedFeatures.foreach(item => print(features.apply(item) + ","))
//测试模型
model.transform(vectorSplitDatas.apply(1)).show(10)

保留的特征为:

入模特征:weight, height, age
保留特征:height,age

Transformer数据结果:

+---+------+------+---+---------+-----------------+-----------------+
| id|weight|height|age|qualified|  vector_features|selected_features|
+---+------+------+---+---------+-----------------+-----------------+
|  3|    69|   176| 56|        0|[69.0,176.0,56.0]|     [176.0,56.0]|
| 11|    73|   186| 57|        1|[73.0,186.0,57.0]|     [186.0,57.0]|
| 16|    45|   129| 58|        0|[45.0,129.0,58.0]|     [129.0,58.0]|
| 17|    53|   173| 55|        1|[53.0,173.0,55.0]|     [173.0,55.0]|
| 23|    72|   136| 24|        0|[72.0,136.0,24.0]|     [136.0,24.0]|
| 24|    65|   164| 58|        0|[65.0,164.0,58.0]|     [164.0,58.0]|
| 28|    82|   164| 18|        1|[82.0,164.0,18.0]|     [164.0,18.0]|
| 31|    82|   143| 31|        1|[82.0,143.0,31.0]|     [143.0,31.0]|
| 39|    78|   170| 36|        0|[78.0,170.0,36.0]|     [170.0,36.0]|
| 44|    46|   123| 44|        1|[46.0,123.0,44.0]|     [123.0,44.0]|
+---+------+------+---+---------+-----------------+-----------------+

实际应用例子:

      评估特征对标签影响的粒度,并选择合适的特征。

 

 

 

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: