特征选择方法总结

1、方差筛选法

移除低方差的特征。低方差说明特征比较均匀,区分度低。如,一列数值全为1,则这列数值的方差为0。这一列特征对于训练模型是没有意义的。
使用方差筛选法的代码:

from sklearn.feature_selection import VarianceThreshold

# 6个样本,3维的特征向量
X = [[0, 0, 1], 
     [0, 1, 0], 
     [1, 0, 0], 
     [0, 1, 1], 
     [0, 1, 0], 
     [0, 1, 1]]

# 根据方差.对于布尔值类型的数据,删除80%的值都为1或都为0的特征。所以下面使用0.8
# 由于特征是伯努利随机变量(两个取值),方差计算公式:var_thresh = p(1-p)
df=pd.DataFrame(X,columns=['age','sex','level'])
sel = VarianceThreshold(threshold=(.8 * (1 - .8)))
feature=sel.fit_transform(X)
## feature 的值如下:
array([[0, 1],
       [1, 0],
       [0, 0],
       [1, 1],
       [1, 0],
       [1, 1]])

这里筛选之后,变成了array类型,丢失了特征名称,如果想要知道保留的是哪些特征,可以如下操作

chosed_feat=[]
all_columns=df.columns.tolist()
feat_index=sel.get_support(indices=True)
for i in feat_index:
    chosed_feat.append(all_columns[i])

## chosed_feat 为 ['sex', 'level']

方差分析法可以作为初级的特征筛选方法,一般可以先将阈值设置大一些(如0.95),先删除那些取值过于均匀的特征。

2、基于单变量统计特征进行选择
2.1 使用卡方统计量
import numpy as np
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2

# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target
data=pd.DataFrame(np.array(X),columns=['A','B','C','D'])
print('原始特征:')
print(X.shape)
print(X[:10, :])

# 使用卡方分布选择2个维度的变量
# X_new = SelectKBest(chi2, k=2).fit_transform(X, y)
selector = SelectKBest(chi2, k=2).fit(data, y)
x_new=selector.transform(data)   #fit_transform()就是将fit和transform两个结合起来了
print('选取之后:')
print(x_new[:10])
fea_index=selector.get_support(indices=True) #得到筛选的特征的index

columns=data.columns.tolist() 
fea=[]
for i in fea_index:
    fea.append(columns[i])
print('筛选的特征为:')
print(fea)

结果如下:
在这里插入图片描述
当然,除了卡方(chi),我们也可以使用其他单变量方法。如:
在这里插入图片描述
只需要改变SelectKBest 中的参数就可以了。如我们可以使用户信息方法。

selector = SelectKBest(mutual_info_classif, k=2).fit(data, y)

在这里插入图片描述

参考的博客:
1、特征选择SelectKBest
2、python 特征选择

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值