【问题标题】:Python sklearn - how to calculate p-valuesPython sklearn - 如何计算 p 值
【发布时间】:2014-04-13 22:05:47
【问题描述】:

这可能是一个简单的问题,但我正在尝试使用分类问题的分类器或回归的回归器来计算我的特征的 p 值。有人可以建议每种情况的最佳方法并提供示例代码吗?我只想查看每个功能的 p 值,而不是按照文档中的说明保持功能的 k 最佳/百分位数等。

谢谢

【问题讨论】:

  • 用于显着性检验的那些 p 通常必须为
  • 虽然我认为 feature_extraction 有不同的作用,但它将任意数据转换为数字数据

标签: python scikit-learn p-value


【解决方案1】:

您可以使用 statsmodels

import statsmodels.api as sm
logit_model=sm.Logit(y_train,X_train)
result=logit_model.fit()
print(result.summary())

结果会是这样的

                           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

【讨论】:

  • 我同意,StatsModels 是由统计学家开发的,你会有更多的信息。 Sklearn 是由 developerper 开发的,它会更容易使用和集成到管道中。根据您的目标谨慎选择您的工具
  • 简单多了!谢谢!我已经使用sklearn. 解决了这个问题
【解决方案2】:

直接在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])

【讨论】:

  • 看起来不错。我怎样才能将所有这些数字变成 0.0000 形式? (非常菜鸟对不起)
  • 我使用了分数,pvalues = chi2(traindata, targetdata) pvalues=["{0:.7f}".format(x)for x in pvalues] print pvalues is this right way> thx
  • @user1096808 Python 教程涵盖了数字格式,请阅读。
  • 我收到“输入 X 必须为非负数”。专门用于 chi2 测试。这仅适用于没有负值的变量吗?您如何获得不一定总是积极的特征的 p 值?
  • OP 似乎想要statsmodels 返回的回归中每个特征的 p 值。此答案中的 p 值不是那些 p 值。这些是单变量卡方检验,这意味着每个特征都是独立测试的,而不是在一个通用模型中。
【解决方案3】:

您的问题是如何使用“sklearn”计算 p 值, 无需额外 pip 安装 statsmodel

from sklearn.feature_selection import f_regression

freg=f_regression(x,y)

p=freg[1]

print(p.round(3))

【讨论】:

  • 这些似乎也是一个很好的答案,但是用一些文档解释一下这里发生了什么,任何人都会更容易理解。
  • 这些似乎也是一个很好的答案,但是用一些文档解释一下这里发生了什么,任何人都会更容易理解。
猜你喜欢
  • 2017-11-13
  • 2017-11-30
  • 2014-06-23
  • 1970-01-01
  • 2019-02-14
  • 2021-08-03
  • 1970-01-01
  • 2020-10-15
  • 2014-09-30
相关资源
最近更新 更多