机器学习的特征选择(feature selection)

写在开头:刚开始接触机器学习,选择了周志华教授的《机器学习》作为入门教材,很不错的书籍,受益良多。没有使用matlab去编写代码,而是选择了使用python的scikit-learn的开发包,大致看了一下开发包的特征选择方法,结合周志华教授的书,想先总结总结feature selection的方法

特征选择

filter(过滤式)

思路

通过评估自变量与目标变量之间的关联,也就是量化两者之间的关系,我们暂且叫做量化值为“相关统计量”,然后根据相关统计量,找出相关性较强的k个自变量。

如何量化两者的关联

通常有相关系数,卡方检验,信息增益,和互信息

结合scikit-learn

1.Removing features with low variance
移除变量中变化较小的,一般用于自变量为离散型时,某个变量在n个样本中取相同的值的频率大于既定的阈值的时候,我们直接删除
2.Univariate feature selection
单变量特征选择,其中涉及到的函数最主要的两个是SelectKBest,SelectPercentile,一个选择前k个,一个选择前k%个。其中涉及到的量化方式主要有:chi2(卡方检验),f_classif,f_regression前两个用于分类,后一个用于回归。
还有几个看不懂的SelectFpr,SelectFdr,SelectFwe还没用到就没有深究。

wrapper(包裹式)

思路

直接将原始数据拿去训练,然后评估其性能,在选择其所有子集,递归着不断重复,直到最后找到性能最好的特征子集。

如何产生特征子集

通常使用的方法有,完全搜索,启发式搜索,随机搜索。

结合scikit-learn

1.Recursive feature elimination(RFE算法)
递归特征估计,类似与启发式搜索,产生特征子集。

First, the estimator is trained on the initial set of features and weights are assigned to each one of them. Then, features whose absolute weights are the smallest are pruned from the current set features. That procedure is recursively repeated on the pruned set until the desired number of features to select is eventually reached.

也就是说一开始使用一个选择器在原始数据上面训练,然后除掉权重最小的那个特征,然后继续递归训练,直到剩下的特征满足要求的时候结束。有点贪心思想的意味在里面。
RFE算法一般要控制筛选之后的特征的数目,不一定是最优的
2.RFECV算法是结合交叉验证的RFE,会通过调查验证的方式,去寻找最优的特征数目。

embedding(嵌入式)

思路

学习器自身就具有特征选择的能力

常见的选择器

lasso,引入l1正则化项;ridge regression,引入l2正则化项;决策树的算法,通过信息增益和信息熵等方式,一边筛选,一边建模。

结合scikit-learn

  1. Feature selection using SelectFromModel
    从模型中实现特征选择,其中需要注意的就是其中prefit参数的设置

    Whether a prefit model is expected to be passed into the constructor directly or not. If True, transform must be called directly and SelectFromModel cannot be used with cross_val_score, GridSearchCV and similar utilities that clone the estimator. Otherwise train the model using fit and then transform to do feature selection.

    也就是prefit如果为true,模型就直接训练好了,不用显示的去调用 fit函数,也就是不能使用cross_val_score和GirdSearchCV这些并行验证的方式了(这两个我还没有看到,应该是交叉验证之类的在拟合过程中使用到的函数)
    当然也还有estimator变量,要求

    estimator that has a coef_ or feature_importances_ attribute after fitting.

    用于筛选特征。其他的可以多看看开发文档

  2. Feature selection as part of a pipeline
    这个感觉还没怎么看懂,看起来不难,等懂了再补充。

最后

刚开始做机器学习,这篇文章也只是第一篇,写出来希望大家能一起学习。非监督的还没接触,所以没有涉及,之后再补充!有错的欢迎大家指出,一起进步!——2016.11.30

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值