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]| +---+------+------+---+---------+-----------------+-----------------+
实际应用例子:
评估特征对标签影响的粒度,并选择合适的特征。
相关文章推荐
- ChiSqSelector-卡方检验选择特征
- Spark MLlib编程API入门系列之特征选择之卡方特征选择(ChiSqSelector)
- SparkML中三种特征选择算法(VectorSlicer/RFormula/ChiSqSelector)
- android 背景选择器selector
- Android 中 selector 选择器的使用
- OC 中方法名为什么被称作选择器(selector)?
- android的selector,背景选择器
- 浅谈android的selector背景选择器
- Android中多图片选择器PhotoPicker库的使用(仿微信,秒杀MultiImageSelector)
- 强大的原生DOM选择器querySelector和querySelectorAll
- 背景选择器selector替换按钮默认背景
- 浅谈android的selector背景选择器
- 浅谈android的selector,背景选择器
- 浅谈android的selector背景选择器
- Android 仿微信的图片选择器ImageSelector的使用
- 浅谈android的selector背景选择器
- android中的selector背景选择器的用法
- Android开发之状态选择器(selector)详解
- selector背景选择器文字选择器
- Android开发中selector状态选择器常用属性解析