ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-12-25 09:03:03  阅读:164  来源: 互联网

标签:范数 函数 Python 回归 算法 线性 model 解析


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

  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

标签:范数,函数,Python,回归,算法,线性,model,解析
来源: https://www.cnblogs.com/zhanhong/p/15729804.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有