【算法】python实现逻辑回归

预备资源

Python的几个包:

  • numpy: Python的语言扩展,定义了数字的数组和矩阵
  • pandas: 直接处理和操作数据的主要package
  • statsmodels: 统计和计量经济学的package,包含了用于参数评估和统计测试的实用工具
  • pylab: 用于生成统计图
    安装参考:传送门

实例

实验目标

通过分析不同的因素对研究生录取的影响来预测一个人是否会被录取。

数据

数据来源
数据的格式如下:

row_num admit gre gpa rank
0 0 380 3.61 3
1 1 660 3.67 3
  • admit :表示是否被录取(目标变量)
  • gre: 预测变量
  • gpa:预测变量
  • rank:母校排名(预测变量)

读取数据

通过pandas.read_csv("文件路径")读取数据

import pandas as pd
import statsmodels.api as sm
import pylab as pl
import numpy as np

df = pd.read_csv("./binary.csv")

print df.head()
# 重命名'rank'列,因为dataframe中有个方法名也为'rank'
df.columns = ["admit", "gre", "gpa", "prestige"]
print df.columns
# array([admit, gre, gpa, prestige], dtype=object)

结果:


结果

统计摘要绘图

pandas库提供函数describe来对数据进行统计,其中包括最值,均值,标准差等,计算标准差我们也可以用padans.dataframe.std()来求标准差,我们可以通过padans.dataframe.hist()来画柱状图,通过pylab.show来展示

print df.describe()

print df.std()

print pd.crosstab(df['admit'], df['prestige'], rownames=['admit'])

df.hist()
pl.show()
运行结果
柱形图

虚拟变量

虚拟变量,也叫哑变量,可用来表示分类变量、非数量因素可能产生的影响。在计量经济学模型,需要经常考虑属性因素的影响。例如,职业、文化程度、季节等属性因素往往很难直接度量它们的大小。只能给出它们的“Yes—D=1”或”No—D=0”,或者它们的程度或等级。为了反映属性因素和提高模型的精度,必须将属性因素“量化”。通过构造0-1型的人工变量来量化属性因素。

pandas提供一个一个分类变量的控制功能,我们可以通过get_dummies来对一列进行虚拟化。本例中将prestige虚拟化实现,以实现量化

#将prestige虚拟化实现,量化

dummy_ranks = pd.get_dummies(df['prestige'],prefix='prestige')

print dummy_ranks.head()

clos_to_keep=['admit','gre','gpa']
#合并虚拟项与原数据得到完成LR的dataframe
data = df[clos_to_keep].join(dummy_ranks.ix[:,'prestige_2':])

print data.head()

#自行添加逻辑回归需要的intercept变量(常数项)
data['intercept']=1.0

结果

将新的虚拟变量加入到原始的数据集中就不需要原来的prestige列了,生成m个虚拟变量只需要引入m-1个虚拟变量到数据集中,未引入的一个是作为基准对比的。将虚拟变量与"admit,gre,gpa"合并后就得到了实现逻辑的dataframe。除此之外。我们还需要显示的加上常数intercept

执行逻辑回归

在之前我们已经将准备工作做就绪,那么接下来就可以执行逻辑回归了。

  • 首先要指定预测变量的列和模型用于做预测的列。
  • 调用算法包执行算法。

在本例中预测admit,使用gre,gpa,以及虚拟变量p2,p3,p4做预测变量。

#指定作为训练变量的列,不含目标列‘admit’
train_cols=data.columns[1:]

#执行逻辑回归

logit = sm.Logit(data['admit'],data[train_cols])
#拟合参数
result = logit.fit()

statasmodels库中提供了许多的机器学习的算法,详情参见:传送门

使用模型进行预测

  1. 构造预测集,读入方式与训练集相同pandas.read_csv()读入,这里为了方便直接取了训练集(剔除admit列)。
  2. 通过result.predict("参数的值")进行预测
  3. 分析结果,求得命中率等相关值。
#拷贝训练集数据
combos = copy.deepcopy(data)

predict_cols = combos.columns[1:]
#设置参数的常量
combos['intercept']=1.0
#进行预测
combos['predict']=result.predict(combos[predict_cols])

tot = 0

hit = 0;

for value in combos.values:
    predict = value[-1]
    admit = int(value[0])
    if predict >=0.5:
        tot+=1
        if admit == 1:
            hit+=1
print 'Total: %d ,Hit: %d ,Precision: %.2f'%(tot,hit,100.0*hit/tot)

结果分析

通过result.summary()方法查看相关信息。

print result.summary()
结果

通过这个表我们可以看到模型的参数的值,以及总的拟合质量
查看每个参数的置信区间

# 查看每个系数的置信区间
print result.conf_int()
#                    0         1
# gre         0.000120  0.004409
# gpa         0.153684  1.454391
# prestige_2 -1.295751 -0.055135
# prestige_3 -2.016992 -0.663416
# prestige_4 -2.370399 -0.732529
# intercept  -6.224242 -1.755716

Summary

Python库中几乎包含了常见机器学习中我们需要做的所有操作,在训练机器学习模型的时候我们只用学会如何使用它就好。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,695评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,569评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,130评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,648评论 1 297
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,655评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,268评论 1 309
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,835评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,740评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,286评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,375评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,505评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,185评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,873评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,357评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,466评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,921评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,515评论 2 359

推荐阅读更多精彩内容