小白一个,总结文章,欢迎指正。
一、概述
logistic回归与多重线性回归实际上有很多相同之处,最大的区别就在于他们的因变量不同,其他的基本都差不多,正是因为如此,这两种回归可以归于同一个家族,即广义线性模型(generalized linear model)。这一家族中的模型形式基本上都差不多,不同的就是因变量不同,如果是连续的,就是多重线性回归,如果是二项分布,就是logistic回归,如果是poisson分布,就是poisson回归,如果是负二项分布,就是负二项回归,等等。只要注意区分它们的因变量就可以了。
logistic回归的因变量可以是二分类的,也可以是多分类的,但是二分类的更为常用,也更加容易解释。所以实际中最为常用的就是二分类的logistic回归。
二、用途
寻找危险因素,预测某情况发生的概率,判别发生某情况的概率有多大
三、Python常用的算法包
numpy: Python的语言扩展,定义了数字的数组和矩阵
pandas: 直接处理和操作数据的主要package
statsmodels: 统计和计量经济学的package,包含了用于参数评估和统计测试的实用工具
pylab:用于生成统计图
四、常用代码
加载数据:
使用pandas.read_csv加载数据,这样我们就有了可用于探索数据的DataFrame
import pandas as pd
import statsmodels.api as sm
import statsmodels.api as sm
import pylab as pl
import numpy as np
#加载数据
df=pd.read_csv("网页链接")
print.df.head()
# admit gre gpa rank
统计摘要(Summary Statistics) 以及 查看数据
现在我们就将需要的数据正确载入到Python中了,现在来看下数据。我们可以使用pandas的函数describe来给出数据的摘要–describe与R语言中的summay类似。这里也有一个用于计算标准差的函数std,但在describe中已包括了计算标准差。
pandas的pivot_table/crosstab聚合功能。crosstab可方便的实现多维频率表(frequency tables)(有点像R语言中的table)。你可以用它来查看不同数据所占的比例。
# summarize the data
print df.describe()
# 查看每一列的标准差
print df.std()
#频率表,表示prestige与admin的值相应的数量关系
print pd.crosstab(df['aadmit'],df[''prestige],rownames=['admit'])
# plot all of the columns
df.hist()
pl.show()
虚拟变量(dummy variables)
虚拟变量,也叫哑变量,可用来表示分类变量、非数量因素可能产生的影响。在计量经济学模型,需要经常考虑属性因素的影响。例如,职业、文化程度、季节等属性因素往往很难直接度量它们的大小。只能给出它们的“Yes—D=1”或”No—D=0”,或者它们的程度或等级。为了反映属性因素和提高模型的精度,必须将属性因素“量化”。通过构造0-1型的人工变量来量化属性因素。
pandas提供了一系列分类变量的控制。我们可以用get_dummies来将”prestige”一列虚拟化。
get_dummies为每个指定列创建了新的带二分类预测变量的DataFrame。
# 将prestige设为虚拟变量
dummy_ranks=pd.get_dummies(df['prestige'],prefix='prestige')
print dummy_ranks.head()
# 为逻辑回归创建所需的data frame
# 除admit、gre、gpa外,加入了上面常见的虚拟变量(注意,引入的虚拟变量列数应为虚拟变量总列数减1,减去的1列作为基准)
cols_to_keep=['admit','gre','gpa']
data=df[cols_to_keep].join(dummy_ranks.ix[:,'prestige_2':])
print data.head()
# 需要自行添加逻辑回归所需的intercept变量
data['intercept']=1.0
# 指定作为训练变量的列,不含目标列`admit`
train_cols = data.columns[1:]
# Index([gre, gpa, prestige_2, prestige_3, prestige_4], dtype=object)
logit=sm.Logit(data['admit',data[train_cols]])
# 拟合模型
result = logit.fit()