机器学习中的互信息

2025年2月3日 | 阅读 6 分钟

在信息论中,互信息是一个衡量一个随机变量能从另一个随机变量中学到多少知识的术语。在机器学习中,互信息作为一种工具,可以帮助我们理解变量之间的依赖关系,并选择特征,从而使模型能够有效地捕捉数据中的关系。

用数学术语来说,关系是用不确定性来描述的。两个数量之间的互信息量——一个衡量知道其中一个数量能多大程度上减少对另一个数量的不确定性。

机器学习中互信息的应用

以下是互信息在机器学习中的各种应用:

  • 特征选择:互信息在特征选择中得到广泛应用。其目标是仅选择对机器学习模型最有信息的特征。这是通过计算每个特征与目标变量之间的互信息,然后选择能够传递最多关于目标信息量的特征来实现的。这在处理高维数据时尤其有用,因为不相关或冗余的特征可能会降低模型性能。
  • 特征工程:互信息还可以通过指示哪些特征组合能够传递最多的信息来指导特征工程。这可能有助于创建新特征,捕捉数据中的基本关系,从而提高模型准确性。
  • 检测缺陷:互信息有助于检测和量化变量之间的依赖关系,即使在非线性关系的情况下也是如此。这使得它比皮尔逊相关系数等线性相关度量更强大,后者只能捕捉线性依赖关系。理解依赖关系可以指导更有效模型的设计,并帮助避免多重共线性等问题。
  • 使用互信息的决策树:ID3、C4.5和CART等算法使用互信息来构建决策树。这些算法将使用互信息来选择应该进入节点(用于分割数据)的最佳特征。具有最高互信息的目标变量将作为选择,因为高互信息意味着信息增益最大;因此,更具信息量的分割会形成更好的树结构。
  • 聚类:在评估两个聚类结果之间的相似性时,会使用互信息。例如,调整互信息(AMI)分数量化两个聚类分区的协议,并考虑了偶然性。这对于评估跨不同数据集的聚类一致性或比较不同聚类技术的性能特别有帮助。
  • 降维:在需要保留源数据信息的情况下,互信息被应用于降维技术。例如,最大化互信息提供了一种学习嵌入或投影的方法,以尽可能多地捕获原始变量的信息。

代码

现在为了更好地理解,我们从Ames Housing数据中抽取一个测试用例。下面的图表显示了房屋的售价与外部质量的关系。每个点代表一栋独立的房屋。

Mutual Information for Machine Learning

该图显示,每种ExterQual类别都倾向于将SalePrice集中在一个给定的范围内,因此知道ExterQual的值应该会让你对相关的SalePrice更有信心。ExterQual与SalePrice之间的互信息,说明了知道房屋外部质量ExterQual的平均情况下,可以减少房屋售价SalePrice的不确定性。换句话说,它衡量了在知道ExterQual的不同质量等级后,我们可以更准确地预测SalePrice的量。例如,Fair的出现频率低于Typical,因此在MI得分中的权重较低。

请记住,我们所说的“不确定性”是由信息论中的一个量——“熵”来捕捉的。通常,一个变量的熵可以定义为“描述该变量的一次出现所需的yes-no问题的平均数量”。因此,你必须问的问题越多,你对每个变量的确定性就越可能不足。互信息是你可以期望特征在目标变量方面能够回答的问题的数量。

解释互信息得分

互信息量化了知道一个量能告诉你关于另一个量的多少信息。如果两个数量之间的互信息为0.0,那么它们是完全独立的——也就是说,知道一个量对另一个量没有任何信息。另一方面,互信息的上限没有严格的限制——但在现实世界中,超过2.0的值非常罕见。MI以对数形式测量的事实意味着它增长得很慢。因此,MI的小幅增长已经显示出两个量之间共享信息的大幅增加。

下图将为你提供关于MI值如何与特征与目标变量的关系类型和级别相关联的直观认识。

Mutual Information for Machine Learning

在使用互信息时,请牢记以下几点:

  • MI将告诉你一个特征在单独考虑时作为目标变量预测因子的相对潜力。
  • MI无法识别特征交互。这个度量是单变量的。一个特征单独使用时信息量可能较少,但与其他特征结合使用时可能信息量很大。
  • 事实上,一个特征有多有用取决于你使用的模型。一个特征的有用程度仅限于你的模型能够理解它与目标变量之间关系的角度。一个特征可能需要被转换才能揭示其关联;仅仅因为它的互信息很高,并不能保证它对你的模型有用。

1985款汽车

Auto数据集包含193个实例,对应于1985年的车型。对于这个数据集,我们任务是根据每辆车的23个属性(如品牌、车身形状和马力)来预测汽车的售价。在这个例子中,我们将使用互信息来对特征进行排名,并通过数据可视化来探索结果。

输出

Mutual Information for Machine Learning

巧合的是,scikit-learn的MI方法对离散特征和连续特征的处理方式不同。因此,你必须区分这两种情况。基本原则是,任何需要float数据类型的都不能被认为是离散的。用于表示数据集中存储为对象或分类数据类型的分类变量的方法之一是标签编码,其中每个类别都分配一个唯一的数字。这基本上使得分类数据在机器学习模型中被视为离散值。

在其feature_selection模块中,Scikit-learn提供了两种不同的互信息度量:regression_of_mi 用于实值目标,classification_of_mi 用于分类目标。根据线索,我们可以确定我们的目标变量price是实值。我们的特征的MI得分将被计算并放入下一个漂亮的DataFrame中。

输出

Mutual Information for Machine Learning

我们现在将使用条形图来比较两者。

输出

Mutual Information for Machine Learning

数据可视化是效用排名之后的良好后续。让我们更详细地研究其中的一些。我们可能会期望得分很高的curb_weight特征与我们的目标变量price表现出很强的关系。

输出

Mutual Information for Machine Learning

从图中可以看出,尽管type_of_fuel特征的MI得分相对较低,但它清晰地区分了两种价格群体,并且在horsepower特征内具有不同的趋势。尽管type_of_fuel的MI得分较低,但它揭示了交互效应的事实可能意味着它仍然可以在模型中发挥作用。由于MI得分较低,在不检查交互效应的情况下就丢弃一个特征是不必要的。在此方面,领域知识可能非常重要。

输出

Mutual Information for Machine Learning

这些基于互信息的可视化,与其他使用效用度量的可视化一样,可能在弄清楚数据中一些最重要的关系方面非常有帮助。