特征选择1:过滤法1~方差过滤
作者:互联网
概述:
1.过滤法
全部特征->最佳特征子集->算法->模型评估
- 过滤完全独立于任何机器学习算法
- 根据各种统计检验中的分数以及各种相关性指标来选择特征。
Filter过滤
1.方差过滤
(1).一个特征本身的方差很小,就表示样本在这个特征上基本没有差异,没有区分的作用。
优先消除方差为0的特征。
- Variance Threshold
第一类是标签y 其他全是features~X
一共784行
(2)默认VarianceThreshold()中为方差为0
from sklearn.feature_selection import VarianceThreshold
selector = VarianceThreshold()
#实例化,不填参数默认方差为0
X_var0 = selector.fit_transform(X)
#or X_var0 = VairanceThreshold.fit_transform(X)
#获取删除不合格特征之后的新特征矩阵
(42000, 708)
(3)我们也可以直接告诉Variance Threshod我们需要留下多少特征他会帮我们处理。
import numpy as np
np.median(X.var().values)
1352.286703180131
我们需要留下一半的特征,所以取方差的中位数
X_fsvar = VarianceThreshold(np.median(X.var().values)).fit_transform(X)
#VarianceThreshold()填阈值
X_fsvar
(42000, 392)
(4)当特征是二分类时,特征的取值就是伯努利随机变量,这些变量的方差可以计算为:
Var[X] = p(1-p)
#若特征是伯努利随机变量,假设p=0.8,即二分类特征中某种分类占到80%以上的时候删除特征,中X是特征矩阵。
X_bvar = VarianceThreshold(0.8 * (1 - 0.8)).fit_transform(X)
X_bvar.shape
(5)方差过滤对模型的影响
-
本身计算量大的算法实实在在的减少了很多数据所以有了提升,比如KNN,单棵决策树,SVM,神经网络,回归算法,这样需要遍历和升维的。
-
比如随机森林这样不需要遍历特征的算法,它随机选取特征进行分枝,本身运算就非常快速,因此特征选择对它来说效果平平,只会选取固定数量的特征来建模。
-
仅从算法传统决策树需要遍历所有特征,计算不纯度后进行分枝,
而随机森林却是随机选择特征进行计算和分枝,所以方差过滤对传统决策树有效,对随机森林无效。但是在sklearn中,决策树和随机森林都是随机选择特征进行分枝。 -
但决策树在建模过程中随机抽取的特征数目却远远超过随机森林当中每棵树随机抽取的特征数目(比如说对于这个780维的数据,随机森林每棵树只会抽取10 ~ 20个特征,而决策树可能会抽取300 ~ 400个特征),因此,过滤法对随机森林无用,却对决策树有用也因此。
总结一下,如果过滤掉较多特征如果编号说明是噪音,而少的话影响不大。
被我们过滤掉的特征中有很多都有有效特征,那我们就放弃过滤,使用其他手段来进行特征选择。
只会使用阈值为0或者阈值很小的方差过滤,来为我们优先消除一些明显用不到的特征。
标签:过滤法,方差,特征选择,VarianceThreshold,特征,过滤,随机,决策树 来源: https://blog.csdn.net/weixin_51871375/article/details/120763307