用Python实现逻辑回归

北慕城南 提交于 2020-01-08 15:55:47

使用的Python工具包

  • numpy
  • pandas
  • statsmodels
  • pylab

数据集介绍

本次使用的数据来源于http://www.ats.ucla.edu
研究目标是辨别不同因素对研究生录取的影响。
在这里插入图片描述
数据的第一列是admit,表示是否被录取,有两个值,0和1,其中0表示没有被录取,1表示被录取,显然,这又是一个二分类问题。
数据的第二列是学生的gre(美国研究生入学考试)成绩。
数据的第三列是学生的gpa(学分绩点)。
最后一列是学生的学校的排名。

数据的初步统计结果

在这里插入图片描述

            admit         gre         gpa   prestige
count  400.000000  400.000000  400.000000  400.00000
mean     0.317500  587.700000    3.389900    2.48500
std      0.466087  115.516536    0.380567    0.94446
min      0.000000  220.000000    2.260000    1.00000
25%      0.000000  520.000000    3.130000    2.00000
50%      0.000000  580.000000    3.395000    2.00000
75%      1.000000  660.000000    3.670000    3.00000
max      1.000000  800.000000    4.000000    4.00000
admit         0.466087
gre         115.516536
gpa           0.380567
prestige      0.944460
dtype: float64
prestige   1   2   3   4
admit                   
0         28  97  93  55
1         33  54  28  12

虚拟变量并处理数据

在这里插入图片描述

# 将prestige设置为虚拟变量
dummy_ranks = pd.get_dummies(df['prestige'], prefix='prestige')
# 将虚拟变量加入到数据集
cols_to_keep = ["admit", "gre", "gpa"]
data = df[cols_to_keep].join(dummy_ranks.loc[:, 'prestige_2':])

结果如下所示:

       admit gre  gpa       prestige_2  prestige_3  prestige_4
0        0  380  3.61           0           1           0
1        1  660  3.67           0           1           0
2        1  800  4.00           0           0           0
3        1  640  3.19           0           0           1
4        0  520  2.93           0           0           1
..     ...  ...   ...         ...         ...         ...
395      0  620  4.00           1           0           0
396      0  560  3.04           0           1           0
397      0  460  2.63           1           0           0
398      0  700  3.65           1           0           0
399      0  600  3.89           0           1           0

[400 rows x 6 columns]>

进行逻辑回归

在这里插入图片描述

完整代码

# !/usr/bin/env python
# —*— coding: utf-8 —*—
# @Time:    2020/1/8 14:14
# @Author:  Martin
# @File:    Logistic_Regression.py
# @Software:PyCharm

import pandas as pd
import statsmodels.api as sm

df = pd.read_csv("../res/binary.csv")
df.columns = ["admit", "gre", "gpa", "prestige"]
# 将prestige设置为虚拟变量
dummy_ranks = pd.get_dummies(df['prestige'], prefix='prestige')
# 将虚拟变量加入到数据集
cols_to_keep = ["admit", "gre", "gpa"]
data = df[cols_to_keep].join(dummy_ranks.loc[:, 'prestige_2':])
# 进行逻辑回归
train_cols = data.columns[1:]
logit = sm.Logit(data['admit'], data[train_cols])
# 拟合模型
res = logit.fit()



最终结果

Optimization terminated successfully.
         Current function value: 0.589306
         Iterations 5

参考资料

Python实现逻辑回归
R Data Analysis Examples: Logit Regression

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!