python - 如何在学习中使用 Mann-Whitney U 检验

标签 python scipy scikit-learn

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

最佳答案

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

关于python - 如何在学习中使用 Mann-Whitney U 检验,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16877712/

相关文章:

python - scikit learn中是否可以通过多维缩放找到相似的订单?

python - 如何使用 XGBoost 获得预测并使用 Scikit-Learn Wrapper 进行匹配?

python - Sklearn - 无法在随机森林分类器中使用编码数据

Python 字典 : entry dependes on existing entry

python - Numpy svd 与 Scipy.sparse svds

python - 3g 覆盖 map - 可视化纬度、经度、ping 数据

python - 如何计算数据点以何种方式继续超出交叉点?

python - 通过 Heroku 部署 Python 应用程序时出现 NoSectionError

javascript - 我可以使用 Plotly 的自定义按钮来更新多面图中的 `shared_yaxes` 吗?

python - 从 scipy 导入 softmax 并在从 sklearn 导入后使用它时出现问题