【工程师学算法】工程常用算法(一)—— 最小二乘法
目录
1 功能
2 公式推导
3 抽象
4 总结
1 功能
最小二乘法是基于大量带有误差的数据估计真值的算法。首先要注意,使用这个算法,首先要满足一个条件:大量,如果测量数据和要估计的真值形成一对一的关系,那显然估计是毫无意义的。测量数据必须相对于带估计的数值是“冗余”的。举个例子,你用直尺测量绳子的长度,只量一次,那么你测多少就是多少,只有你测试次数的足够多,获得的数据才可以用最小二乘法估计真值。
最小二乘法,为什么叫“最小二乘”?实际上,“二乘”的意思就是“平方”,也即是“最小平方法”。什么的最小平方呢,当然是误差的最小平方啦。
2 公式推导
我们从最简单的说起:量长度,我们对一个绳子的长度测了好几次,第i次的长度计为
设 为估计值,那么误差 的表达式就是:
误差的平方 可以写成:
要让误差的平方 最小,也就是求这个函数的最小极值,求导就行:
根据上式可得:
一看这公式,恍然大悟,原来就是取平均值啊。真没想到求算术平均竟然也是最小二乘法的应用呢!
上面是找的是长度,说白了是在找 (a为常数) ,下面来说一个复杂的:
我们现在手上有大把的 ,如何估计出 和 呢?
首先构造误差的平方 :
这次有俩参数,要求偏导为0:
由D对b的偏导分析得到:
由D对a的偏导分析得到:
现在大家应该知道最小二乘法的套路了:
- 找到需要拟合的函数
- 构造误差平方和
- 求出拟合函数中各参数的偏导,并使之为0,然后求解等式即可得到参数的最小二乘估计值。
理解了基本原理,我们就可以开始用于各种工程项目中的参数估计和函数拟合啦.
3 抽象
一个优秀的工程师不能只满足会用,我们不妨在做进一步思考:如何把最小二乘写成矩阵形式以适应高阶参数估计呢?当写出了最小二乘法的矩阵形式,是不是意味着我们在线性区域实现了“一招鲜,吃遍天”?
首先掏出一个多元线性函数:
写成矩阵形式:
我们的数据是大量的,一共有m组且m>n(m=n时直接求解),我们将其写成矩阵形式:
现在矩阵X的尺寸为m*(n+1),矩阵Y的尺寸为m*1,我们是要使用最小二乘法求出公式中的系数矩阵:
我们将误差平方和函数使用矩阵形式表达可得:
为了将其化简,我们先复习一下和转置相关的矩阵公式:
将误差平方和函数展开:
接下来就是对其求偏导并使之等于0矩阵:
即可得到:
以上这种写法有些别扭,因为我设置X矩阵为列向量,A矩阵为行向量了,按照书本上主流的写法,X矩阵为行向量,A矩阵为列向量,则公式应写为:
4 总结
以上就是对最小二乘的介绍。本文只给出了线性回归的一般公式,在遇到非线性函数的拟合时,理论仍然可以使用这种方法做拟合,但是需要对公式做一些变形,这其中有很多tricks,比如对数据进行预处理,使得样本呈线性关系。
综上所述,最小二乘法是一种在拥有充足(冗余)的样本时,对所期望的公式拟合进而得到准确参数的方法。
下一章,我们介绍:卡尔曼滤波
【工程师学算法】工程常用算法(一)—— 最小二乘法相关推荐
- 【数据结构与算法】常用算法
五大常用算法 分治 动态规划 最优子结构 边界 状态转移函数 爬楼梯问题: 4. 最优子结构 F(10)的最优子结构为F(9)和F(8) 5. 边界 F(1) = 1 F(2) = 2 6. 状态转移 ...
- 03--STL算法(常用算法)
一:常用的查找算法 (一)adjacent_find():邻接查找 在iterator对标识元素范围内,查找一对相邻重复元素,找到则返回指向这对元素的第一个元素的迭代器.否则返回past-the-en ...
- java常见的算法_Java常用算法总结(转)
交换排序 冒泡排序 将最后一个元素与倒数第二个元素对比,如果最后一个元素比倒数第二个小,则交换两个元素的位置,再用倒数第二个元素与倒数第三个元数对比,直到比到第一个元素,这样经过第一趟排序后得到第一个 ...
- [回溯算法] 五大常用算法之回溯法
算法入门6:回溯法 一. 回溯法 – 深度优先搜素 1. 简单概述 回溯法思路的简单描述是:把问题的解空间转化成了图或者树的结构表示,然后使用深度优先搜索策略进行遍历,遍历的过程中记录和寻找所有可行解 ...
- 几何常用算法与判断线段相交【转】
下面这个函数在我写的计算几何库函数里面有,那个库可以在http://algorithm.126.com/的资源中心 - 代码角 找到. 算法简单说明: 首先判断以两条线段为对角线的矩形是否 ...
- (转)五大常用算法:分治、动态规划、贪心、回溯和分支界定
分治算法 一.基本概念 在计算机科学中,分治法是一种很重要的算法.字面上的解释是"分而治之",就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题-- ...
- AI之NLP:自然语言处理技术简介(是什么/学什么/怎么用)、常用算法、经典案例之详细攻略(建议收藏)
AI之NLP:自然语言处理技术简介(是什么/学什么/怎么用).常用算法.经典案例之详细攻略(建议收藏) 目录 NLP是什么? 1.NLP前置技术解析 2.python中NLP技术相关库 3.NLP案例 ...
- AI之NLP:自然语言处理技术简介(是什么/学什么/怎么用)、常用算法、经典案例之详细攻略(建议收藏)daiding
AI之NLP:自然语言处理技术简介(是什么/学什么/怎么用).常用算法.经典案例之详细攻略(建议收藏) 目录 NLP是什么? 1.NLP前置技术解析 2.python中NLP技术相关库 3.NLP案例 ...
- JAVA工程师常用算法_算法工程师必须要知道的8种常用算法思想
算法思想有很多,业界公认的常用算法思想有8种,分别是枚举.递推.递归.分治.贪心.试探法.动态迭代和模拟.当然8种只是一个大概的划分,是一个"仁者见仁.智者见智"的问题. 1.1 ...
最新文章
- 提供前进、后退功能及其他JAVASCRIPT速成秘诀
- 音频编辑软件_Audacity2.12版
- 基于卷积神经网络的人脸认证(判断两个人脸是否是一个人)
- 赠送 12 本 《C++ 服务器开发精髓》
- Xcode6中如何对scrollview进行自动布局(autolayout)
- VS2019 禁止Web项目停止调试后自动关闭浏览器(在浏览器窗口关闭时停止调试程序,在调试停止时关闭浏览器)
- MySQL数据库主从同步的3种一致性方案实现,及优劣比较
- Android 内存优化测试(转)
- Script:Diagnostic Resource Manager
- Java8 in action(1) 通过行为参数化传递代码--lambda代替策略模式
- 记一次消息总线的打造 - McKay - 博客园
- 【转】为VS2005安装STLport
- 计算机建表格,电脑文档怎么做表格
- 网络出现异常(只能上QQ不能上网页)
- java大鱼吃小鱼实验报告摘要_java 大鱼吃小鱼游戏总结
- 计算机视觉-语义分割论文总结
- J2EE工作流管理系统jBPM详解(二)
- 【软考三】软设下午题第一大题--数据流图(做题)
- python实现树莓派监控_树莓派上安装pyaudio 及 对声音实时监控
- Android 深入Http(4)从OkHttp源码来看Http,音视频开发工程师前景