使用的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
参考资料
来源:CSDN
作者:虐猫人薛定谔i
链接:https://blog.csdn.net/Deep___Learning/article/details/103890675