将具有离散特征索引的数组传递给 python 中的 mutual_info_classif

passing an array with index of discrete feature to mutual_info_classif in python

我正在使用 sklearn.feature_selection.mutual_info_classif 的 MI 来计算 4 个连续变量(X 矩阵)和 y(目标 class)

之间的 MI

X:

prop_tenure prop_12m    prop_6m prop_3m
    0.04        0.04        0.06    0.08
    0           0           0       0
    0           0           0       0
    0.06        0.06        0.1     0
    0.38        0.38        0.25    0
    0.61        0.61        0.66    0.61
    0.01        0.01        0.02    0.02
    0.1         0.1         0.12    0.16
    0.04        0.04        0.04    0.09
    0.22        0.22        0.22    0.22
    0.72        0.72        0.73    0.72
    0.39        0.39        0.45    0.64

**y**

status
0
0
1
1
0
0
0
1
0
0
0
1

所以我的 X 是连续的而 y 是离散的。

函数中有一个参数,我可以将离散特征的索引传递给它:

sklearn.feature_selection.mutual_info_classif(X, y, discrete_features=’auto’, n_neighbors=3, copy=True, random_state=None)

我正在做如下:

print(mutual_info_classif(X,y,discrete_features = [3],n_neighbors = 20))
[0.12178862 0.12968448 0.15483147 0.14721018]

虽然这没有给出错误,但我不确定我是否传递了正确的索引来将 y 变量标识为离散变量,将其他变量标识为连续变量。

如果我错了,有人可以澄清一下吗?

函数 mutual_info_classif 已经假定您的目标 y 是离散的。所以不需要传递任何索引,下面就够了

mutual_info_classif(X, y)

请注意,默认值 discrete_features=’auto’ 会自动计算出来,因为 X 是一个密集数组,所以您的所有特征都是连续的。

此外,您的示例是错误的,因为输入 discrete_features=[3] 会导致算法将第 4 个特征 (prop_3m) 视为离散特征。

参数 discrete_features 用于指定您是否希望特征 (X) 被视为离散或密集(连续)。默认情况下,Y 作为离散传递。并且由于您要查找连续随机变量的 MI 索引,因此应将其设置为 'auto' 以获得正确的结果。