极客时间已完结课程限时免费阅读

28 | 熵、信息增益和卡方:如何寻找关键特征?

28 | 熵、信息增益和卡方:如何寻找关键特征?-极客时间

28 | 熵、信息增益和卡方:如何寻找关键特征?

讲述:黄申

时长10:21大小9.46M

你好,我是黄申。今天我们来说说特征选择。
我们已经讨论过信息熵和信息增益在决策树算法中的重要作用。其实,它们还可以运用在机器学习的其他领域,比如特征选择。你可能对“特征选择”这个名词不太熟悉,没有关系,我先花点时间,给你介绍一下什么是特征选择,以及机器学习为什么需要这个步骤。

什么是特征选择?

在编程领域中,机器学习已经有了十分广泛的应用,它主要包括监督式学习(Supervised Learning)和非监督式的学习(Unsupervised Learning)。监督式学习,是指通过训练资料学习并建立一个模型,并依此模型推测新的实例,主要包括分类(Classification)和回归(Regression)。
无论是在监督学习还是非监督学习中,我们都可以使用特征选择。不过,我今天要聊的特征选择,会聚焦在监督式学习中的特征处理方法。因此,为了说清楚特征选择是什么,以及为什么要进行这个步骤,我们先来看看监督式机器学习的主要步骤。
机器学习的步骤主要包括数据的准备、特征工程、模型拟合、离线和在线测试。测试过程也许会产生新的数据,用于进一步提升模型。在这些处理中,特征工程是非常重要的一步。
“特征”(Feature),是机器学习非常常用的术语,它其实就是可用于模型拟合的各种数据。前面讲朴素贝叶斯分类时,我解释了如何把现实世界中水果的各类特征转化为计算机所能理解的数据,这个过程其实就是最初级的特征工程。当然,特征工程远不止原始特征到计算机数据的转化,还包括特征选择、缺失值的填补和异常值的去除等等。这其中非常重要的一步就是特征选择。
越来越多的数据类型和维度的出现,会加大机器学习的难度,并影响最终的准确度。针对这种情形,特征选择尝试发掘和预定义任务相关的特征,同时过滤不必要的噪音特征。它主要包括特征子集的产生、搜索和评估。我们可以使用穷举法来找到最优的结果,但是如果特征有 个,那么复杂度会达到 。所以穷举法并不适合特征数量庞大的问题,比如我们之前讲过的文本分类。
因此,在这个领域诞生了一类基于分类标签的选择方法,它们通过信息论的一些统计度量,看特征和类标签的关联程度有多大。这里我还是使用文本分类的案例,来展示如何基于信息论,来进行特征选择。

利用信息熵进行特征选择

我们之前讲过如何为文本数据提取特征。对于一篇自然语言的文章,我们主要使用词包(Bag of Words)模型和分词,把完整的文章切分成多个单词或词组,而它们就表示了文章的关键属性,也就是用于机器学习的特征。
你会发现有些文本预处理的步骤已经在做特征选择的事情了,比如“停用词”。它会直接过滤一些不影响或基本不影响文章语义的词,这就是在减少噪音特征。不过,我之前也提到了,停用词的使用过于简单粗暴,可能会产生适得其反的效果。例如在进行用户观点分类时,“good”和“bad”这样的停用词反而成为了关键。不仅不能过滤,反而要加大它们的权重。
那么,我们怎么能知道哪些特征是更重要的呢?对于分类问题,我们更关心的是如何正确地把一篇文章划分到正确的分类中。一个好的特征选择,应该可以把那些对分类有价值的信息提取出来,而过滤掉那些对分类没有什么价值的信息。既然如此,我们能不能充分利用分类标签来进行挑选呢?答案是肯定的。前两节,我描述了信息熵和信息增益的工作原理。这里,我就可以使用它们来进行特征选择。
首先,我们来看这个问题,什么是对分类有价值的特征?
如果一个特征,经常只在某个或少数几个分类中出现,而很少在其他分类中出现,那么说明这个特征具有较强的区分力,它的出现很可能预示着整个数据属于某个分类的概率很高或很低。
这个时候,对于一个特征,我们可以看看包含这个特征的数据,是不是只属于少数几个类。举个例子,出现“电影”这个词的文章,经常出现在“娱乐”这个分类中,而很少出现在“军事”“政治”等其他分类中。
是否属于少数几个类这一点,可以使用信息熵来衡量。我用 来表示所有出现特征 的数据集合,这个集合一共包含了 个分类 ,而 表示这 个分类中的第 个。然后我们就可以根据 中分类 的分布,来计算熵。我们用这个公式来计算:
如果熵值很低,说明包含这个特征的数据只出现在少数分类中,对于分类的判断有价值。计算出每个特征所对应的数据集之熵,我们就可以按照熵值由低到高对特征进行排序,挑选出排列靠前的特征。
当然,这个做法只考虑了单个特征出现时,对应数据的分类情况,而并没有考虑整个数据集的分类情况。比如,虽然出现“电影”这个词的文章,经常出现在“娱乐”这个分类中,很少出现在其他分类中,但是可能整个样本数据中,“娱乐”这个分类本来就已经占绝大多数,所以“电影”可能并非一个很有信息含量的特征。
为了改进这一点,我们可以借用决策树中信息增益的概念。我们把单个特征 f 是不是出现作为一个决策条件,将数据集分为 表示出现了这个特征的数据,而 表示没有出现这个特征的数据。那么使用特征 进行数据划分之后,我们就能得到基于两个新数据集的熵,然后和没有划分之前的熵进行比较,得出信息增益。
如果基于某个特征的划分,所产生的信息增益越大,说明这个特征对于分类的判断越有价值。所以,我们可以计算基于每个特征的划分所产生的信息增益,然后按照增益值由高到低对特征进行排序,挑选出排列靠前的特征。

