机器学习算法(一): 基于逻辑回归的分类预测 - 学习笔记
目录
学习知识点概要
统计学知识:逻辑回归理论
介绍
逻辑回归模型广泛用于各个领域,包括机器学习,大多数医学领域和社会科学,也是很多分类算法的基础组件。
逻辑回归,最为突出的两点就是其模型简单和模型的可解释性强。
逻辑回归模型的优劣势:
- 优点:实现简单,易于理解和实现;计算代价不高,速度很快,存储资源低;
- 缺点:容易欠拟合,分类精度可能不高
原理
Logistic回归虽然名字里带“回归”,但是它实际上是一种分类方法,主要用于两分类问题(即输出只有两种,分别代表两个类别),所以利用了Logistic函数(或称为Sigmoid函数),函数形式为:
l o g i ( z ) = 1 1 + e − z \displaystyle logi(z)=\frac{1}{1+e^{-z}} logi(z)=1+e−z1
其对应的函数图像可以表示如下:
通过上图我们可以发现 Logistic 函数是单调递增函数,并且在z=0的时候取值为0.5,并且
l
o
g
i
(
.
)
logi(.)
logi(.) 函数的取值范围为
(
0
,
1
)
(0,1)
(0,1)。
而回归的基本方程为 z = w 0 + ∑ i N w i x i z=w_0+\sum^N_iw_ix_i z=w0+∑iNwixi,将回归方程写入其中为:
p = p ( y = 1 ∣ x , θ ) = h θ ( x , θ ) = 1 1 + e − w 0 + ∑ N i w i x i \displaystyle p=p(y=1|x,\theta)=h_\theta(x,\theta)=\frac{1}{1+e^{-w_0+\sum_N^iw_ix_i}} p=p(y=1∣x,θ)=hθ(x,θ)=1+e−w0+∑Niwixi1
所以,
p
=
p
(
y
=
1
∣
x
,
θ
)
=
h
θ
(
x
,
θ
)
,
p
=
p
(
y
=
0
∣
x
,
θ
)
=
1
−
h
θ
(
x
,
θ
)
p=p(y=1|x,\theta)=h_\theta(x,\theta), p=p(y=0|x,\theta)=1-h_\theta(x,\theta)
p=p(y=1∣x,θ)=hθ(x,θ),p=p(y=0∣x,θ)=1−hθ(x,θ)
逻辑回归从其原理上来说,逻辑回归其实是实现了一个决策边界:对于函数
y
=
1
1
+
e
−
z
y=\frac{1}{1+e^{-z}}
y=1+e−z1,当
z
≥
0
z\ge 0
z≥0时,
y
≥
0.5
y\ge 0.5
y≥0.5,分类为1,当
z
<
0
z<0
z<0时,
y
<
0.5
y<0.5
y<0.5,分类为0,其对应的
y
y
y值我们可以视为类别1的概率预测值。
对于模型的训练而言:实质上来说就是利用数据求解出对应的模型的特定的 w w w。从而得到一个针对于当前数据的特征逻辑回归模型。
而对于多分类而言,将多个二分类的逻辑回归组合,即可实现多分类。
技术要求:熟练使用Python和相关库
Numpy和Pandas:数据的读取/载入,数据信息的简单查看,提供方便模型处理的array和DataFrame这两种基本数据对象。
## 基础函数库
import numpy as np
import pandas as pd
scikit-learn:
- 逻辑回归模型
- 教程案例所用的鸢尾花就是sklearn中自带的 iris数据;
## 导入逻辑回归模型函数
from sklearn.linear_model import LogisticRegression
## 利用 sklearn 中自带的 iris 数据作为数据载入,并利用Pandas转化为DataFrame格式
from sklearn.datasets import load_iris
## 利用accuracy(准确度)【预测正确的样本数目占总预测样本数目的比例】评估模型效果
from sklearn import metrics
## 为了正确评估模型性能,将数据划分为训练集和测试集,并在训练集上训练模型,在测试集上验证模型性能。
from sklearn.model_selection import train_test_split
Matplotlib和Seaborn:可视化描述
## 绘图函数库
import matplotlib.pyplot as plt
import seaborn as sns
在展示不同类别在不同特征上的分布差异情况时还用到了三维散点图
from mpl_toolkits.mplot3d import Axes3D
最终效果如下:
学习内容
代码流程
- Part1 Demo实践
- Step1:库函数导入
- Step2:模型训练
- Step3:模型参数查看
- Step4:数据和模型可视化
- Step5:模型预测
- Part2 基于鸢尾花(iris)数据集的逻辑回归分类实践
- Step1:库函数导入
- Step2:数据读取/载入
- Step3:数据信息简单查看
- Step4:可视化描述
- Step5:利用 逻辑回归模型 在二分类上 进行训练和预测
- Step6:利用 逻辑回归模型 在三分类(多分类)上 进行训练和预测
代码实现
学习问题与解答
1. 本节学习的难点是什么?
利用逻辑回归模型进行训练和预测。
课程先用简单数据进行了Demo演示,而后载入鸢尾花数据投入算法实战。
2. 如何在多分类上进行训练和预测?
可以先在二分类上进行训练和预测,成功后同理可在三(多)分类上 进行训练和预测。
1、分配测试集和训练集
## 测试集大小为20%, 80%/20%分
x_train, x_test, y_train, y_test = train_test_split(iris_features, iris_target, test_size = 0.2, random_state = 2020)
2、定义 逻辑回归模型
clf = LogisticRegression(random_state=0, solver='lbfgs')
3、在训练集上训练逻辑回归模型
clf.fit(x_train, y_train)
4、查看其对应的 w 0 w_0 w0和 w w w
print('weight:', clf.coef_)
print('intercept(w0):', clf.intercept_)
5、在训练集和测试集上分布利用训练好的模型进行预测
train_predict = clf.predict(x_train)
test_predict = clf.predict(x_test)
6、利用 predict_proba 函数预测其概率
train_predict_proba = clf.predict_proba(x_train)
test_predict_proba = clf.predict_proba(x_test)
7、利用accuracy(准确度)【预测正确的样本数目占总预测样本数目的比例】评估模型效果
print('The accuracy of the Logistic Regression is:',metrics.accuracy_score(y_train,train_predict))
print('The accuracy of the Logistic Regression is:',metrics.accuracy_score(y_test,test_predict))
学习思考与总结
案例中所用算法实际上已经在sklearn的LogisticRegression等模块中实现了,我们需要做的是基于对数据特征的理解套用模型进行程式化的训练和预测。
逻辑回归模型相对其他深度学习的模型简单易用,但是可调整的参数有限,模型和案例数据的拟合度不够高。由于新增的’versicolor’(1)和 ‘virginica’(2)这两个类别的特征,三分类的结果的预测准确度相比二分类有所下降,其根本原因是模型在预测这两类特征的过程中出现了错误。这显示出逻辑回归模型本身的局限性。
参考和引用
[1]: https://tianchi.aliyun.com/notebook-ai/detail?spm=5176.20222472.J_3678908510.2.8f5e67c2inoBLr&postId=170913