如何在分类特征上应用互信息
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])
我正在使用 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])