前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >深度学习数学基础一--最小二乘法

深度学习数学基础一--最小二乘法

作者头像
zenRRan
发布于 2018-04-10 02:57:35
发布于 2018-04-10 02:57:35
75000
代码可运行
举报
运行总次数:0
代码可运行

之前总是先上手一些比较高级的神经网络算法,CNN,RNN等。可是总觉得有些知识原理总是羁绊着我进一步理解。这才意识到基础的重要性。所以,就一点一点的从基础数学最小二乘法开始。这里用到的就是咱们小学或初中学到的知识。我们也都知道深度学习就是矩阵的各种计算。所以这里我们将那些知识和大学的线性代数进行简单结合。

我们先了解向量之间的投影

比如这张图

已知:这是2维空间,A[3, 1], B[1, 3], 求B到A最短距离的点(也就是B到A的投影P的向量)。

我们可以先用A来表示P:P = A*x = [3, 1].T * x (x 是 A的线性组合的系数,是个变量,就是我们要求的实数)

若使BP距离最短,则使||P - B||^2最小就行,即 使||A*x - B||^2最小。

化解:

||A*x - B||^2 = (A*x)^2 - 2AB*x + B^2

对之求导并使之等于0,求最小值x

得:

2A^2x - 2AB = 0

A^2x = AB

因为这是矩阵运算,左成A^2的逆

则写成x = (A^2)^(-1) * AB

则P = A * x = A * (A^2)^(-1) * AB

代码实现

注意区别点乘和叉乘

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np
from matplotlib import pyplot as plt
A = np.array([[3], [1]])
B = np.array([[1], [3]])
P = A * np.linalg.inv(A.T.dot(A)) * (A.T.dot(B))
# print(P)
plt.plot(A[0], A[1], 'k-o')
plt.plot(B[0], B[1], 'r-o')
plt.plot(P[0], P[1], 'r-o')
plt.plot([B[0], P[0]], [B[1], P[1]], 'y-o')
plt.plot([0, A[0]], [0, A[1]], 'k-')
plt.ylim(0, 3)
plt.xlim(0, 3.5)
plt.text(A[0]+0.1, A[1], 'A')
plt.text(B[0], B[1]-0.1, 'B')
plt.text(P[0]+0.1, P[1]+0.1, 'P')
plt.show()

给定一堆点,求一条线来拟合这些点

比如有n个点(X1, Y1), ..., (Xn, Yn)

我们选取特征函数 y = ax^2 + bx + c

(

特征函数的选取可以任意函数,根据经验选取特征函数,比如也可以是y = ax^2 + bx + csinx+ de^2 + f等

)

那我们就有以下矩阵表示:

代码实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np
from matplotlib import pyplot as plt
x = np.linspace(-1, 1, 100)
y = 2.3*x*x + 3.5*x + 0.04
y_ = y + np.random.rand(len(x)) - 0.5
A = []
times = 2
for i in range(times+1):
    A.append(x**(times-i))
A = np.array(A).T
B = y_.reshape(y_.shape[0], 1)
w = np.linalg.inv(A.T.dot(A)).dot(A.T).dot(B)
pred_y = A.dot(w)
print(w)
plt.scatter(x, y_)
plt.plot(x, y, 'k-')
plt.plot(x, pred_y, 'r-')
plt.show()

结果系数输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[[ 2.28283947]
 [ 3.46918764]
 [ 0.05473155]]

黑线为理想曲线,红色为拟合曲线。

