《Deep Learning Series》
  • 深耕系列之深度学习笔记
  • 第一章 Linux学习环境相关配置
    • 1.1 Ubuntu18下有道词典的配置
    • 1.2 Ubuntu18 安装Gitbook
    • 1.3 Ubuntu18 git命令使用总结
    • 1.4 Latex 排版使用笔记
    • 1.5 Ubuntu下常用工具软件配置安装
    • 1.6 win10+ubuntu双系统修复ubuntu启动引导
    • 1.7 gitbook 插件等相关设置
    • 1.8 深度学习环境搭建
    • 1.9 hexo 实现本地图片加载
    • 1.10 hexo网页定制
    • 1.11 sublime text3插件介绍
    • 1.12 vsftpd.conf文件配置
    • 1.13 mysql 笔记
    • 1.14 ubuntu16_18安装peek工具录制gif
    • 1.15 ubuntu下goldendict有道爬虫小程序
    • 1.16 ubuntu18升级后部分应用不能中文输入的问题
    • 1.17 ubuntu下安装有道词典
    • 1.18 opencv 安装
    • 1.19 gym_gazabe安装配置
    • 1.20 docker 基础
    • 1.21 docker_配置权限问题
    • 1.22 jupyternotebook使用
  • 第二章 深度学习相关基础算法
    • 2.1 马尔科夫链
      • 2.1.1 马尔科夫简单模型预测实战笔记
      • 2.1.2 最大熵模型
      • 2.1.3 隐马尔科夫HMM
    • 2.2 矩阵相关基础知识
    • 2.3 线性回归
    • 2.4 决策树
    • 2.5 梯度下降和最小二乘法
    • 2.6 递归算法与迭代算法
    • 2.7 神经网络浅学笔记
    • 2.8 强化学习经验回放
    • 2.9 K近邻算法
    • 2.10 朴素贝叶斯法
    • 2.11 极大似然估计
    • 2.12 logistic regression
  • 第三章 深度学习框架学习
    • 3.1 PyTorch 学习
      • 3.1.2 Pytorch 之MNIST手写字识别分类
    • 3.2 tensorflow学习笔记
      • 3.2.1 tensorflow之MNIST
    • 3.3 matplotlib函数
    • 3.4 numpy函数
  • 第四章 ROS机器人
    • ROS室内仿真环境.md
    • ros and gazebo and gym_gazebo安装
    • ubuntu16 安装gym-gazebo
    • gym-gazebo安装后的测试
    • 基于DQN的gym_gazebo运行代码演示
  • 项目开发
    • Library占座小工具使用手册
  • 附录
    • Python 相关笔记
      • Python 帮助文档检索方法
      • Module篇使用future
    • Git 相关配置
      • git-推送新的文章到github其他分支上
      • gitignre 配置
      • gitignre 配置
      • Hexo 每次写好后deploy博客
      • MFC Socket 通信
      • python之tkinter入坑Pack
      • ubuntu 中安装sublime_text3
      • ubuntu18-正确-安装ShadowSocket
      • vultr+freenom实现主机域名的绑定.md
      • 值得收藏的网站
      • 搜索技巧
      • 第一篇博文
      • 简单的方法,越过付费获取在线的log设计.md
      • 网页设计基础笔记.md
      • 解决Chrome67版本以后不能离线安装插件的情况.md
    • 嵌入式相关笔记
      • STM32串口通信配置
      • STM32复位及通过函数判断是何种条件出发的复位
Powered by GitBook
On this page
  • 摘要
  • LinearRegression算法
  • 一、最小二乘法的拟合原理
  • 1.1 代数推导:
  • 1.2 矩阵推导
  • 1.3 小结
  • 二、线性回归
  • 2.1 一元线性回归
  • 2.2 多元线性回归

Was this helpful?

  1. 第二章 深度学习相关基础算法

2.3 线性回归

Previous2.2 矩阵相关基础知识Next2.4 决策树

Last updated 5 years ago

Was this helpful?

摘要

本篇文章笔记总结来自网络和书本,引用部分都有来源,内容主要介绍线性回归相关基础相关实际应用搞得入门例子,很简单,但是能说明线性回归相关基础的原理相关。

文章同步于:

LinearRegression算法

一、最小二乘法的拟合原理

最小二乘法定义如上图所示,但是初看可能会有点懵,上面的表示是啥意思,好接下来总结下我的理解

最小二乘法(又称最小平方法)是一种数学优化技术,除了能拟合直线还能拟合曲线问题。

书中截取部分如果可以这样理解αi\alpha_{i}αi​,如果是二次项的话y=α1x2+α2x+α3y=\alpha_{1} x^{2}+\alpha_{2} x + \alpha_{3}y=α1​x2+α2​x+α3​,知道了吧,就是一个二项式子中的待解参数。

