如何在分类特征上应用互信息

how to apply mutual information on categorical features

我正在使用 Scikit-learn 来训练分类模型。我的训练数据中同时具有离散和连续特征。

我想使用 mutual information 进行特征选择。

特征 1,2 和 3 是离散的。为此,我尝试了以下代码:

mutual_info_classif(x, y, discrete_features=[1, 2, 3])

但它没有用,它给我错误:

 ValueError: could not convert string to float: 'INT'

mutual information classifier的简单示例:

import numpy as np
from sklearn.feature_selection import mutual_info_classif
X = np.array([[0, 0, 0],
              [1, 1, 0],
              [2, 0, 1],
              [2, 0, 1],
              [2, 0, 1]])
y = np.array([0, 1, 2, 2, 1])
mutual_info_classif(X, y, discrete_features=True)
# result: array([ 0.67301167,  0.22314355,  0.39575279]

.'discrete'和'categorical'是有区别的 在这种情况下,函数要求数据是数字的。如果你有序数特征,可能你可以使用标签编码器。否则,您将不得不对标称特征使用一种热编码。为此,您可以使用 pd.get_dummies。

mutual_info_classif只能取数字数据。您需要对分类特征进行标签编码,然后 运行 相同的代码。

x1=x.apply(LabelEncoder().fit_transform)

然后 运行 与 运行ning 完全相同的代码。

mutual_info_classif(x1, y, discrete_features=[1, 2, 3])