WEKA学习笔记-01 特征选择
标签:
文化 |
分类: 大数据-数据挖掘 |
1. 什么是特征选择
特征选择
2. 为什么要做特征选择
在机器学习的实际应用中,特征数量往往较多,其中可能存在不相关的特征,特征之间也可能存在相互依赖,容易导致如下的后果:
-
特征个数越多,分析特征、训练模型所需的时间就越长。
-
特征个数越多,容易引起“维度灾难”,模型也会越复杂,其推广能力会下降。
特征选择能剔除不相关(irrelevant)或亢余(redundant )的特征,从而达到减少特征个数,提高模型精确度,减少运行时间的目的。另一方面,选取出真正相关的特征简化了模型,使研究人员易于理解数据产生的过程。
3. 特征选择评估函数
评价函数的作用是评价产生过程所提供的特征子集的好坏。
评价函数根据其工作原理,主要分为筛选器(Filter)、封装器( Wrapper )两大类。
筛选器通过分析特征子集内部的特点来衡量其好坏。筛选器一般用作预处理,与分类器的选择无关。筛选器的原理如下图3:
http://pic002.cnblogs.com/images/2011/63234/2011090620205673.jpg特征选择" />
图3. Filter原理(Ricardo Gutierrez-Osuna 2008 )
封装器实质上是一个分类器,封装器用选取的特征子集对样本集进行分类,分类的精度作为衡量特征子集好坏的标准。封装器的原理如图4所示。
http://pic002.cnblogs.com/images/2011/63234/2011090620213253.jpg特征选择" />
图4.
Wrapper原理
下面简单介绍常见的评价函数。
(1)
运用相关性来度量特征子集的好坏是基于这样一个假设:好的特征子集所包含的特征应该是与分类的相关度较高(相关度高),而特征之间相关度较低的(亢余度低)。
可以使用线性相关系数(correlation
coefficient)
http://pic002.cnblogs.com/images/2011/63234/2011090620220822.png特征选择" />
(
运用距离度量进行特征选择是基于这样的假设:好的特征子集应该使得属于同一类的样本距离尽可能小,属于不同类的样本之间的距离尽可能远。
常用的距离度量(相似性度量)包括欧氏距离、标准化欧氏距离、马氏距离等。
(3)
假设存在离散变量Y,Y中的取值包括{y1,y2,....,ym}
http://pic002.cnblogs.com/images/2011/63234/2011090620241669.png特征选择" />
信息熵有如下特性:若集合Y的元素分布越“纯”,则其信息熵越小;若Y分布越“紊乱”,则其信息熵越大。在极端的情况下:若Y只能取一个值,即P1=1,则H(Y)取最小值0;反之若各种取值出现的概率都相等,即都是1/m,则H(Y)取最大值log2m。
在附加条件另一个变量X,而且知道X=xi后,Y的条件信息熵(Conditional
Entropy)表示为:
http://pic002.cnblogs.com/images/2011/63234/2011090620245858.png特征选择" />
在加入条件X前后的Y的信息增益定义为http://pic002.cnblogs.com/images/2011/63234/2011090620253263.png特征选择" />
类似的,分类标记C的信息熵H( C )可表示为:http://pic002.cnblogs.com/images/2011/63234/2011090620261033.png特征选择" />将特征Fj用于分类后的分类C的条件信息熵H( C | Fj )表示为:http://pic002.cnblogs.com/images/2011/63234/2011090620265132.png特征选择" />
选用特征Fj前后的C的信息熵的变化成为C的信息增益(Information Gain),用http://pic002.cnblogs.com/images/2011/63234/2011090620273361.png特征选择" />
假设存在特征子集A和特征子集B,分类变量为C,若IG( C|A )
> IG( C|B
)
有一篇博客有详细介绍信息增益的原理的,通俗易懂:http://blog.csdn.net/lixuemei504/article/details/7278748
(4)一致性( Consistency
)
若样本1与样本2属于不同的分类,但在特征A、
(5)分类器错误率
使用特定的分类器,用给定的特征子集对样本集进行分类,用分类的精度来衡量特征子集的好坏。
以上5种度量方法中,相关性、距离、信息增益、一致性属于筛选器,而分类器错误率属于封装器。
筛选器由于与具体的分类算法无关,因此其在不同的分类算法之间的推广能力较强,而且计算量也较小。而封装器由于在评价的过程中应用了具体的分类算法进行分类,因此其推广到其他分类算法的效果可能较差,而且计算量也较大。
4.
WEKA内嵌特征选择算法
特征选择主要
需要设置3个方面,第一:对属性评价的类(自己到Weka软件里看一下,英文Attribute Evaluator),第二:搜索的方式(自己到Weka软件里看一下,英文Search Method),第三:就是你要进行特征选择的数据集了。
方法一:下边使用CFS的特征子集选择方法,配以最佳优先的搜索或者贪心搜索,这样可以将维度比较高的训练特征集降维并简化
10http://www.blogjava.net/Images/OutliningIndicators/None.gif特征选择" />import
18
22http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif特征选择" />public
23http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
24http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
25http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
26http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
27http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
28http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
29http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
30http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
31http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
32http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
33http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif特征选择" />
34http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
35http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
36http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
37http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
38http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
39http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
40http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
41http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
42http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif特征选择" />
43http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
44http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif特征选择" />
45http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
46http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
47http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
48http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
49http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
50http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
51http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
52http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
53http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
54http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
55http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
56http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
57http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif特征选择" />
69http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
70http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
71http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif特征选择" />
72http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
73http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif特征选择" />
74http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif特征选择" />
75http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
76http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif特征选择" />
79http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif特征选择" />
80http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
81http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
82http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif特征选择" />
83http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
84http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
85http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
86http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif特征选择" />
87http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
88http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
89http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif特征选择" />
90http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
91http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
92http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif特征选择" />
93http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
94http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif特征选择" />
95http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif特征选择" />
96http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif特征选择" />}
97http://www.blogjava.net/Images/OutliningIndicators/None.gif特征选择" />
方法二:直接使用ranker
这里使用infogain作为评估函数。
package
import
import
import
import
import
import
public
}
在这个实例中,我用了InfoGain的属性选择类来进行特征选择。InfoGainAttributeEval主要是计算出各个属性的InfoGain信息。同时在weka中为属性选择方法配备的有搜索算法(seacher method),在这里我们用最简单的Ranker类。它对属性进行了简单的排序。在Weka中我们还可以对搜索算法设置一些其它的属性,例如设置搜索的属性集,阈值等等,如果有需求大家可以进行详细的设置。
在最后我们打印了一些结果信息,打印了各个属性的InfoGain的信息。
其他weka内嵌特征选择算法:
Refence:

加载中…