本文为了推导和笔记的简单化,直接以拟合直线 f(x;a,b):y=ax+bf(x;a,b): y=ax+bf(x;a,b):y=ax+b

1.1 代数推导:

  • [1]. 假设拟合直线 f(x;a,b):y=ax+bf(x;a,b): y=ax+bf(x;a,b):y=ax+b

  • [2]. 已经由n个样本(xn,yn)(x_{n}, y_{n})(xn​,yn​)

  • [3]. 误差ei=yi−(axi+b)e_{i}=y_{i}-(ax_{i}+b)ei​=yi​−(axi​+b)

  • [4]. 当S=∑i=1nei2S = \sum_{i=1}^{n} e_{i}^{2}S=∑i=1n​ei2​为最小值时,即得到的a,b参数就是最小二乘法得到的解.

如何求解这些参数(a,b)

∂S∂b=−2(∑i=1nyi−nb−a∑i=1nxi)\frac{\partial S}{\partial b}=-2(\sum_{i=1}^{n}y_{i}-nb-a\sum_{i=1}^{n}x_{i})∂b∂S​=−2(∑i=1n​yi​−nb−a∑i=1n​xi​)

∂S∂a=−2(∑i=1nxiyi−b∑i=1nxi−a∑i=1nxi2)\frac{\partial S}{\partial a}=-2(\sum_{i=1}^{n}x_{i}y_{i}-b\sum_{i=1}{n}x_{i}-a\sum_{i=1}^{n}x_{i}^{2})∂a∂S​=−2(∑i=1n​xi​yi​−b∑i=1​nxi​−a∑i=1n​xi2​)

分别令上式中对a,b求偏导数的有点等于0,以此求取对a,b的最值.有:nxˉ=∑i=1nxi,nyˉ=∑i=1nyin\bar x=\sum_{i=1}^{n}x_i,n\bar y=\sum_{i=1}^{n}y_inxˉ=∑i=1n​xi​,nyˉ​=∑i=1n​yi​

得到:

a=∑i=1n(xi−xˉ)(yi−yˉ)∑i=1n(xi−xˉ)2a=\frac {\sum_{i=1}^{n}({x_i-\bar x})(y_i-\bar y)} {\sum_{i=1}^{n}({x_i-\bar x})^2}a=∑i=1n​(xi​−xˉ)2∑i=1n​(xi​−xˉ)(yi​−yˉ​)​

b=yˉ−axˉb=\bar y-a\bar xb=yˉ​−axˉ

a=n∑xiyi−∑xi∑yin∑xi2−(∑xi)2a=\frac {n\sum_{}^{}{x_iy_i}-\sum_{}^{}{x_i}\sum_{}^{}{y_i}} {n\sum_{}^{}{x_i}^2-(\sum_{}^{}{x_i})^2}a=n∑​xi​2−(∑​xi​)2n∑​xi​yi​−∑​xi​∑​yi​​

b=∑xi2∑yi−∑xi∑xiyin∑xi2−(∑xi)2b=\frac {\sum_{}^{}{x_i}^2\sum_{}^{}{y_i}-\sum_{}^{}{x_i}\sum_{}^{}{x_iy_i}} {n\sum_{}^{}{x_i}^2-(\sum_{}^{}{x_i})^2}b=n∑​xi​2−(∑​xi​)2∑​xi​2∑​yi​−∑​xi​∑​xi​yi​​

1.1.1 代数推导的代码实现

import numpy as np
import matplotlib.pyplot as plt

def calcAB(x,y):
    n = len(x)
    sumX,sumY,sumXY,sumXX =0,0,0,0
    for i in range(0,n):
        sumX  += x[i]
        sumY  += y[i]
        sumXX += x[i]*x[i]
        sumXY += x[i]*y[i]
    a = (n*sumXY -sumX*sumY)/(n*sumXX -sumX*sumX)
    b = (sumXX*sumY - sumX*sumXY)/(n*sumXX-sumX*sumX)
    return a,b,

xi = [1,2,3,4,5,6,7,8,9,10]
yi = [10,11.5,12,13,14.5,15.5,16.8,17.3,18,18.7]
a,b=calcAB(xi,yi)
print("y = %10.5fx + %10.5f" %(a,b))
x = np.linspace(0,10)
y = a * x + b
plt.plot(x,y)
plt.scatter(xi,yi)
plt.show()

1.2 矩阵推导

对于y=ax+by=ax+by=ax+b,转为向量的形式为