利用卡方检验进行特征选择

在统计学中,我们使用卡方检验来检验两个变量是否相互独立。把它运用到特征选择,我们就可以检验特征与分类这两个变量是否独立。如果两者独立,证明特征和分类没有明显的相关性,特征对于分类来说没有提供足够的信息量。反之,如果两者有较强的相关性,那么特征对于分类来说就是有信息量的,是个好的特征。为了检验独立性,卡方检验考虑了四种情况的概率:
在这四种概率中, 表示特征 和分类 是正相关的。如果 很高,表示特征 fi 的出现意味着属于分类 的概率更高;如果 很高,表示特征 不出现意味着不属于分类 的概率更高。
类似地, 表示特征 和分类 是负相关的。如果 很高,表示特征 的出现意味着不属于分类 的概率更高;如果 很高,表示特征 不出现意味着属于分类 的概率更高。
如果特征和分类的相关性很高,要么是正向相关值远远大于负向相关值,要么是负向相关值远远大于正向相关值。如果特征和分类相关性很低,那么正向相关值和负向相关的值就会很接近。卡方检验就是利用了正向相关和负向相关的特性。
其中, 表示数据的总个数。通过这个公式,你可以看到,如果一个特征和分类的相关性很高,无论是正向相关还是负向相关,那么正向相关和负向相关的差值就很大,最终计算的值就很高。最后,我们就可以按照卡方检验的值由高到低对特征进行排序,挑选出排列靠前的特征。

总结

在之前水果的案例中,可用的特征并不是很多,每种特征都是有价值的。对于文本分类,每种单词或词组都是特征,再加上多元文法,特征的数量会成倍的增加。过多的特征会影响模型分析的速度和准确度。
对于监督式学习而言,我们没有必要进行 这种数量级的特征子集搜索,而是直接考虑特征和分类标签之间的关系。这个时候信息论等统计度量就可以帮上忙了,它们可以衡量特征和分类之间的关联程度,从而判断哪些特征对于分类来说更重要。
无论是使用何种统计度量,我们都可以计算相应的数值、排序、并得到排名靠前的若干特征。从文本分类的角度来说,我们只会挑选对分类最有价值的那些单词或词组,而去除其他不重要的那些词。如果特征选择得当,我们既可以减少模型存储的空间,还可以提升分类的准确度。当然,过度的减少特征最终会导致准确度的下降,所以对于不同的数据集要结合实验,要把握一个合理的度。

思考题

在之前介绍决策树的时候,我除了解释信息增益,还阐述了基尼指数的概念。既然信息增益可用于特征选择,那么基尼指数是不是也可以呢?你可以试着写出相应的公式。
欢迎留言和我分享,也欢迎你在留言区写下今天的学习笔记。你可以点击“请朋友读”,把今天的内容分享给你的好友,和他一起精进。
分享给需要的人,Ta购买本课程,你将得20
生成海报并分享

赞 5

提建议

上一篇
27 | 决策树:信息增益、增益比率和基尼指数的运用
下一篇
29 | 归一化和标准化:各种特征如何综合才是最合理的?
unpreview
 写留言

