将 sklearn LogisticRegression 系数链接到稀疏矩阵中的项,并获得统计显着性 / C.I

Linking sklearn LogisticRegression coefficients to terms in a sparse matrix, and getting statistical significance / C.I

这是从 开始的问题的延续。

我有 运行 使用 sklearn 的逻辑回归,代码类似于以下代码:

from pandas import *
from sklearn.feature_extraction.text import CountVectorizer
from sklearn import linear_model

vect= CountVectorizer(binary =True)

a = read_table('text.tsv', sep='\t', index_col=False)

X = vect.fit_transform(c['text'].values)

logreg = linear_model.LogisticRegression(C=1)

d = logreg.fit(X, c['label'])
d.coef_

现在我想 link d.coef_ 中的值到构成我的稀疏矩阵 X 中的行的唯一项。执行此操作的正确方法是什么?似乎无法使它起作用,即使看起来 X 应该具有 vocabulary_ 属性。我得到:

In [48]: X.vocabulary_
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-48-138ab7dd95ed> in <module>()
----> 1 X.vocabulary_

/usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/scipy/sparse/base.pyc in __getattr__(self, attr)
    497             return self.getnnz()
    498         else:
--> 499             raise AttributeError(attr + " not found")
    500 
    501     def transpose(self):

AttributeError: vocabulary_ not found

更进一步,如果我想获得这些系数的统计显着性和置信区间(按照您从 R 的 glm 获得的结果),这可能吗?例如,

## 
## Call:
## glm(formula = admit ~ gre + gpa + rank, family = "binomial", 
##     data = mydata)
## 
## Deviance Residuals: 
##    Min      1Q  Median      3Q     Max  
## -1.627  -0.866  -0.639   1.149   2.079  
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -3.98998    1.13995   -3.50  0.00047 ***
## gre          0.00226    0.00109    2.07  0.03847 *  
## gpa          0.80404    0.33182    2.42  0.01539 *  
## rank2       -0.67544    0.31649   -2.13  0.03283 *  
## rank3       -1.34020    0.34531   -3.88  0.00010 ***
## rank4       -1.55146    0.41783   -3.71  0.00020 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 499.98  on 399  degrees of freedom
## Residual deviance: 458.52  on 394  degrees of freedom
## AIC: 470.5
## 
## Number of Fisher Scoring iterations: 4

可以使用 get_feature_names 方法从 vect 访问特征名称。

您可以将它们压缩成这样的系数,例如:

zip(vect.get_feature_names(),d.coef_[0]) 

这个 returns 一个包含 (token, coefficient)

的元组