「机器学习算法的数学解析与Python实现」线性回归
机器学习一共有两条主线:
- 问题
- 模型
问题提出要求,模型给予解决。
线性回归
线性回归:用线性模型来解决回归问题。
线性回归的重点:
- 回归问题
- 线性方程
- 偏差度量
- 权重更新:优化方法
线性回归的算法原理
基本思路
机器学习的核心概念:在错误中学习。这需要两个步骤,首先知道偏离了多少,然后向减少偏差的方向调整权值。
- 偏差度量:找到目标和实际的偏差距离,用“损失函数”表示;
- 权值调整:通过“优化方法”来调整权值,使得偏差减小。
数学解析
\(\hat{y}\) 表示估计值,\(y\)表示实际值。
1.线性回归的假设函数
\[H(x) : \hat{y} = w^Tx_i + b
\]
2.线性回归的损失函数
线性回归的损失函数使用L2范数来度量偏差。
\[L(x) = \| \hat{y} - y \|_2^2
\]
3.线性回归的优化方法表达式
\[\min\limits_{w,b} L(x) = \min\limits_{w,b} \| \hat{y} - y \|_2^2
\]
这个公式的含义是,通过调节参数 \(w\) 和 \(b\) ,使得损失函数的表达式 \(\| \hat{y} - y \|_2^2\) 求得最小值。
4.范数
参考:
范数在欧几里得空间称为欧式距离。
机器学习中最常用的是L1,L2范数。
L1范数:
\[\|x\|_1 = \sum_{i=1}^n|x_i|
\]
L2范数:
\[\|x\|_2 = \sqrt{\sum_{i=1}^n x_i^2}
\]
L1,L2范数都可以做损失函数使用。
L1损失函数
也被称为最小绝对值偏差(LAD),绝对值损失函数(LAE)。
\[L = \sum_{i=1}^n |y - \hat{y}|
\]
L2损失函数
也被称为最小平方误差(LSE)。
\[L = \sum_{i=1}^n (y - \hat{y})^2
\]
具体步骤
线性回归算法信息表
线性回归问题可分为三步解决:
- 为假设函数初始化参数,通过初始的假设函数得到预测值;
- 将预测值代入损失函数,计算损失值;
- 根据损失值,利用梯度下降等优化方法,不断调整参数,使得损失值最小。
这个不断调整参数使得损失值最小的过程就是线性回归的学习过程,通常称为训练模型。
在Python中使用线性回归算法
Scikit-Learn涵盖了主流的机器学习算法,常用的几个库如下:
- linear_model,线性模型算法族库
- neighbors,最近邻算法族库
- naive_bayes,朴素贝叶斯模型算法族库
- tree,决策树模型算法族库
- svm,支持向量机模型算法族库
- neural_network,神经网络模型算法族库
在使用算法之前,先构造一个简单的数据集:
import matplotlib.pyplot as plt
import numpy as np
# 生成数据集
x = np.linspace(-3, 3, 30)
y = 2 * x + 1
# 数据集绘图
plt.scatter(x, y)
数据点分布图如下:
因为Scikit-Learn中线性回归算法的fit方法需要传入的x和y是两组矩阵,每一行为同一样本的信息,因此需要把刚刚生成的数据进行格式转换:
# 构造成矩阵形式
x = [[i] for i in x] # 训练集特征值
y = [[i] for i in y] # 训练集标签值
x_ = [[1], [2]] # 测试集特征值
Scikit-Learn对各类机器学习算法进行了良好封装,对于不同的模型算法,都只需要经过类似的简单三步就可以进行预测。
# 从sklearn中导入线性模型中的线性回归算法
from sklearn import linear_model
model = linear_model.LinearRegression()
# 训练线性回归模型
model.fit(x, y)
# 进行预测
model.predict(x_)
预测结果:
array([[3.],
[5.]])
同时可以通过model.coef_
和model.intercept_
分别查看斜率和截距:
(array([[2.]]), array([1.]))
线性回归算法确实正确地学习到了目标函数 \(y=2x+1\) 的相关参数。
线性回归算法的使用场景
线性回归算法的特点