mutual_info_regression#

sklearn.feature_selection.mutual_info_regression(X, y, *, discrete_features='auto', n_neighbors=3, copy=True, random_state=None, n_jobs=None)[source]#

估计连续目标变量的互信息。

互信息(MI)[1]是两个随机变量之间的一个非负值,它衡量变量之间的依赖性。当且仅当两个随机变量相互独立时,其值为零;值越高表示依赖性越高。

该函数依赖于基于k近邻距离的熵估计的非参数方法,如[2][3]所述。这两种方法都基于[4]中最初提出的思想。

它可用于单变量特征选择,详情请参阅用户指南

参数:
X类数组或稀疏矩阵,形状 (n_samples, n_features)

特征矩阵。

y形状为 (n_samples,) 的类数组

目标向量。

discrete_features{'auto', bool, 类数组},默认='auto'

如果为布尔值,则决定是否将所有特征视为离散或连续。如果为数组,则它应是一个形状为 (n_features,) 的布尔掩码,或一个包含离散特征索引的数组。如果为 'auto',则对于密集 X 设为 False,对于稀疏 X 设为 True。

n_neighborsint,默认值=3

用于连续变量的互信息(MI)估计的邻居数量,详见[2][3]。值越高会降低估计的方差,但可能引入偏差。

copybool,默认值=True

是否创建给定数据的副本。如果设置为 False,则原始数据将被覆盖。

random_stateint, RandomState 实例或 None,默认值=None

确定用于向连续变量添加微小噪声的随机数生成,以消除重复值。传入一个整数可在多次函数调用中获得可重现的结果。请参阅术语表

n_jobsint,默认值=None

用于计算互信息的作业数量。并行化在 X 的列上完成。

None 表示 1,除非在 joblib.parallel_backend 上下文中。 -1 表示使用所有处理器。有关更多详细信息,请参阅术语表

在 1.5 版本中新增。

返回:
mindarray,形状 (n_features,)

估计的每个特征与目标之间的互信息,以 nat 单位表示。

注意

  1. 此处使用“离散特征”一词而非“分类特征”,因为它更准确地描述了本质。例如,图像的像素强度是离散特征(但很难说是分类的),如果将其标记为离散特征,您将获得更好的结果。另请注意,将连续变量视为离散变量,反之亦然,通常会导致不正确的结果,因此请注意这一点。

  2. 真实的互信息不能为负。如果其估计值为负,则将其替换为零。

参考文献

[1]

维基百科上的互信息

[2] (1,2)

A. Kraskov, H. Stogbauer 和 P. Grassberger,《互信息估计》。Phys. Rev. E 69, 2004。

[3] (1,2)

B. C. Ross 《离散和连续数据集之间的互信息》。PLoS ONE 9(2), 2014。

[4]

L. F. Kozachenko, N. N. Leonenko,《随机向量熵的样本估计》,Probl. Peredachi Inf.,23:2 (1987),9-16

示例

>>> from sklearn.datasets import make_regression
>>> from sklearn.feature_selection import mutual_info_regression
>>> X, y = make_regression(
...     n_samples=50, n_features=3, n_informative=1, noise=1e-4, random_state=42
... )
>>> mutual_info_regression(X, y)
array([0.117, 2.645, 0.0287])