如何通过scikit-learn获得优势比和其他相关功能

Erd*_*AYA 7 python scikit-learn

在逻辑回归教程中经历了这个优势比,并尝试使用scikit-learn的逻辑回归模块得到完全相同的结果.使用下面的代码,我能够获得系数和截距,但我找不到找到教程中列出的模型的其他属性的方法,例如log-mighthood,Odds Ratio,Std.错误,z,P> | z |,[95%Conf.间隔].如果有人可以告诉我如何用sklearn包计算它们,我将不胜感激.

import pandas as pd
from sklearn.linear_model import LogisticRegression

url = 'http://www.ats.ucla.edu/stat/mult_pkg/faq/general/sample.csv'
df = pd.read_csv(url, na_values=[''])
y = df.hon.values
X = df.math.values
y = y.reshape(200,1)
X = X.reshape(200,1)
clf = LogisticRegression(C=1e5)
clf.fit(X,y)
clf.coef_
clf.intercept_
Run Code Online (Sandbox Code Playgroud)

max*_*moo 11

你可以通过取系数的指数得到比值比:

import numpy as np
X = df.female.values.reshape(200,1)
clf.fit(X,y)
np.exp(clf.coef_)

# array([[ 1.80891307]])
Run Code Online (Sandbox Code Playgroud)

至于其他统计数据,这些并不容易从scikit-learn(模型评估主要使用交叉验证完成)获得,如果你需要它们,你最好使用不同的库,如statsmodels.

  • @ user48956查看http://stats.stackexchange.com/questions/57031/interpreting-interaction-terms-in-logit-regression-with-categorical-variables,了解如何解释优势比的一个很好的例子 (3认同)
  • 当且仅当特征独立时,这些值是否只是优势比?(即特征之间没有交互作用)。 (2认同)

Erd*_*AYA 5

除了@maxymoo的答案,statsmodel还可以使用其他统计信息。假设您的数据位于DataFrame被称为中df,下面的代码应显示一个很好的摘要:

import pandas as pd
from patsy import dmatrices
import statsmodels.api as sm 

y, X = dmatrices( 'label ~ age + gender', data=df, return_type='dataframe')
mod = sm.Logit(y, X)
res = mod.fit()
print res.summary()
Run Code Online (Sandbox Code Playgroud)


Séb*_*ski 5

我不知道使用 scikit-learn 的这种方法,但是statsmodels.api.stats 中的 Table2x2 可能对您有用,因为它通过 3 行代码为您提供 OR、SE、CI 和 P 值:

import statsmodels.api as sm
table = sm.stats.Table2x2(np.array([[73, 756], [14, 826]]))
table.summary(method='normal')
"""
               Estimate    SE   LCB    UCB p-value
Odds ratio        5.697       3.189 10.178   0.000
Log odds ratio    1.740 0.296 1.160  2.320   0.000
Risk ratio        5.283       3.007  9.284   0.000
Log risk ratio    1.665 0.288 1.101  2.228   0.000
"""
Run Code Online (Sandbox Code Playgroud)