我们现在处于一个数据驱动的时代,但并不是所有的数据都是有意义的。只有有效的数据才能带给我们"信息",无效的数据并不能带给我们"信息"。
如果我们在做一件事情之前,可以通过各种数据得到这件事情所有相关信息,那么我们就可以最初最完美的决策,使利益最大化。
基于熵的特征选择方法就是选择一个能提供给类别尽可能多"信息"的特征子集,从而得到关于类别更多的"信息",进而为分类提供帮助。
如何衡量数据所携带信息的多少呢,克劳德·艾尔伍德·香农给出了熵的概念,通过熵我们可以衡量数据携带信息的多少。
熵的定义如下:
举一个简单的例子:如果有人告诉你11点过60分钟是12点,你一定觉得他说的是废话;但是
如果有人告诉你你的期末成绩优秀,你一定很感兴趣。这是因为前者的概率
因此它的熵为0,所以给你提供的信息也是0。
而后者的概率
(不及格,及格,中等,良好,优秀)
因此这件事情的熵为0.69,所以会提供给你一些信息。
熵
第一步先介绍一下熵的相关概念。
上图,
表示事件,
的信息;
被称为条件熵:表示在知道事件
的情况下,此时再知道事件
可以提供给我们
的信息。
被称为互信息:表示事件
和
共同提供的信息;也可以理解为知道了事件
可以对事件
提供多少信息,反之亦然。
被称为联合熵:表示知道事件
和
之后可以提供给我们的信息。
其中有:
(怎么计算
等公式我就不写了,主要是理解各种信息的关系)特征选择
这部分稍微谈一下特征选择方法。特征选择方法根据是否与后续的分类器交互分为过滤式、嵌入式以及包裹式。其中过滤式特征选择不需要与分类器交互,而其他两种都需要和分类器进行交互。
特征选择流程
特征选择主要分为子集生成、子集评价、停止准则三大部分。
子集生成主要是如何选择特征,例如穷举法,前向选择、后向消除、启发式选择等等。
子集评价中有很多度量方法:准确率、距离、相关性、互信息等等;使用不同的度量方法最终得到的特征子集也不一样。
停止准则是满足什么条件的时候停止特征选择过程,通常有特征子集达到一定的大小,选择阈值以上的特征等等。
基于互信息的特征选择方法
OK,当你对上面两部分有了了解之后,这部分就来说一下基于互信息的特征选择方法。
基于互信息的特征选择方法选择特征的过程比较简单。子集生成使用前向生成法,子集评价这部分等下要讨论的部分,停止准则一般为特征子集大小到达一个预设值就停止。举个例子说:
我们数据集有100个特征,我们要选择20个,那么此方法就会遍历特征20次,每次都根据评价准则选择最优的特征放入特征子集。
假设我们数据集特征为
,类别为
。如何设置评价标准才比较合理。
最简单的想法就是只考虑每个特征和类别之间的互信息
,根据互信息的大小对特征
排序,然后选择最前面的
个特征作为特征子集。这种特征选择方法也被称为MIM。其中
为候选的特征。
但是MIM方法有很明显的缺点,只考虑了特征和类别之间的相关性,没有考虑类别和类别的相关性,机会造成特征子集的冗余;也就是可能出现
和
值都很大,但是也很大(甚至接近1),这种情况
和
取其一即可。为了解决冗余性的问题,又有两种不同的算法MIFS和MRMR被提出:
其中
为已经选择的特征,
表示
的大小。这样在选择新特征的时候不仅考虑了候选
特征和类别之间的互信息,也考虑了候选特征和已选特征之间的相关性,减少了冗余度。事情
到这里似乎已经很完美了,毕竟及考虑了相关性,也考虑了冗余性。然而,还有一个问题需要
考虑。
我们选择特征子集的首要目标是希望特征子集针对类别的相关性高,冗余性小。但是
是两个特征之间的互信息,并没有考虑到类别。进一步说,两个特征之间的冗余
大,并不一定能说明这两个特征在类别上的冗余也大。据此,一系列考虑类内冗余的方法
也被提出,例如CIFE算法:
第二项为类内特征冗余,即我们知道了类别信息,不同特征再次基础上的互信息。
下面再看一个维恩图:
其中
表示类别的信息量,
表示已选择特征子集
,
表示候选特征。
最终的目标就是希望可以用尽可能的少的特征,使得
较大。上图中:
但是其中
这部分和类别没有关系,也就说这部分信息对于类别是无用的,我们
需要的只有类内冗余
这部分,也就是