逻辑回归

本文主要介绍了Logistic回归的基础知识,包括其与多重线性回归的关系、用途及Python中实现Logistic回归的常用库。Logistic回归常用于二分类问题,用于寻找危险因素并预测事件发生的概率。文中提到了利用pandas、statsmodels和numpy等库进行数据加载、统计摘要和模型拟合,并展示了如何处理虚拟变量。
摘要由CSDN通过智能技术生成

小白一个,总结文章,欢迎指正。

一、概述

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()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值