最小二乘法及其python实现详解


Posted in Python onFebruary 24, 2020

最小二乘法Least Square Method,做为分类回归算法的基础,有着悠久的历史(由马里·勒让德于1806年提出)。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。

那什么是最小二乘法呢?别着急,我们先从几个简单的概念说起。

假设我们现在有一系列的数据点 最小二乘法及其python实现详解 ,那么由我们给出的拟合函数h(x)得到的估计量就是 最小二乘法及其python实现详解 ,那么怎么评估我们给出的拟合函数与实际待求解的函数的拟合程度比较高呢?这里我们先定义一个概念:残差 最小二乘法及其python实现详解 , 我们估计拟合程度都是在残差的基础上进行的。下面再介绍三种范数:

• ∞-范数:残差绝对值的最大值 最小二乘法及其python实现详解 ,即所有数据点中残差距离的最大值

• 1-范数:绝对残差和最小二乘法及其python实现详解 ,即所有数据点残差距离之和

• 2-范数:残差平方和 最小二乘法及其python实现详解

前两种范数是最容易想到,最自然的,但是不利于进行微分运算,在数据量很大的情况下计算量太大,不具有可操作性。因此一般使用的是2-范数。

说了这么多,那范数和拟合有什么关系呢?拟合程度,用通俗的话来讲,就是我们的拟合函数h(x)与待求解的函数y之间的相似性。那么2-范数越小,自然相似性就比较高了。

由此,我们可以写出最小二乘法的定义了:

对于给定的数据 最小二乘法及其python实现详解 ,在取定的假设空间H中,求解h(x)∈H,使得残差 最小二乘法及其python实现详解 的2-范数最小,即

最小二乘法及其python实现详解

从几何上讲,就是寻找与给定点 最小二乘法及其python实现详解 距离平方和最小的曲线y=h(x)。h(x)称为拟合函数或者最小二乘解,求解拟合函数h(x)的方法称为曲线拟合的最小二乘法。

那么这里的h(x)到底应该长什么样呢?一般情况下,这是一条多项式曲线:

最小二乘法及其python实现详解

这里h(x,w)是一个n次多项式,w是其参数。

也就是说,最小二乘法就是要找到这样一组 最小二乘法及其python实现详解 ,使得 最小二乘法及其python实现详解 最小。

那么如何找到这样的w,使得其拟合函数h(x)与目标函数y具有最高拟合程度呢?即最小二乘法如何求解呢,这才是关键啊。

假设我们的拟合函数是一个线性函数,即:

最小二乘法及其python实现详解

(当然,也可以是二次函数,或者更高维的函数,这里仅仅是作为求解范例,所以采用了最简单的线性函数)那么我们的目标就是找到这样的w,

最小二乘法及其python实现详解

这里令 最小二乘法及其python实现详解 为样本 最小二乘法及其python实现详解 的平方损失函数

这里的Q(w)即为我们要进行最优化的风险函数。

学过微积分的同学应该比较清楚,这是一个典型的求解极值的问题,只需要分别对 18 求偏导数,然后令偏导数为0,即可求解出极值点,即:

最小二乘法及其python实现详解

接下来只需要求解这个方程组即可解出w_i 的值

============ 分割分割 =============

上面我们讲解了什么是最小二乘法,以及如何求解最小二乘解,下面我们将通过Python来实现最小二乘法。

这里我们把目标函数选为y=sin(2πx),叠加上一个正态分布作为噪音干扰,然后使用多项式分布去拟合它。

代码:

# _*_ coding: utf-8 _*_
# 作者: yhao
# 博客: http://blog.csdn.net/yhao2014
# 邮箱: yanhao07@sina.com
 
import numpy as np # 引入numpy
import scipy as sp
import pylab as pl
from scipy.optimize import leastsq # 引入最小二乘函数
 
n = 9 # 多项式次数
 
 
# 目标函数
def real_func(x):
 return np.sin(2 * np.pi * x)
 
 
# 多项式函数
def fit_func(p, x):
 f = np.poly1d(p)
 return f(x)
 
 
# 残差函数
def residuals_func(p, y, x):
 ret = fit_func(p, x) - y
 return ret
 
 
x = np.linspace(0, 1, 9) # 随机选择9个点作为x
x_points = np.linspace(0, 1, 1000) # 画图时需要的连续点
 
y0 = real_func(x) # 目标函数
y1 = [np.random.normal(0, 0.1) + y for y in y0] # 添加正太分布噪声后的函数
 
p_init = np.random.randn(n) # 随机初始化多项式参数
 
plsq = leastsq(residuals_func, p_init, args=(y1, x))
 
print 'Fitting Parameters: ', plsq[0] # 输出拟合参数
 
pl.plot(x_points, real_func(x_points), label='real')
pl.plot(x_points, fit_func(plsq[0], x_points), label='fitted curve')
pl.plot(x, y1, 'bo', label='with noise')
pl.legend()
pl.show()

输出拟合参数:

最小二乘法及其python实现详解

图像如下:

最小二乘法及其python实现详解

从图像上看,很明显我们的拟合函数过拟合了,下面我们尝试在风险函数的基础上加上正则化项,来降低过拟合的现象:

最小二乘法及其python实现详解

为此,我们只需要在残差函数中将lambda^(1/2)p加在了返回的array的后面

regularization = 0.1 # 正则化系数lambda
 
 
# 残差函数
def residuals_func(p, y, x):
 ret = fit_func(p, x) - y
 ret = np.append(ret, np.sqrt(regularization) * p) # 将lambda^(1/2)p加在了返回的array的后面
 return ret

输出拟合参数:

最小二乘法及其python实现详解

图像如下:

最小二乘法及其python实现详解

很明显,在适当的正则化约束下,可以比较好的拟合目标函数。

注意,如果正则化项的系数太大,会导致欠拟合现象(此时的惩罚项权重特别高)

如,设置regularization=0.1时,图像如下:

最小二乘法及其python实现详解

此时明显欠拟合。所以要慎重进行正则化参数的选择。

以上这篇最小二乘法及其python实现详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中的exec、eval使用实例
Sep 23 Python
Python算法应用实战之队列详解
Feb 04 Python
Python 专题二 条件语句和循环语句的基础知识
Mar 19 Python
Python找出微信上删除你好友的人脚本写法
Nov 01 Python
python模糊图片过滤的方法
Dec 14 Python
torch 中各种图像格式转换的实现方法
Dec 26 Python
关于Keras模型可视化教程及关键问题的解决
Jan 24 Python
Python装饰器的应用场景代码总结
Apr 10 Python
Jupyter Notebook安装及使用方法解析
Nov 12 Python
Pycharm中使用git进行合作开发的教程详解
Nov 17 Python
python3通过subprocess模块调用脚本并和脚本交互的操作
Dec 05 Python
PyMongo 查询数据的实现
Jun 28 Python
在Python 的线程中运行协程的方法
Feb 24 #Python
Python 爬取必应壁纸的实例讲解
Feb 24 #Python
Python unittest工作原理和使用过程解析
Feb 24 #Python
Python 剪绳子的多种思路实现(动态规划和贪心)
Feb 24 #Python
用python介绍4种常用的单链表翻转的方法小结
Feb 24 #Python
关于多元线性回归分析——Python&SPSS
Feb 24 #Python
使用 pytorch 创建神经网络拟合sin函数的实现
Feb 24 #Python
You might like
PHP 单引号与双引号的区别
2009/11/24 PHP
PHP中TP5 上传文件的实例详解
2017/07/31 PHP
JavaScript 关键字屏蔽实现函数
2009/08/02 Javascript
jquery photoFrame 图片边框美化显示插件
2010/06/28 Javascript
Jquery判断$("#id")获取的对象是否存在的方法
2013/09/25 Javascript
jquery实现下拉菜单的二级联动利用json对象从DB取值显示联动
2014/03/27 Javascript
JS生成随机字符串的多种方法
2014/06/10 Javascript
js跨域问题浅析及解决方法优缺点对比
2014/11/08 Javascript
JavaScript中的DSL元编程介绍
2015/03/15 Javascript
javascript的几种继承方法介绍
2016/03/22 Javascript
ionic进入多级目录后隐藏底部导航栏(tabs)的完美解决方案
2016/11/23 Javascript
Node.js+jade+mongodb+mongoose实现爬虫分离入库与生成静态文件的方法
2017/09/20 Javascript
jQuery zTree搜索-关键字查询 递归无限层功能实现代码
2018/01/25 jQuery
基于vue中keep-alive缓存问题的解决方法
2018/09/21 Javascript
详解小程序不同页面之间通讯的解决方案
2018/11/23 Javascript
详解Vscode中使用Eslint终极配置大全
2019/11/08 Javascript
jQuery实现手风琴效果(蒙版)
2020/01/11 jQuery
node.js通过url读取文件
2020/10/16 Javascript
ES6 十大特性简介
2020/12/09 Javascript
[03:18]DOTA2放量测试专访820:希望玩家加入国服大家庭
2013/08/25 DOTA
[01:28]国服启动器接入蒸汽平台操作流程视频
2021/03/11 DOTA
深入理解Python单元测试unittest的使用示例
2017/11/18 Python
python 函数内部修改外部变量的方法
2018/12/18 Python
Python 异步协程函数原理及实例详解
2019/11/13 Python
Python如何使用ConfigParser读取配置文件
2020/11/12 Python
selenium+python自动化78-autoit参数化与批量上传功能的实现
2021/03/04 Python
HTML5 Canvas API中drawImage()方法的使用实例
2016/03/25 HTML / CSS
详解android与HTML混合开发总结
2018/06/06 HTML / CSS
Andrew Marc官网:设计师外套的领先制造商
2019/10/30 全球购物
麦当劳印度网上订餐:McDelivery
2020/03/16 全球购物
CLR与IL分别是什么含义
2016/08/23 面试题
大学毕业生通用自荐信范文
2013/10/31 职场文书
银行竞聘演讲稿范文
2014/04/23 职场文书
泸县召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
大学生求职信怎么写
2015/03/19 职场文书
美国运营商 T-Mobile 以 117.83Mb/s 的速度排第一位
2022/04/21 数码科技