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

不管现实多么惨不忍睹,都要持之以恒地相信,这只是黎明前短暂的黑暗而已。不要惶恐眼前的难关迈不过去,不要担心此刻的付出没有回报,别再花时间等待天降好运。真诚做人,努力做事!你想要的,岁月都会给你。机器学习中的特征选择问题,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

转载自: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)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/162964.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!