W=[w0w1],X=[1x1]W=\begin{bmatrix} w_0\\ w_1 \end{bmatrix},X=\begin{bmatrix} 1\\ x_1 \end{bmatrix}W=[w0​w1​​],X=[1x1​​]

于是: y=w1x1+w0=WTXy=w_1x_1+w_0=W^TXy=w1​x1​+w0​=WTX

损失函数为:

L=1n∑i=1n(yn−(WTX)2)=1n(y−XW)T(y−XW)L=\frac{1}{n}\sum_{i=1}^{n}(y_n-(W^TX)^2)=\frac{1}{n}(y-XW)^T(y-XW)L=n1​i=1∑n​(yn​−(WTX)2)=n1​(y−XW)T(y−XW)

最后可化为

1nXTWTXW−2nXTWTy+1nyTy\frac{1}{n}X^TW^TXW-\frac{2}{n}X^TW^Ty+\frac{1}{n}y^Tyn1​XTWTXW−n2​XTWTy+n1​yTy

令偏导为0

∂L∂W=2nXTXW−2nXTy=0\frac{\partial L}{\partial W}=\frac{2}{n}X^TXW-\frac{2}{n}X^Ty=0∂W∂L​=n2​XTXW−n2​XTy=0

另外:

(XTX)−1XTX=E,EW=W(X^TX)^{-1}X^TX=E,EW=W(XTX)−1XTX=E,EW=W,则

(XTX)−1XTXW=(XTX)−1XTy,W=(XTX)−1XTy(X^TX)^{-1}X^TXW=(X^TX)^{-1}X^Ty,W=(X^TX)^{-1}X^Ty(XTX)−1XTXW=(XTX)−1XTy,W=(XTX)−1XTy

1.2.1 代码实现:

import numpy as np
import matplotlib.pyplot as plt

x = [1,2,3,4,5,6,7,8,9,10]
y = [10,11.5,12,13,14.5,15.5,16.8,17.3,18,18.7]

A = np.vstack([x,np.ones(len(x))]).T

a,b = np.linalg.lstsq(A,y)[0]
print("y = %10.5fx + %10.5f" %(a,b))
x = np.array(x)
y = np.array(y)

plt.plot(x,y,'o',label='data',markersize=10)
plt.plot(x,a*x+b,'r',label='line')
plt.show()

拟合的效果(蓝线)

1.3 小结

二、线性回归

线性回归的目的是找到一个与这些数据最为温和的线性函数,用来预测或者分类,主要解决线性问题。 一般来说,线性回归问题都可以通过最小二乘法来求出方程。线性回归属于监督学习,因此方法和监督学习应该一样,先给一个训练集,根据这个训练集学习出一个线性函数,然后测试这个函数训练的好不好(拟合是否恰当)。Cost Function 越小的函数,说明训练数据拟合程度越好。

  • 线性回归,通过数据集的线性组合来预测函数:

f(x)=ω1x1+ω2x2+ω3x3+...+ωdxd+bf(x)=\omega_{1}x_{1}+\omega_{2}x_{2}+\omega_{3}x_{3}+...+\omega_{d}x_{d}+bf(x)=ω1​x1​+ω2​x2​+ω3​x3​+...+ωd​xd​+b

一般向量形式写为:

f(x)=ωTx+bf(x)=\omega^{T}x+bf(x)=ωTx+b

其中的ω=(ω1;ω2;ω2;...ωd)\omega=(\omega_{1};\omega_{2};\omega_{2};...\omega_{d})ω=(ω1​;ω2​;ω2​;...ωd​)

x1,x2,...xkx_{1},x_{2},...x_{k}x1​,x2​,...xk​是一组独立的预测变量

ω1,ω2,...ωk\omega_{1},\omega_{2},...\omega_{k}ω1​,ω2​,...ωk​为模型从训练数据中学习得到的参数,或称赋予每个变量的权值。

b是一个学习到的参数,这个现行函数中的常量也称模型的偏置(Bias)

  • 根据输入属性可分为一元,二元......多元线性回归。

多元数据集的定义如下:

D=[xi,j,yi]D=\left [ x_{i,j}, y_{i}\right ]D=[xi,j​,yi​],其中i,表示数据集第i位序列的值,而j则表示在第i位x的属性是j种属性,即数据集中,x(i,j),i维行,j维纵坐标的矩阵。

即数据集j元的属性矩阵表示为:

