Python 机器学习——回归(逻辑回归)


0 前言

本次教程仍然分为三部分

  • 逻辑回归在二分类问题的应用
  • 逻辑回归在大数据集多分类问题的应用
  • 练习题

如想了解逻辑回归的相关理论知识,可以参考:Logistic Regression(逻辑回归)原理及公式推导

对于本系列教程如有建议可以在留言区评论哦~


1 考试成绩预测

(本节介绍如何利用逻辑回归模型进行二分类预测)
  关于课程“中级宏观经济学”的新教学方法 PSI 的效果评价的数据资料如下表。其中,GPA 为修该门课程前的学分绩点;TUCH 为修该门课程前的摸底测试成绩;PSI 为 1 表示使用 PSI 方法;LG 为该门课程的考试成绩取值为 1(LG=A) 或 0(LG=B 或 LG=C)。由于成绩只有 0 或 1 两种取值,因此该问题为二分类问题。

序号GPATUCHPSILG
12.662000
22.892200
33.282400
42.921200
54.002101
62.861700
72.761700
82.892100
93.032500
103.922901
112.632000
123.322300
133.572300
143.262501
153.532600
162.741900
172.752500
182.831900
193.122310
203.122311
212.062210
223.622811
232.891410
243.512610
253.542411
262.832711
273.391711
282.672410
293.652111
304.002511
313.102110
322.391911

  使用 sklearn 中的 LogisticRegression 类进行模型的构建

  • 导入宏包

  导入模型构建所需要的库:

# 导入宏包
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
#隐藏警告
import warnings
warnings.filterwarnings('ignore')
  • 导入数据
      利用 pandas 库中的 pd.read_excel 函数进行数据读取:
# 导入数据
data = pd.read_excel('data.xlsx')
# 划分数据集
x_train = data.iloc[:, 1:4]
y_train = data.iloc[:, 4]
  • 数据可视化
      可视化有利于对数据进行整体的把握:
# 可视化
plt.figure()
plt.plot(x_train.GPA[(x_train.PSI == 0) & (data.LG == 0)], x_train.TUCH[(x_train.PSI == 0) & (data.LG == 0)], 'bx')
plt.plot(x_train.GPA[(x_train.PSI == 0) & (data.LG == 1)], x_train.TUCH[(x_train.PSI == 0) & (data.LG == 1)], 'ro')
plt.xlabel('GPA')
plt.ylabel('TUSH')
plt.legend(('LG=0', 'LG=1'))
plt.title('PSI=0')
plt.figure()
plt.plot(x_train.GPA[(x_train.PSI == 1) & (data.LG == 0)], x_train.TUCH[(x_train.PSI == 1) & (data.LG == 0)], 'bx')
plt.plot(x_train.GPA[(x_train.PSI == 1) & (data.LG == 1)], x_train.TUCH[(x_train.PSI == 1) & (data.LG == 1)], 'ro')
plt.xlabel('GPA')
plt.ylabel('TUSH')
plt.legend(('LG=0', 'LG=1'))
plt.title('PSI=1')


PSI=0

PSI=1

  该数据集样本数较少,总体把握不是很明显,但是还是能看出 GPA 与 TUCH 越大成绩越好,且采用 PSI 方法下成绩好的更多。

  • 构建模型
LR = LogisticRegression()
LR.fit(x_train, y_train)
LR.predict([[3.32, 20, 1]])
  • 结果分析
print(LR.score(x_train, y_train))
print(LR.coef_)
print(LR.intercept_)

输出为:

0.71875
[[ 0.32590462 -0.05076111  1.01457151]]
[-0.9018812]

因此逻辑回归模型为p(x_1,x_2,x_3) = \frac{e^{0.3259x_1-0.0508x_2+1.0145x_3-0.919}}{1+e^{0.3259x_1-0.0508x_2+1.0145x_3-0.919}}p(x_1,x_2,x_3) = \frac{1}{1+e^{-0.3259x_1+0.0508x_2-1.0145x_3+0.919}}其中,x_1为 GPA,x_2为 TUCH,x_3表示是否使用 PSI 方法,p(x_1,x_2,x_3)是模型给出的该门考试成绩为 1 的概率。由模型可知,是否使用 PSI 方法,对成绩的好坏影响极大,验证了 PSI 教学方法的作用


2 鸢尾花分类

本节介绍如何利用逻辑回归模型进行多分类预测
  数据集为 UCI 公开的 Iris 数据集,样本数为 150 个,有 4 个特征,分别是花萼长度、花萼宽度、花瓣长度、花瓣宽度,类别标签为 Setosa、Versicolour、Viriginica。

  • 导入数据

  使用 sklearn 中的 datasets 模块导入数据集:

import pandas as pd
from sklearn import datasets
iris_dataset = datasets.load_iris()

  load_iris 返回的是一个 Bunch 对象,与字典十分相似,里面包含键值对

  • 使用留出法检验模型

  使用 sklearn.model_selection 中的 train_test_split 对数据进行划分

from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(iris_dataset.data, iris_dataset.target, random_state=0)
  • 观察数据
      同样我们也采用 散点图矩阵 两两查看所有的数据特征


    散点图矩阵

      对角线上是每个特征的直方图。由图我们可以看出利用这些测试数据基本可以按三个类别区分开。这说明机器学习模型可能可以学会区分他们。

  • 构建模型

#隐藏警告
import warnings
warnings.filterwarnings('ignore')
from sklearn.linear_model import LogisticRegression
LR = LogisticRegression()
LR.fit(x_train, y_train)
  • 模型预测及评估
y_pred = LR.predict(x_test)
print('Test set prections:\n {}'.format(y_pred))
print('Test set score: {:.3f}'.format(np.mean(y_pred == y_test)))

结果:

Test set prections:
 [2 1 0 2 0 2 0 1 1 1 2 1 1 1 1 0 2 1 0 0 2 2 0 0 2 0 0 1 1 0 2 2 0 2 2 2 0 2]
Test set score: 0.868

3 练习题

  • 检验逻辑回归方程的显著性

  逻辑回归方程的显著性检验的目的是检验自变量全体与 \text{Logit} P的线性关系是否显著,从而决定逻辑回归模型是否合理。

  • 检验逻辑回归系数的显著性
      逻辑回归系数的显著性检验目的是逐个检验各自变量是否与 \text{Logit} P 有显著的线性关系,对结束 \text{Logit} P 具有重要贡献。一般采用 Wald 检验统计量,其服从 \chi^2(1) 分布。

  • 逻辑回归方程的拟合优度检验

https://www.jianshu.com/p/03e8942fa6b1

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论