「机器学习算法的数学解析与Python实现」线性回归
2021/12/25 9:07:27
本文主要是介绍「机器学习算法的数学解析与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,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\) 的相关参数。
线性回归算法的使用场景
线性回归算法的特点
这篇关于「机器学习算法的数学解析与Python实现」线性回归的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门