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.
除了@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)
我不知道使用 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)
| 归档时间: |
|
| 查看次数: |
8269 次 |
| 最近记录: |