机器学习中的特征选择问题

转载自:http://blog.sina.com.cn/s/blog_4c9dc2a10102vhp5.html

机器学习中,特征选择是特征工程中的重要问题(另一个重要的问题是特征提取),坊间常说:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。由此可见,特征工程尤其是特征选择在机器学习中占有相当重要的地位。

强烈推荐一篇博文,说如何进行特征选择的:

http://machinelearningmastery.com/discover-feature-engineering-how-to-engineer-features-and-how-to-get-good-at-it/

下面进入正题(一下内容属于半成品,还在修改中.....)

对于一个训练集,每个记录包含两部分,1是特征空间的取值,2是该记录的分类标签

一般情况下,机器学习中所使用特征的选择有两种方式,一是在原有特征基础上创造新特征,比如决策树中信息增益、基尼系数,或者LDA(latent dirichlet allocation)模型中的各个主题,二是从原有特征中筛选出无关或者冗余特征,将其去除后保留一个特征子集。

本文详细说下第二种方法。

一般来说,进行特征集选择有三条途径,filter,wrapper, 所谓filter就是衡量每个特征的重要性,然后对其进行排序,筛选的时候或者选择前N个,或者前%X。

常用于衡量特征重要程度的方法,PCA/FA/LDA(linear discriminal analysis)以及卡方检测/信息增益/相关系数

而wrapper是将子集的选择看作是一个搜索寻优问题,生成不同的组合,对组合进行评价,再与其他的组合进行比较。这样就将子集的选择看作是一个是一个优化问题,这里有很多的优化算法可以解决,比如GA/PSO/DE/ABC[1].

下面举一个例子来说一下特征选择

数据集中的每个特征对于数据集的分类贡献并不一致,以经典iris数据集为例,这个数据集包括四个特征:

sepal length,sepal width,petal length,petal width,

有三个分类,setoka iris,versicolor iris和virginica iris

这四个特征对分类的贡献如下图所示:

机器学习中的特征选择问题

可见,petal width and petal width比sepal length和width在分类上的用处要大得多(因为后者在训练集上的重叠部分太多了,导致不好用于分类)。

下面我们做几个测试,使用四个特征集

第一个:所有特征

Accuracy: 94.44% (+/- 3.51%), all attributes
第二个:两个特征,petal width and petal width,虽然准确率和第一个没区别,但方差变大,也就是说分类性能不稳定
Accuracy: 94.44% (+/- 6.09%), Petal dimensions (column 3 & 4) 使用PCA方法,从新特征中找出权重TOP2的,
Accuracy: 85.56% (+/- 9.69%), PCA dim. red. (n=2) 使用LDA(不是主题模型的LDA)方法,从新特征中找出权重TOP2的,
Accuracy: 96.67% (+/- 4.44%), LDA dim. red. (n=2)

那么我们忍不住问一个问题,是不是选择全部特征集,模型准确率最高,如果不是这样,蛮究竟选择什么样的特征集时准确率最高?

这里有一个图,横轴是所选择的特征数目,纵轴是交叉验证所获得的准确率,从中可以看到,并非选择了全部特征,准确率最高,当少数几个特征就可以得到最高准确率时候,选择的特征越多,反倒画蛇添足了。

机器学习中的特征选择问题

PS两块小内容:(1) 如何进行交叉验证

将数据集分为训练集和验证集,各包含60%和40%的数据。

注意:在训练集上对模型参数进行训练后,用验证集来估计准确率时只能使用一次,如果每次训练模型参数后都使用这个验证集来估计准确率,很容易导致过拟合。

如果我们使用4-fold交叉验证的话,其过程如下,最终错误率取4次的平均值,以表现我们模型的泛化能力。

机器学习中的特征选择问题

(2) 决策树的特征选择汇总:

在决策树部分,三类经典决策树模型的主要区别在于其用于分类的属性不同,也即特征选择不同

ID3:信息增益

C4.5:信息增益率,

附加一句,C4.5之所以用信息增益率,也即gr(D,A)=g(D,A)/H(A),是因为ID3中,所以如果是取值更多的属性, 更容易使得数据更 纯 ”,其信息增益更大,决策树会首先挑选这个属性作为树的顶点。结果训练出来的形状是一棵庞大且深度很浅的树,这样的划分是极为不合理的。而H(A),也即数据D在属性A上的熵值,随着A可取值类型的增加而变大,所以可以用H(A),作为惩罚因子,从而减少取值更多属性的目标函数值,进而避免生成树的深度很浅。

CART :基尼系数

 

主要参考文献:

[1]http://blog.csdn.net/google19890102/article/details/40019271

[2]http://nbviewer.ipython.org/github/gmonce/scikit-learn-book/blob/master/Chapter 4 - Advanced Features - Feature Engineering and Selection.ipynb

[3]http://nbviewer.ipython.org/github/rasbt/pattern_classification/blob/master/machine_learning/scikit-learn/scikit-pipeline.ipynb#Linear-Discriminant-Analysis-(LDA)


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值