mutual_info_classif#
- sklearn.feature_selection.mutual_info_classif(X, y, *, discrete_features='auto', n_neighbors=3, copy=True, random_state=None, n_jobs=None)[源码]#
估计离散目标变量的互信息。
两个随机变量之间的互信息(MI)[1]是一个非负值,用于衡量变量之间的依赖性。当且仅当两个随机变量相互独立时,互信息为零,值越高表示依赖性越高。
该函数依赖于基于k近邻距离的熵估计的非参数方法,如[2]和[3]中所述。这两种方法都基于[4]中最初提出的思想。
它可用于单变量特征选择,更多信息请参阅用户指南。
- 参数:
- X{array-like, 稀疏矩阵},形状 (n_samples, n_features)
特征矩阵。
- yarray-like,形状 (n_samples,)
目标向量。
- discrete_features‘auto’,布尔值或 array-like,默认值=’auto’
如果为布尔值,则确定是否将所有特征视为离散或连续。如果为数组,则应为形状 (n_features,) 的布尔掩码或包含离散特征索引的数组。如果为 'auto',对于密集
X
,它被赋值为 False,对于稀疏X
,它被赋值为 True。- n_neighborsint,默认值=3
- copy布尔值,默认值=True
是否复制给定数据。如果设置为 False,则初始数据将被覆盖。
- random_stateint, RandomState 实例或 None,默认值=None
用于确定向连续变量添加微小噪声以消除重复值的随机数生成。传递一个 int 以在多次函数调用中获得可重现的结果。参见词汇表。
- n_jobsint,默认值=None
用于计算互信息的作业数。并行化在
X
的列上完成。None
表示 1,除非在joblib.parallel_backend
上下文中。-1
表示使用所有处理器。有关更多详细信息,请参阅词汇表。版本 1.5 新增。
- 返回:
- mindarray,形状 (n_features,)
每个特征与目标之间以纳特(nat)为单位的估计互信息。
备注
此处使用“离散特征”一词,而不是“类别特征”,因为前者更准确地描述了其本质。例如,图像的像素强度是离散特征(但很难说是类别),如果您将其标记为离散,将获得更好的结果。另请注意,将连续变量视为离散变量或反之通常会给出不正确的结果,因此请务必注意这一点。
真实的互信息不能为负。如果其估计值为负,则将其替换为零。
参考文献
[2] (1,2)A. Kraskov, H. Stogbauer 和 P. Grassberger, “Estimating mutual information”. Phys. 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_classification >>> from sklearn.feature_selection import mutual_info_classif >>> X, y = make_classification( ... n_samples=100, n_features=10, n_informative=2, n_clusters_per_class=1, ... shuffle=False, random_state=42 ... ) >>> mutual_info_classif(X, y) array([0.589, 0.107, 0.196, 0.0968 , 0., 0. , 0. , 0. , 0. , 0.])