机器学习使用线性回归方法建模时,求损失函数最优解需要用到最小二乘法。相信很多朋友跟我一样,想先知道公式是什么,然后再研究它是怎么来的。所以不多说,先上公式。

对于线性回归方程\(f(x) = ax + b\),由最小二乘法得:

$$a = \frac{\sum (x_{i}-\overline{x})(y_{i}-\overline{y})}{\sum (x_{i}-\overline{x})^{2}}$$

$$b = \overline{y}-a\overline{x}$$

式中,\((x_{i}, y_{i})\)为实验所得的一组数据的真实值,\(\overline{x}为x_{i}\)的平均数,\(\overline{y}为y_{i}\)的平均数。

接下来推导一下公式是怎么得来的:

设损失函数:

\[M = \sum[y_{i}-f(x_{i})]^{2}
\]

由于是线性回归,式中f(x)是线性函数,令\(f(x) = ax + b\)

现在损失函数M表示为:

\[M = \sum[y_{i}-(ax_{i}+b)]^{2}\; (1)
\]

最小二乘法是求f(x)的参数a,b,使得损失函数M取得最小值。

即求M = M(a, b)在哪些点取得最小值。由多元函数极值求法,上述问题可以分别对a,b求偏导数,通过解方程组

$$\left{\begin{matrix}M_{a}(a, b) = 0

\

M_{b}(a, b) = 0

\end{matrix}\right.$$

来解决,即令

$$\left{\begin{matrix}\frac{\partial M}{\partial a} = 0; (2)

\

\

\frac{\partial M}{\partial b} = -2\sum [y_{i}-(ax_{i}+b)] = 0; (3)

\end{matrix}\right.$$

由平均数性质,\(\sum x_{i} = n\overline{x}\),\(\sum y_{i} = n\overline{y}\),其中n为实验数据组数。将其带入(3)式,可得:

\[b = \overline{y} - a\overline{x}\; (4)
\]

此式表明,线性回归函数必过点\((\overline{x}, \overline{y})\)

将(4)式带入(1)式,得:

\[M = \sum[y_{i}-(ax_{i}+\overline{y} - a\overline{x})]^{2} = \sum[(y_{i}-\overline{y})-a(x_{i} - \overline{x})]^{2}\; (5)
\]

现对(5)式求偏导数,应用多元复合函数求导法则,推导(2)式:

\[\frac{\partial M}{\partial a} = -2\sum[(y_{i}-\overline{y})-a(x_{i} - \overline{x})](x_{i}-\overline{x}) = 0\; (6)
\]

整理(6)式:

\[\sum(y_{i}-\overline{y})(x_{i}-\overline{x})-a\sum (x_{i} - \overline{x})^{2} = 0\; (7)
\]

最后可得:

\[a = \frac{\sum(x_{i}-\overline{x})(y_{i}-\overline{y})}{\sum (x_{i} - \overline{x})^{2}}\; (8)
\]

最后附上python代码实现最小二乘法:

import numpy as np
import matplotlib.pyplot as plt x = np.array([1., 2., 3., 4., 5.])
y = np.array([1., 3., 2., 3., 5.]) x_mean = np.mean(x)
y_mean = np.mean(y) num = 0.0
d = 0.0
for x_i, y_i in zip(x, y):
num += (x_i - x_mean) * (y_i - y_mean)
d += (x_i - x_mean) ** 2 a = num/d
b = y_mean - a * x_mean print('a is %f' % a)
print('b is %f' % b) y_hat = a * x + b plt.scatter(x, y)
plt.plot(x, y_hat, color='g')
plt.axis([0, 6, 0, 6])
plt.show()

最小二乘法公式推导及Python实现的更多相关文章

  1. 大盘及策略收益率的公式推导与Python代码

    一.模型前提与假设 设策略总天数为\(n\).第\(t\)日大盘的收盘价为\(P_t\).第\(t\)日的单日收益率为\(r_t\).\(n\)天的累积收益率为\(r_{cum}\) 假设策略仅买卖大 ...

  2. Python实现——一元线性回归(最小二乘法)

    2019/3/24 线性回归--最小二乘法公式法 暂时用python成功做出来了图像,但是其中涉及到的公式还是更多的来自于网络,尤其是最小二乘法公式中的两个系数的求解,不过目前看了下书高数也会马上提及 ...

  3. Alink漫谈(十一) :线性回归 之 L-BFGS优化

    Alink漫谈(十一) :线性回归 之 L-BFGS优化 目录 Alink漫谈(十一) :线性回归 之 L-BFGS优化 0x00 摘要 0x01 回顾 1.1 优化基本思路 1.2 各类优化方法 0 ...

  4. All I know about A/B Test (1) : 均值型指标与比值(率)型指标的计算区别

    因为最近在找实习,所以打算把自己之前学过的关数据分析的知识总结(复习)一下.在总结A/B test时,我发现中文互联网中关于A/B test的总结已经很多了,但是对于均值型指标和比值(率)型指标在设计 ...

  5. python数据分析入门——matplotlib的中文显示问题&最小二乘法

    正在学习<用python做科学计算>,在练习最小二乘法时遇到matplotlib无法显示中文的问题.查资料,感觉动态的加上几条语句是最好,这里贴上全部的代码. # -*- coding: ...

  6. (转)最小二乘法拟合圆公式推导及vc实现[r]

    (下文内容为转载,不过已经不清楚原创的是哪里了,特此说明) 转自: http://www.cnblogs.com/dotLive/archive/2006/10/09/524633.html 该网址下 ...

  7. 机器学习:Python中如何使用最小二乘法

    之所以说"使用"而不是"实现",是因为python的相关类库已经帮我们实现了具体算法,而我们只要学会使用就可以了.随着对技术的逐渐掌握及积累,当类库中的算法已经 ...

  8. Python实现实现基于最小二乘法的线性回归

    下面展示利用Python实现基于最小二乘法的线性回归模型,同时不需要引入其他科学计算以及机器学习的库. 利用Python代码表示如下: #首先引入数据集x,和y的值的大小利用Python的数据结构:列 ...

  9. 最小二乘法 及python 实现

    参考   最小二乘法小结     机器学习:Python 中如何使用最小二乘法 什么是” 最小二乘法” 呢 定义:最小二乘法(又称最小平方法)是一种数学优化技术,它通过最小化误差的平方和寻找数据的最佳 ...

随机推荐

  1. UILabel的行间距,字间距处理

    啥都不说了,直接上代码,做了一个Category #import <UIKit/UIKit.h> @interface UILabel (ChangeLineSpaceAndWordSpa ...

  2. 解决在linux下安装centos自带的mysql后,出现navicat远程连接失败的问题

    最近在学习关于数据库相关的东西,所以下午尝试在linux下自己搭建了myql,我的mysql是直接安装centos系统自带的,安装过程不再赘述 安装完成后,从linux后台登录也显示成功,但是就是从n ...

  3. Eclipse/MyEclipse超全常用快捷键汇总,绝对实用

    [MyEclipse CI 2019.4.0安装包下载] Eclipse的编辑功能非常强大,掌握了Eclipse快捷键功能,能大大提高开发效率.Eclipse中有如下一些和编辑相关的快捷键. 常用快捷 ...

  4. wordpress设置本地化语言

    wordpress语言本地化 在wordpress上很多插件不支持本地化语言如:中文,需要本地化,则需要制作本地化语言的po(用于编辑)和mo(用于机器识别)文件.可以没有*.po文件,但是不能没有* ...

  5. ubuntu中查看AMD GPU 状态的办法

    lshw -c video 运行命令:glxinfo | grep rendering 如果结果是“yes”,证明显卡驱动已经成功安装. 如果提示有问题,可能是系统里面没有安装mesa-utils,安 ...

  6. python-套接字编程之udp

    使用udp协议 服务端: #!/usr/bin/python3 # coding:utf-8 # Auther:AlphaPanda # Description:UDP服务端 # Version:1 ...

  7. 给DEDECMS广告管理中增加图片上传功能

    dedecms的广告管理功能稍微有点次,本文就是在dedecms广告管理原有的基础上增加广告图片上传功能. 安装方法,对应自己的dedecms版本下载对应的编码然后解压把里面的文件放在后台目录覆盖即可 ...

  8. 为什么second是秒也是第二?

    起源 早期在西方,一小时分为 60 分钟.后来,科学发达了.文明进步了,人们认为一分钟太粗放了.必须划分得更细致,于是就把一分钟划分成 60 等分.由于是对时间的第二次划分,就将新的 60 等分的“单 ...

  9. Python黑科技 | Python中四种运行其他程序的方式

    在Python中,可以方便地使用os模块来运行其他脚本或者程序,这样就可以在脚本中直接使用其他脚本或程序提供的功能,而不必再次编写实现该功能的代码.为了更好地控制运行的进程,可以使用win32proc ...

  10. jconsole性能监控

    1.进入tomcat bin目录 vim catalina.sh #!/bin/sh下面加入: #!/bin/shJAVA_OPTS="-Dcom.sun.management.jmxrem ...