4

我有一个表 (X, Y),其中 X 是矩阵,Y 是类向量。这里有一个例子:

X = 0 0 1 0 1   and Y = 1
    0 1 0 0 0           1
    1 1 1 0 1           0

我想使用 Mann-Whitney U 检验来计算特征重要性(特征选择)

from scipy.stats import mannwhitneyu
results = np.zeros((X.shape[1],2))
for i in xrange(X.shape[1]):
    u, prob = mannwhitneyu(X[:,i], Y)
    results[i,:] = u, pro

我不确定这是否正确?u = 990对于某些列,我获得了大表的大值。

4

1 回答 1

13

我不认为使用 Mann-Whitney U 检验是进行特征选择的好方法。Mann-Whitney 测试两个变量的分布是否相同,它没有告诉您变量的相关性如何。例如:

>>> from scipy.stats import mannwhitneyu
>>> a = np.arange(100)
>>> b = np.arange(100)
>>> np.random.shuffle(b)
>>> np.corrcoef(a,b)
   array([[ 1.        , -0.07155116],
          [-0.07155116,  1.        ]])
>>> mannwhitneyu(a, b)
(5000.0, 0.49951259627554112) # result for almost not correlated
>>> mannwhitneyu(a, a)
(5000.0, 0.49951259627554112) # result for perfectly correlated

因为ab具有相同的分布,我们无法拒绝分布相同的原假设。

而且由于在特征选择中您正在尝试查找主要解释的特征Y,Mann-Whitney U 并不能帮助您。

于 2014-03-15T15:02:23.643 回答