Python sklearn - 如何计算p值

18 投票
3 回答
71691 浏览
提问于 2025-04-17 21:40

这可能是个简单的问题,但我想计算我的特征的p值,使用分类器来解决分类问题,或者用回归模型来解决回归问题。有人能建议一下每种情况的最佳方法吗?并提供一些示例代码?我只是想看到每个特征的p值,而不是像文档中解释的那样保留最好的k个特征或百分位数等。

谢谢!

3 个回答

1

你的问题是如何使用“sklearn”来计算p值,而不需要额外安装statsmodel这个库。

from sklearn.feature_selection import f_regression

freg=f_regression(x,y)

p=freg[1]

print(p.round(3))
23

你可以使用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
12

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

撰写回答