机器学习-特征选择

来源:互联网 发布:开源搜索引擎源码 编辑:程序博客网 时间:2024/06/05 06:38


文章来自我的微信公众号CodingRush,欢迎扫码关注。


很多时候我们需要做特征选择,一方面是因为我们希望模型能够使用好的特征拟合数据,另一方面多余的特征会导致模型复杂度高,降低模型的泛化能力。最常见的例子就是,文本分类,我们不可能把所有的词都作为特征,而是希望选一些“好的”词作为特征进入到模型。

下面我们简单的谈一谈常用的几种特征选择方法。


1、Frequency

如果在文本中,那么就是词频了。去掉停用词之后,选择top frequency的词作为特征,显然是最简单的做法。这个方法的好处就是,因为frequency高,样本中的该列特征就不会稀疏,也许词与词之间组合起来就能形成区分力。

有一个简单的改进,拿文本分类来说,我们可以在每个类下面选择一些高频的词,然后把每个类的高频词并起来作为特征。就像图片中所描述的那样,不同类别的高频词是不一样的,这样的词作为特征,区分能力不就有所提高了吗?

但是简单的使用Frequency有个问题,因为高频,也就导致词区分能力不强。比如说“很好”“不好”这样的词可能词频就很高,但是对于类别的区分就不是很强。但是总归有一些tricky的方法能改进,比如说只取词频排在中间的词,或者我只取高频的实体名词。但是都有点“拍脑袋”,不够“智能”。


2、TF/IDF

相比很多同学在信息检索中一定听过TF/IDF,通常来说,我们需要计算query和doc的相似度,那么就需要好的方法计算特征词的权重(当然你也可以简单的使用01表示特征词是否出现)。比如说我们希望对于文档中的高频词,我们给予更高的权重,这就是TF的作用了。

但是,有的词在很多文档中都出现,我们希望对这样的词的权重进行衰减;而对某些具有区分度的词,我们希望有更好的权重,那么这类词能更好的反映文档的特性。这就是IDF的作用了,IDF认为,在少数文档中出现的词,区分能力更强。

于是常用的TF/IDF权重表达公式就是:(tf/n)/log(df+1),其中tf表示词在该篇文档中频率,n表示该篇文档词总数,df表示该词在文档集的文档频率。

TF/IDF的动机是好的,但是是否“完美”,这个有待商榷。比如说某词在同一类别下df就是很高,相反这样的词比一些低df的词权重更低,这显然不是好事。


3、Infromation Gain

上面提到的两个方法都是非监督的,没有用到样本的label信息。Information Gain是说选择一个特征,对于当前这个数据集分类的效果有多大的提升。信息增益的本质计算的是,使用该特征,使得数据集不确定性减少的多少,换言之就是该特征带来了多少的信息量。

如果说一个特征有01两种取值,那么IG的计算如下:

IG = Entropy - (p(f=0)Entropy(f=0) + p(f=1)Entropy(f=1))

公式的含义其实很简单,数据集的信息熵减去使用该特征之后的信息熵,显然这就是使用该特征获取到的信息增益。

其实这个方法就是我们熟知的决策树分类器中,选择特征作为节点的方法。


4、Mutual Information

互信息,描述的是两个变量之间的依赖程度,互信息越大,关联性越强。计算公式很简洁:

mi(a, b) = p(a, b) / (p(a) * p(b)) = p(a|b) / p(a) = p(b|a) / p(b)

其描述的就是某个变量在另一个变量出现的情况下的条件概率,占该变量出现情况的比例。这个比例越大,显然这两个变量越相关。

如果其中一个变量是分类的结果,那么其表示的就是一个特征和分类结果的相关程度。但是该方法有个弊端就是,倾向于选出低频的变量,因为越是低频的特征,分子和分母接近的可能性越大,所以导致这个方法选出的特征比较低频。


5、Pearson Coefficient

也就是我们常说的相关性系数,计算方法如下:

总体相关系数:



基于样本对协方差和标准差进行估计,得到计算方法:


一种等价的表达方式为:

从最后一个式子可以看到,Pearson系数,其实计算的是标准化的样本的内积。如果r=1,那么表示两个变量线性正相关;如果为-1则是表示线性负相关。

对于文本分类来说,如果两个变量分别表示类别和词,那么当两者的相关性系数为正是,很大程度上说明该词和该类别是正相关的,该词能较好的确定是该类别;如果两者的相关性系数为负,则从某种程度上说明该词能判别不是该类。通常来说我们会选择和类top 相关系数的词作为特征。