精选留言(14)

  • 建强
    2020-06-28
    基尼指数也可以用于特征选择,公式的图没法贴出来,基尼指数越低,纯度越高,特征对于分类越有区分价值。公式大致如下: Gini(P, Dfi) = p(fi) * Gini(Dfi) + p(-fi) * Gini(-Dfi),Dfi表示特征fi,-fi和-Dfi表示不出现数据特征,而单个数据特征的Gini指数公式大致如下: Gini(Dfi) = 1-sum(1..m)[p(Cj | Dfi)]^2,其中,sum表示连加,就是公式中的西格码,(1..m)表示含有数据特征的m个分类,Cj表示第j个分类,只能这样大致表示下。 这样的理解是否正确,请老师指正。
    展开

    作者回复: 就是这个意思

    5
  • 那时刻
    2019-02-20
    老师,你好。关于使用卡方检验来进行特征选择,能否在答疑课的时候,给个具体例子讲解下?

    作者回复: 你好,你说的具体例子,是指通过实际的数据或代码来分析一下?

    5
  • Bora.Don
    2019-03-10
    老师,您好,感觉最近几节课您讲了很多概念,很多公式,可是运用上的实例似乎有点少,第一遍看懂了,可是过两天估计就忘记了,能否提供一下代码?这样可以自己动手操作一遍,非常感谢

    作者回复: 我在专栏结束后整理一下,供大家参考

    4
  • 总统老唐
    2019-12-27
    黄老师,关于使用卡方检验做特征选择,按照文中的讲法,实际上是检测的某个特征 fi 和 某个类 cj 的相关性,但是我们面对的实际情况是有 m 个特征,n 个类,那么: 1,是不是代表要做 m×n 次计算? 2,即便计算结果表明 fi 和 cj 类相关性很高,也有可能 fi 和 ck类 相关性很低,那这个结果对是否选取 fi 作为整体n个类的特征有什么指导意义呢?

    作者回复: 1. 是的,要做mxn次比较 2. 我的理解特征选择,可以按照整体也可以按照分类。如果是整体,可以定义简单的按权加和

    3
  • zhulihui
    2019-03-21
    老师好,想问个问题,一定要做特征选择么,能说说特征选择的必要性么。如果把所有特征都扔到模型会有什么副作用

    作者回复: 这是个好问题,通常要结合具体的案例和数据来看。如果特征数量很少的时候,一般不需要。如果特征太多,而样本不是很多的时候,容易过拟合,而且使用全部的特征效率也比较差,这个时候特征选择就有意义了

    3
  • 13311195819
    2019-02-20
    老师您用的什么画图软件,看起来画图很漂亮;我在网上找了好久找不到

    作者回复: 你是指这一节专栏吗?好像这期没有画什么图啊😆

    共 2 条评论
    3
  • A君
    2020-07-23
    随机森林模型也有对特征对分类的重要性进行排序的功能,它是否也是用卡方公式算出来的?

    作者回复: 要看具体实现,原理是一致的

    2
  • Paul Shan
    2019-09-12
    本文先引入了条件熵,条件熵只反映了特征和全局数据的相关性,并没有考虑不在条件分类下的情况。例如癌症筛查,只给没有癌症标签的分类器,全局准确度很高,因为患癌毕竟是小概率事件。为了解决这个问题,引入了条件分类下的信息增益。这种情况下,只给没有癌症的分类器就现形了,信息增益为零。 和条件分类下的信息增益类似,卡方检验用联合概率来简化计算,目的还是计算相关性。我感觉卡方检验和相关系数非常类似,请问老师为什么不直接用相关系数检验相关性,卡方检验相对于相关系数有什么好处?
    展开

    作者回复: 原理是类似的,但是假设和具体实现有所不同,个人觉得可以在实验中都尝试一下看看效果

    2
  • William
    2019-08-20
    老师,在计算信息增益的公式中,P(cj|Dfi)和P(cj|Dfi)【带横杠】中的cj的含义应该是不同的吧?前者是出现fi特征的数据集合中第j个分类,后者是未出现fi特征的数据集合中第j个数据的分类。

    作者回复: 对的

    2
  • 端点星好运
    2019-07-11
    一说自己会概率,上帝就发笑 ...
    2
  • 罗耀龙@坐忘
    2020-04-20
    茶艺师学编程 思考题,试试用基尼系数来特征选择(试着写公式) 基尼系数,简单来说就是考察一个集合的纯度,系数越小,表示该集合的纯度越高。 要进行特征选择,就是考察在使用某特征对集合划分后,其纯度提升了多少,选择其中提升幅度大的。 那么其公式简单为: 原集合的基尼系数—使用特征划分后集合的基尼系数的和 把不同的特征带进去,计算后的值从高到低排序,取排位靠前的。
    展开
    1
  • 闪光辉
    2019-03-06
    为什么不少地方卡方的计算公式=sum((A-T)^2/T) 的区别是什么(备注:A是实际值,T是理论值),其区别是什么

    作者回复: 你说的应该是卡方检验,两者概念有所不同。

    1
  • 013923
    2022-09-05 来自美国
    谢谢老师!

    作者回复: 很高兴对你们有价值

  • 颇忒妥
    2021-08-24
    老师,您好,本文中是否隐含了这么一种假设:本文中提到的特征维度的取值是否都是二元的?所以才能用Dfi和Dfi(非)表达公式。如果某个特征维度的取值可以是多个,那又该怎么做?

    作者回复: 这里不是说特征的取值是二元,而是有限的、离散的取值,比如文本中的单词,这样的话,我们就可以看某个特征取值(比如某个单词)出现在分类1中的概率,出现在分类2中的概率。。。等等