这样看,效果还是可以的。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-08-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 深度学习自然语言处理 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python SciPy 实现最小二乘法
Scipy 对优化最小二乘 Loss 的方法做了一些封装,主要有 scipy.linalg.lstsq 和 scipy.optimize.leastsq 两种,此外还有 scipy.optimize.curve_fit 也可以用于拟合最小二乘参数。
为为为什么
2023/04/08
1.5K0
Python SciPy 实现最小二乘法
寻找最小二乘法
都知道线性回归模型要求解权重向量w,最传统的做法就是使用最小二乘法。根据在scikit-learn的文档,模型sklearn.linear_model.LinearRegression,使用的就是最小二乘法(least squares ):
木羊
2022/04/11
3560
寻找最小二乘法
最小二乘法,残差,线性模型-线性回归
最小二乘法公式是一个数学的公式,在数学上称为曲线拟合,此处所讲最小二乘法,专指线性回归方程。
zhangjiqun
2024/12/14
1990
最小二乘法,残差,线性模型-线性回归
线性回归-最小二乘法入门(波士顿房价)
线性回归是一种统计学上常用的建模方法,用于描述自变量(输入)与因变量(输出)之间的线性关系。线性回归模型假设因变量与自变量之间存在着线性关系,这意味着通过自变量的线性组合可以预测因变量的数值。
GeekLiHua
2025/01/21
870
线性回归-最小二乘法入门(波士顿房价)
机器学习之线性回归(最小二乘法手写+sklearn实现)
这部分内容在我的CSDN博客中已经有提到,算是比较基础的部分。现在搬到公众号上,不能再像CSDN上那样简略,我尽量把它解释得通俗易懂一点。
Cyril-KI
2022/07/29
5010
机器学习之线性回归(最小二乘法手写+sklearn实现)
运用伪逆矩阵求最小二乘解
已经有工具可以解很多最小二乘的模型参数了,但是几个专用的最小二乘方法最多支持一元函数的求解,难以计算多元函数最小二乘解,此时就可以用伪逆矩阵求解了。
为为为什么
2023/04/09
1.8K0
最小二乘法曲线拟合
Fitting Parameters: [ 1.26607557e+04 -4.98135295e+04 7.91163644e+04 -6.47495637e+04 2.88643748e+04 -6.80602407e+03 7.57452772e+02 -2.89393911e+01 1.19739704e+01]
裴来凡
2022/05/29
1.1K0
最小二乘法曲线拟合
手撸机器学习算法 - 线性回归
如果说感知机是最最最简单的分类算法,那么线性回归就是最最最简单的回归算法,所以这一篇我们就一起来快活的用两种姿势手撸线性回归吧;
HoLoong
2021/06/17
1.2K0
手撸机器学习算法 - 线性回归
机器学习篇(2)——最小二乘法概念最小二乘法
前言:主要介绍了从最小二乘法到 概念 顾名思义,线性模型就是可以用线性组合进行预测的函数,如图: image.png 公式如下: image.png image.png 误差
DC童生
2018/04/27
2K0
机器学习篇(2)——最小二乘法概念最小二乘法
机器学习笔记之线性回归最小二乘法(公式推导和非调包实现)
博主前面一篇文章讲述了二维线性回归问题的求解原理和推导过程,以及使用python自己实现算法,但是那种方法只能适用于普通的二维平面问题,
Jetpropelledsnake21
2021/03/03
7480
Python-Numpy多维数组 -- 矩阵库、线性代数、绘图库Matplotlib
NumPy 包包含一个 Matrix库numpy.matlib。此模块的函数返回矩阵而不是返回ndarray对象。
用户7886150
2021/01/07
1.5K0
分子动力学模拟之SETTLE约束算法
在上一篇文章中,我们讨论了在分子动力学里面使用LINCS约束算法及其在具备自动微分能力的Jax框架下的代码实现。约束算法,在分子动力学模拟的过程中时常会使用到,用于固定一些既定的成键关系。例如LINCS算法一般用于固定分子体系中的键长关系,而本文将要提到的SETTLE算法,常用于固定一个构成三角形的体系,最常见的就是水分子体系。对于一个水分子而言,O-H键的键长在模拟的过程中可以固定,H-H的长度,或者我们更常见的作为一个H-O-H的夹角出现的参量,也需要固定。纯粹从计算量来考虑的话,RATTLE约束算法需要迭代计算,LINCS算法需要求矩阵逆(虽然已经给出了截断优化的算法),而SETTLE只涉及到坐标变换,显然SETTLE在约束大规模的水盒子时,性能会更加优秀。
DechinPhy
2022/05/09
9170
分子动力学模拟之SETTLE约束算法
[Hands On ML] 4. 训练模型
本文为《机器学习实战:基于Scikit-Learn和TensorFlow》的读书笔记。 中文翻译参考
Michael阿明
2021/02/19
3590
SciPy从入门到放弃
SciPy是一种以NumPy为基础,用于数学、工程及许多其他的科学任务的科学计算包,其使用的基本数据结构是由NumPy模块提供的多维数组,因此Numpy和SciPy协同使用可以更加高效地解决问题。SciPy很适合用于十分依赖数学和数值运算的问题,其内部的模块包括优化模块、线性代数模块、统计模块、傅里叶变化模块、积分模块、信号处理模块、图像处理模块、稀疏矩阵模块、插值模块等。
愷龍
2024/08/15
890
SciPy从入门到放弃
第0节:最小二乘法及numpy复现
最小二乘法就是要找到一组 使得 (残差平方和) 最小即,求
AI拉呱
2021/12/24
6070
机器学习之最小二乘法
1.背景:      1801年,意大利天文学家朱赛普·皮亚齐发现了第一颗小行星谷神星。经过40天的跟踪观测后,由于谷神星运行至太阳背后,使得皮亚齐失去了谷神星的位置。随后全世界的科学家利用皮亚齐的观测数据开始寻找谷神星,但是根据大多数人计算的结果来寻找谷神星都没有结果。时年24岁的高斯也计算了谷神星的轨道。奥地利天文学家海因里希·奥伯斯根据高斯计算出来的轨道重新发现了谷神星。       高斯使用的最小二乘法的方法发表于1809年他的著作《天体运动论》中,而法国科学家勒让德于1806年独立发现“最小二乘法
Gxjun
2018/03/27
8400
机器学习之最小二乘法
线性回归
传送门:人工智能视频列表-尚学堂,点开任意一个之后会发现他们会提供系列课程整合到一起的百度网盘下载,包括视频+代码+资料,都是免费的
py3study
2020/01/19
5050
最小二乘法求解线性回归模型
线性回归(linear regression)是一种线性模型,它假设输入变量 x 和单个输出变量 y 之间存在线性关系
用户9925864
2022/07/27
5930
最小二乘法求解线性回归模型
用 Python 做数学建模
数学建模中,大多数人都在用MATLAB,但MATLAB不是一门正统的计算机编程语言,而且速度慢还收费,最不能忍受的就是MATLAB编辑器不支持代码自动补全。python对于数学建模来说,是个非常好的选择。python中有非常著名的科学计算三剑客库:numpy,scipy和matplotlib,三者基本代替MATLAB的功能,完全能够应对数学建模任务。
KEVINGUO_CN
2020/03/16
2K0
Python实现最小二乘法
上一篇文章讲了最小二乘算法的原理。这篇文章通过一个简单的例子来看如何通过Python实现最小乘法的线性回归模型的参数估计。
讲编程的高老师
2020/08/14
1.8K0
相关推荐
Python SciPy 实现最小二乘法
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文