Связывание коэффициентов sklearn LogisticRegression с терминами в разреженной матрице и получение статистической значимости / 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_

Теперь я хотел бы связать значения в d.coef_ с уникальными условиями, которые составляют строки в моей разреженной матрице X. Как правильно это сделать? Кажется, это не работает, хотя кажется, что X должен иметь атрибут word_. Я получил:

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’s 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

person araspion    schedule 23.02.2015    source источник
comment
Кстати, столбцы в матрице представляют термины, строки — документы.   -  person JAB    schedule 23.02.2015
comment
Невозможно получить доверительные интервалы в scikit-learn.   -  person Andreas Mueller    schedule 26.02.2015


Ответы (1)


Доступ к именам функций можно получить из vect с помощью метода get_feature_names.

Вы можете связать их с коэффициентами, например, так:

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

Это возвращает кортеж с (token, coefficient)

person JAB    schedule 23.02.2015
comment
Спасибо за ваш ответ - очень полезно. Я немного расширил свой вопрос, так как понял, что он не соответствует тому, что меня интересовало. Если у вас есть дополнительные сведения, это было бы здорово! - person araspion; 23.02.2015