专栏首页深度学习自然语言处理深度学习数学基础一--最小二乘法

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

之前总是先上手一些比较高级的神经网络算法,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

代码实现

注意区别点乘和叉乘

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等

)

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

代码实现:

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()

结果系数输出:

[[ 2.28283947]
 [ 3.46918764]
 [ 0.05473155]]

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

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

本文分享自微信公众号 - 深度学习自然语言处理(zenRRan),作者:zenRRan

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-08-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 12种降维方法终极指南(含Python代码)

    你遇到过特征超过1000个的数据集吗?超过5万个的呢?我遇到过。降维是一个非常具有挑战性的任务,尤其是当你不知道该从哪里开始的时候。拥有这么多变量既是一个恩惠—...

    zenRRan
  • 【论文】 NLP中命名实体识别从机器学习到深度学习的代表性研究

    NER是自然语言处理中相对比较基础的任务,但却是非常重要的任务。在NLP中,大部分的任务都需要NER的能力,例如,聊天机器人中,需要NER来提取实体完成对用户输...

    zenRRan
  • 【NLP】浅谈 Transformer-based 模型中的位置表示

    本文小结:本文主要对原始 Transformer[1]、RPR[2]以及 Transformer-XL[3] 中使用的位置表示方法,进行详细介绍。从最初的绝对位...

    zenRRan
  • python画箱线图

    py3study
  • Matplotlib使用笔记

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    村雨遥
  • PlotPub!一款让你欲罢不能的科研绘图工具箱

    PlotPub是K. M. Masum Habib开发的一款高质量绘图工具箱,作者将绘图相关的设置全部封装在了一个名为“Plot”的类中,只需要简单的设置即可绘...

    艾木樨
  • Python数据分析之Matplotlib(2)

    自己的状态已经调整过来了,今天恢复更新,之前的赠书活动仍然有效,在文末可以点击传送门,大家积极参与。今天介绍的是三剑客之一Matplotlib折线图的相关。

    PM小王
  • 干货 | 画论文折线图、曲线图?几个代码模板轻松搞定!

    这几天在搞论文图,唉说实话抠图这种东西真能逼死人。坐在电脑前抠上一天越看越丑,最后把自己丑哭了……

    短短的路走走停停
  • python matplotlib函数备忘

    matplotlib是python中一个非常好用的画图库,倾向于使用数据画图,设计思路与matlab中的plot相同。

    羽翰尘
  • Python数据处理从零开始----第四章(可视化)(2)目录正文

    =========================================================

    用户1359560

扫码关注云+社区

领取腾讯云代金券