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)[源代码]#

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

Mutual information (MI) [1] between two random variables is a non-negative value, which measures the dependency between the variables. It is equal to zero if and only if two random variables are independent, and higher values mean higher dependency.

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

它可以用于单变量特征选择,在 User Guide .

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

特征矩阵。

y形状类似阵列(n_samples,)

目标载体。

discrete_features'自动',布尔,类数组},默认='自动'

如果是布尔,则确定是将所有特征视为离散还是连续。如果是数组,那么它应该是具有形状(n_features)的布尔屏蔽,或者是具有离散特征索引的数组。如果“自动”,则将其分配为False,表示密集 X 对于稀疏,则为True X .

n_neighborsint,默认=3

用于连续变量MI估计的邻居数量,请参阅 [2][3]. 较高的值会减少估计的方差,但可能会引入偏差。

copy布尔,默认=True

是否复制给定数据。如果设置为False,初始数据将被覆盖。

random_stateint,RandomState实例或无,默认=无

确定随机数生成,以向连续变量添加小噪音以删除重复值。传递int以获得跨多个函数调用的可重复结果。看到 Glossary .

n_jobsint,默认=无

用于计算互信息的作业数。并行化是在 X .

None 意思是1,除非在a中 joblib.parallel_backend 上下文 -1 意味着使用所有处理器。看到 Glossary 了解更多详细信息。

Added in version 1.5.

返回:
mindarray,shape(n_features,)

以nat为单位的每个特征和目标之间的估计互信息。

注意到

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

  2. 真正的互信息不可能是负的。如果它的估计结果是负的,它被替换为零。

引用

[1]

Mutual Information 在维基百科上。

[2] (1,2)

A.克拉斯科夫,H. Stogbauer和P. Grassberger,“估计互信息”。物理。Rev. E 69,2004。

[3] (1,2)

B. C. Ross "Mutual Information between Discrete and Continuous Data Sets". PLoS ONE 9(2), 2014.

[4]

L. F. Kozachenko, N. N. Leonenko, "Sample Estimate of the Entropy of a Random Vector", 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.1..., 2.6...  , 0.0...])