【问题标题】:How to use Mann-Whitney U test in learning如何在学习中使用 Mann-Whitney U 检验
【发布时间】:2013-05-28 11:32:19
【问题描述】:

我有一个表 (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 用于某些列。

【问题讨论】:

    标签: python scipy scikit-learn


    【解决方案1】:

    我不认为使用 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 无法帮助您。

    【讨论】:

    • 最后一行的结果好像有问题,不应该是pvalue=1吗?
    • 来自 scipy 文档:“默认为无,这导致 p 值大小为‘双面’p 值的一半,并且 U 统计量不同。” (docs.scipy.org/doc/scipy/reference/generated/…)
    • “Mann-Whitney 检验两个变量的分布是否相同”我认为您正在考虑 Kolmogorov-Smirnov (KS) 检验。 Mann-Whitney U 检验测试从一个分布中随机选择的样本是否会大于(或小于)从另一个分布中随机选择的样本。
    猜你喜欢
    • 1970-01-01
    • 2013-07-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-26
    相关资源
    最近更新 更多