[x1,1x1,2...x1,j−1x1,jx2,1x2,2...x2,j−1x2,j...............xi,1xi,2...xi,j−1xi,j]\begin{bmatrix} x_{1,1} & x_{1,2} & ... & x_{1,j-1} & x_{1,j}\\ x_{2,1} & x_{2,2} & ... & x_{2,j-1} & x_{2,j}\\ ... & ... & ... & ... & ...\\ x_{i,1} & x_{i,2} & ... & x_{i,j-1} & x_{i,j} \end{bmatrix}​x1,1​x2,1​...xi,1​​x1,2​x2,2​...xi,2​​............​x1,j−1​x2,j−1​...xi,j−1​​x1,j​x2,j​...xi,j​​​

比如3元的表示一个西瓜好坏,【hue, root, echo】,加入预测函数的参数已经求得ω=[0.2,0.5,0.3],b=1\omega=\left [ 0.2, 0.5, 0.3 \right ],b=1ω=[0.2,0.5,0.3],b=1,则好瓜(good)函数fgood(x)=0.2⋅xhue+0.5⋅xroot+0.3⋅xecho+1f_{good}(x)=0.2 \cdot x_{hue}+0.5 \cdot x_{root}+0.3 \cdot x_{echo}+1fgood​(x)=0.2⋅xhue​+0.5⋅xroot​+0.3⋅xecho​+1

2.1 一元线性回归

  • 输入属性只有一个的情况,称一元线性回归

属性:

这里考虑一元的情况则数据集为: D=[xi,yi]i=1mD=\left [ x_{i}, y_{i}\right ]_{i=1}^{m}D=[xi​,yi​]i=1m​,即上面矩阵表示的j元数据集中j=1,现在我们来尝试一元的线性回归。

  • [1] 假设我们预测函数形式:f(xi)=ωxi+bif(x_{i})=\omega x_{i}+b_{i}f(xi​)=ωxi​+bi​,使得f(xi)≈yif(x_{i})\approx y_{i}f(xi​)≈yi​.

接下来我们引入上面的最小二乘法求参数ω,b\omega , bω,b.

  • [2] 假设最小均方误差函数为:

eω∗,b∗=arg(ω,b)min∑i=1m(f(xi)−yi)2e_{\omega^*,b^*}=arg_{(\omega,b)}min \sum_{i=1}^{m}(f(x_{i})-y_{i})^2eω∗,b∗​=arg(ω,b)​min∑i=1m​(f(xi​)−yi​)2

  • [3] 对上式e的函数分别对ω,b\omega,bω,b求偏导,对偏导结果赋值0,求ω,b\omega,bω,b值。

  • [4] 偏导数

∂Eω,b∂ω=2(ω∑i=1mxi2−∑i=1m(yi−b)xi)\frac{\partial E_{\omega,b}}{\partial \omega}=2(\omega\sum_{i=1}^{m}x_{i}^{2}-\sum_{i=1}^{m}(y_{i}-b)x_{i})∂ω∂Eω,b​​=2(ω∑i=1m​xi2​−∑i=1m​(yi​−b)xi​)

∂Eω,b∂b=2(mb−∑i=1m(yi−ωxi))\frac{\partial E_{\omega,b}}{\partial b}=2(mb-\sum_{i=1}^{m}(y_{i} - \omega x_{i}))∂b∂Eω,b​​=2(mb−∑i=1m​(yi​−ωxi​))

  • [5] 上一步骤中的偏导数都设为零,以此来求得ω,b\omega , bω,b.

ω=∑i=1myi(xi−xˉ)∑i=1mxi2−1m(∑i=1mxi)2\omega = \frac{\sum_{i=1}^{m} y_{i}(x_{i}-\bar{x})}{\sum_{i=1}^{m}x_{i}^{2}-\frac{1}{m}(\sum_{i=1}^{m}x_{i})^2}ω=∑i=1m​xi2​−m1​(∑i=1m​xi​)2∑i=1m​yi​(xi​−xˉ)​

b=1m∑i=1m(yi−ωxi),xˉ=1m∑i=1mxib=\frac{1}{m}\sum_{i=1}^{m}(y_{i}-\omega x_{i}),\bar{x}=\frac{1}{m}\sum_{i=1}^{m}x_{i}b=m1​∑i=1m​(yi​−ωxi​),xˉ=m1​∑i=1m​xi​,xˉ\bar{x}xˉ为序列x的均值。

这里一元的线性回归,用最小二乘法求解的参数估计,称为线性回归模型的最小二乘法“参数估计”(parameter estimation).

2.2 多元线性回归

类似一元,但是求解 估计的参数矩阵ω,b\omega, bω,b,就需要全部看成矩阵的求解方法求出。见最小二乘法矩阵推导那一节,不再具体推推导了,在2.1节基础上明白线性回归,多元回归思想即可明白。

我的gitbook
学习参考来源
最小二乘法
拟合图
最小二乘法
切比雪夫算法