我正在学习逻辑回归教程中的比值比,并试图使用scikit-learn的逻辑回归模块获得完全相同的结果。使用下面的代码,我能够获得系数和截距,但我找不到找到教程中列出的模型的其他属性的方法,例如对数似然度,Odds Ratio, Std. Err。, z, P>|z|, [95% Conf. Interval]。如果有人能告诉我如何用sklearn
包计算它们,我将不胜感激。
import pandas as pd
from sklearn.linear_model import LogisticRegression
url = 'https://stats.idre.ucla.edu/wp-content/uploads/2016/02/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_
你可以通过取系数的指数得到优势比:
import numpy as np
X = df.female.values.reshape(200,1)
clf.fit(X,y)
np.exp(clf.coef_)
# array([[ 1.80891307]])
至于其他统计数据,这些不容易从scikit-learn获得(其中模型评估主要使用交叉验证完成),如果您需要它们,您最好使用其他库,如statmodels。
除了@maxymoo的答案外,还可以使用statsmodel
来获取其他统计数据。假设您的数据位于名为df
的DataFrame
中,下面的代码应该显示一个很好的摘要:
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()
我不知道使用scikit-learn这样的方法,但是来自statsmodels.api.stats的Table2x2在您的情况下可能是有用的,因为它为您提供了OR, SE, CI和p值与3行代码:
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
"""