如何使用scikit-learn获得比值比和其他相关功能



我正在学习逻辑回归教程中的比值比,并试图使用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来获取其他统计数据。假设您的数据位于名为dfDataFrame中,下面的代码应该显示一个很好的摘要:

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
"""

相关内容

  • 没有找到相关文章

最新更新