python做logistic回归分析

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

比如使用 kaggel 的heart数据集。

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

 


###############################################################
import pandas as pd
import statsmodels.api as sm

df = pd.read_csv("binary.csv")
df.head()
df
# 重命名 ranks 列,
df.columns = ['admit', 'gre', 'gpa', 'prestige']
df

pd.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.shape

clos_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_dummy

df_new = df.iloc[:, :-1].join(data_dummy.iloc[:, 1:])

df_new

independent = sm.add_constant(df_new.iloc[:, 1:])
independent
dependent = df_new.iloc[:, 0]
dependent

model = sm.Logit(dependent, independent).fit()
model.summary()

# 结果也是一样的。

 

你可能感兴趣的:(python,python,逻辑回归)