我有一个包含分类和连续/有序解释变量和连续目标变量的数据集。我尝试使用单向方差分析对分类变量进行过滤,并使用 Spearman 的相关系数对连续/有序变量进行过滤。我正在使用 p 值进行过滤。然后我还使用互信息回归来选择特征。两种技术的结果都不匹配。有人可以解释什么是差异以及什么时候应该使用什么?
何时应该将互信息用于特征选择,而不是其他特征选择方法,如相关性、方差分析等?
数据挖掘
机器学习
特征选择
互信息
方差分析
斯皮尔曼等级相关
2022-02-22 19:12:01
1个回答
Pearson 相关性和 ANOVA将测量 x,y 之间的线性方差。
互信息回归
方法是一种基于熵的方法,它甚至可以找到非线性相关性。
让我们看看 2 对数据 (x, y_1) 和 (x, y_2)。
##0. Data setup
x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
y_1 = 3.39*x_1
y_2 = np.array([1, 1, -1, -1, 0, 0, -2, -2, 2, 2])
df_1 = pd.DataFrame([x,y_1]).T
df_2 = pd.DataFrame([x,y_2]).T
##1. Pearson corr
df_1.corr()
df_2.corr()
##2. f_test
from sklearn.feature_selection import f_regression, mutual_info_regression
f_test, _ = f_regression(x.reshape(10, 1),y_1)
f_test
f_test, _ = f_regression(x.reshape(10, 1),y_2)
f_test
##3. Mutual reg
mutual_info_regression(x.reshape(10, 1),y_1,n_neighbors=1,random_state=123)
mutual_info_regression(x.reshape(10, 1),y_2,n_neighbors=1,random_state=123)
##4. Tree-based feature importance is also based on entropy reduction
##and is more reliable as KNN needs a good k value
我们可以观察到,当它是简单的时,相互重要性不仅能够捕捉 x 与 y_1 的关系线性胸围也与 y_2 非线性时(但具有强关系)
如果你只是在寻找你应该使用 MI基于过滤器的方法。否则,在大多数情况下,树特征重要性将是最好的。
检查此链接 -
F_test Vs MI
其它你可能感兴趣的问题