Loading

「机器学习算法的数学解析与Python实现」线性回归

机器学习一共有两条主线:

  1. 问题
  2. 模型

问题提出要求,模型给予解决。

线性回归

线性回归:用线性模型来解决回归问题。

线性回归的重点:

  • 回归问题
  • 线性方程
  • 偏差度量
  • 权重更新:优化方法

线性回归的算法原理

基本思路

机器学习的核心概念:在错误中学习。这需要两个步骤,首先知道偏离了多少,然后向减少偏差的方向调整权值。

  • 偏差度量:找到目标和实际的偏差距离,用“损失函数”表示;
  • 权值调整:通过“优化方法”来调整权值,使得偏差减小。

数学解析

\(\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,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 \]

具体步骤

线性回归算法信息表

album_temp_1609212127

线性回归问题可分为三步解决:

  1. 为假设函数初始化参数,通过初始的假设函数得到预测值;
  2. 将预测值代入损失函数,计算损失值;
  3. 根据损失值,利用梯度下降等优化方法,不断调整参数,使得损失值最小。

这个不断调整参数使得损失值最小的过程就是线性回归的学习过程,通常称为训练模型

在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\) 的相关参数。

线性回归算法的使用场景

线性回归算法的特点

截屏2021-01-28 下午8.29.35

posted @ 2021-12-25 08:51  活用数据  阅读(201)  评论(0编辑  收藏  举报