机器学习——Python实现逻辑回归

本文介绍了如何使用Python进行逻辑回归,适用于二分类问题。主要内容包括数据加载、统计摘要、虚拟变量处理、逻辑回归模型的训练与预测,以及结果解释。通过实例展示了逻辑回归在研究生录取预测中的应用,探讨了学校声望对录取概率的影响。

本文基于yhat上Logistic Regression in Python,作了中文翻译,并相应补充了一些内容。本文并不研究逻辑回归具体算法实现,而是使用了一些算法库,旨在帮助需要用Python来做逻辑回归的训练和预测的读者快速上手。

逻辑回归是一项可用于预测二分类结果(binary outcome)的统计技术,广泛应用于金融、医学、犯罪学和其他社会科学中。逻辑回归使用简单且非常有效,你可以在许多机器学习、应用统计的书中的前几章中找到个关于逻辑回归的介绍。逻辑回归在许多统计课程中都会用到。

我们不难找到使用R语言的高质量的逻辑回归实例,如UCLA的教程R Data Analysis Examples: Logit Regression就是一个很好的资源。Python是机器学习领域最流行的语言之一,并且已有许多Python的资源涵盖了支持向量积文本分类等话题,但少有关于逻辑回归的资料。

本文介绍了如何使用Python来完成逻辑回归。

简介

示例代码中使用了一些算法包,请确保在运行这些代码前,你的电脑已经安装了如下包:

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

可参考 Windows安装Python机器学习包 或 Ubuntu/CentOS安装Python机器学习包 来搭建所需要的环境。

逻辑回归的实例

在此使用与Logit Regression in R相同的数据集来研究Python中的逻辑回归,目的是要辨别不同的因素对研究生录取的影响。

数据集中的前三列可作为预测变量(predictor variables):

  • gpa
  • gre分数
  • rank表示本科生母校的声望

第四列admit则是二分类目标变量(binary target variable),它表明考生最终是否被录用。

加载数据

使用 pandas.read_csv加载数据,这样我们就有了可用于探索数据的DataFrame


  
   
   
  1. import pandas as pd
  2. import statsmodels.api as sm
  3. import pylab as pl
  4. import numpy as np
  5.  
  6. # 加载数据
  7. # 备用地址: http://cdn.powerxing.com/files/lr-binary.csv
  8. df = pd.read_csv("http://www.ats.ucla.edu/stat/data/binary.csv")
  9.  
  10. # 浏览数据集
  11. print df.head()
  12. # admit gre gpa rank
  13. # 0 0 380 3.61 3
  14. # 1 1 660 3.67 3
  15. # 2 1 800 4.00 1
  16. # 3 1 640 3.19 4
  17. # 4 0 520 2.93 4
  18.  
  19. # 重命名'rank'列,因为dataframe中有个方法名也为'rank'
  20. df.columns = ["admit", "gre", "gpa", "prestige"]
  21. print df.columns
  22. # array([admit, gre, gpa, prestige], dtype=object)
Python

注意到有一列属性名为rank,但因为rank也是pandas dataframe中一个方法的名字,因此需要将该列重命名为”prestige”.

统计摘要(Summary Statistics) 以及 查看数据

现在我们就将需要的数据正确载入到Python中了,现在来看下数据。我们可以使用pandas的函数describe来给出数据的摘要–describe与R语言中的summay类似。这里也有一个用于计算标准差的函数std,但在describe中已包括了计算标准差。

我特别喜欢pandaspivot_table/crosstab聚合功能。crosstab可方便的实现多维频率表(frequency tables)(有点像R语言中的table)。你可以用它来查看不同数据所占的比例。


  
   
   
  1. # summarize the data
  2. print df.describe()
  3. # admit gre gpa prestige
  4. # count 400.000000 400.000000 400.000000 400.00000
  5. # mean 0.317500 587.700000 3.389900 2.48500
  6. # std 0.466087 115.516536 0.380567 0.94446
  7. # min 0.000000 220.000000 2.260000 1.00000
  8. # 25% 0.000000 520.000000 3.130000 2.00000
  9. # 50% 0.000000 580.000000 3.395000 2.00000
  10. # 75% 1.000000 660.000000 3.670000 3.00000
  11. # max 1.000000 800.000000 4.000000 4.00000
  12.  
  13. # 查看每一列的标准差
  14. print df.std()
  15. # admit 0.466087
  16. # gre 115.516536
  17. # gpa 0.380567
  18. # prestige 0.944460
  19.  
  20. # 频率表,表示prestige与admin的值相应的数量关系
  21. print pd.crosstab(df['admit'], df['prestige'], rownames=['admit'])
  22. # prestige 1 2 3 4
  23. # admit
  24. # 0 28 97 93 55
  25. # 1 33 54 28 12
  26.  
  27. # plot all of the columns
  28. df.hist()
  29. pl.show()
Python
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值