Python sklearn - 如何计算p值

use*_*808 8 python scikit-learn p-value

这可能是一个简单的问题,但我试图使用分类器的分类器或回归的回归量来计算我的特征的p值.有人可以建议每个案例的最佳方法是什么,并提供示例代码?我想只看到每个功能的p值,而不是像文档中所解释的那样保持功能等的k最佳/百分位数.

谢谢

Fre*_*Foo 11

X, y直接运行重要性测试.使用20news的示例和chi2:

>>> from sklearn.datasets import fetch_20newsgroups_vectorized
>>> from sklearn.feature_selection import chi2
>>> data = fetch_20newsgroups_vectorized()
>>> X, y = data.data, data.target
>>> scores, pvalues = chi2(X, y)
>>> pvalues
array([  4.10171798e-17,   4.34003018e-01,   9.99999996e-01, ...,
         9.99999995e-01,   9.99999869e-01,   9.99981414e-01])
Run Code Online (Sandbox Code Playgroud)

  • OP似乎希望回归中的每个特征的p值由`statsmodels`返回.这个答案中的p值不是那些p值.这些是单变量卡方检验,意味着每个特征都是独立测试的,而不是在通用模型中. (12认同)
  • 我得到"输入X必须是非负的".专门针对chi2测试.这只适用于没有负值的变量吗?如何获得不一定总是正面的特征的p值? (3认同)

小智 6

您可以使用statsmodels

import statsmodels.api as sm
logit_model=sm.Logit(y_train,X_train)
result=logit_model.fit()
print(result.summary())
Run Code Online (Sandbox Code Playgroud)

结果会是这样的

                           Logit Regression Results                           
==============================================================================
Dep. Variable:                      y   No. Observations:               406723
Model:                          Logit   Df Residuals:                   406710
Method:                           MLE   Df Model:                           12
Date:                Fri, 12 Apr 2019   Pseudo R-squ.:                0.001661
Time:                        16:48:45   Log-Likelihood:            -2.8145e+05
converged:                      False   LL-Null:                   -2.8192e+05
                                        LLR p-value:                8.758e-193
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
x1            -0.0037      0.003     -1.078      0.281      -0.010       0.003
Run Code Online (Sandbox Code Playgroud)