python做logistic回归分析

python做logistic回归分析,我觉的使用statsmodel库比较好,结果输出比较整齐。很类似传统的统计软件。

比如使用 kaggel 的heart数据集。

地址在:https://www.kaggle.com/zhaoyingzhu/heartcsv

 


###############################################################
import pandas as pd
import statsmodels.api as smdf = pd.read_csv("binary.csv")
df.head()
df
# 重命名 ranks 列,
df.columns = ['admit', 'gre', 'gpa', 'prestige']
dfpd.crosstab( df['prestige'],df['admit'])df.hist()# 这里产生了一个虚拟变量数据表。
dummy_ranks = pd.get_dummies(df['prestige'], prefix='prestige')
dummy_ranks
type(dummy_ranks)
dummy_ranks.shape
df.shapeclos_to_keep = ['admit', 'gre', 'gpa']
clos_to_keep
# 这里,需要保留3个虚拟变量。n个虚拟的,纳入回归就纳入n-1,否则完全共线
data = df[clos_to_keep].join(dummy_ranks.loc[:, 'prestige_2':])
data#产生一个截距项。
data['intercept'] = 1.0
data
# 从第二列开始,数据中的列是自变量,第一列是y
train_cols = data.columns[1:]
train_cols
# 这里使用、logit函数,更简单一点
logit = sm.Logit(data['admit'], data[train_cols])
result = logit.fit()
result.summary()# 当然也可以使用广义线性模型,这有点类似于R的一些语法
model = sm.GLM.from_formula('admit~gre + gpa +prestige_2 +prestige_3 +prestige_4 ',family = sm.families.Binomial(), data = data)m1 = model.fit()
m1.summary()
# 两种方法,结果相同##################################
############ 添加截距项,也可以使用 sm的add——constant功能
##################################
df = pd.read_csv("binary.csv")df.head()
df.keys()
df.columns = ['admit', 'gre', 'gpa', 'prestige']df.head()data_dummy = pd.get_dummies(df['prestige'], prefix="prestige")data_dummydf_new = df.iloc[:, :-1].join(data_dummy.iloc[:, 1:])df_newindependent = sm.add_constant(df_new.iloc[:, 1:])
independent
dependent = df_new.iloc[:, 0]
dependentmodel = sm.Logit(dependent, independent).fit()
model.summary()# 结果也是一样的。

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部