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')
该数据集样本数较少,总体把握不是很明显,但是还是能看出 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 检验统计量,其服从 分布。逻辑回归方程的拟合优度检验