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


0 前言

本次教程分为三部分

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

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


1 考试成绩预测

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

序号 GPA TUCH PSI LG
1 2.66 20 0 0
2 2.89 22 0 0
3 3.28 24 0 0
4 2.92 12 0 0
5 4.00 21 0 1
6 2.86 17 0 0
7 2.76 17 0 0
8 2.89 21 0 0
9 3.03 25 0 0
10 3.92 29 0 1
11 2.63 20 0 0
12 3.32 23 0 0
13 3.57 23 0 0
14 3.26 25 0 1
15 3.53 26 0 0
16 2.74 19 0 0
17 2.75 25 0 0
18 2.83 19 0 0
19 3.12 23 1 0
20 3.12 23 1 1
21 2.06 22 1 0
22 3.62 28 1 1
23 2.89 14 1 0
24 3.51 26 1 0
25 3.54 24 1 1
26 2.83 27 1 1
27 3.39 17 1 1
28 2.67 24 1 0
29 3.65 21 1 1
30 4.00 25 1 1
31 3.10 21 1 0
32 2.39 19 1 1

  使用 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]

因此逻辑回归模型为即其中,为 GPA,为 TUCH,表示是否使用 PSI 方法,是模型给出的该门考试成绩为 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 练习题

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

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

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

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

你可能感兴趣的:(Python 机器学习——回归(逻辑回归))