A-01 最小二乘法
更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:https://www.cnblogs.com/nickchen121/
最小二乘法
最小二乘法,可以理解为最小平方和,即误差的最小平方和,在线性回归中,\(误差=真实值-预测值\)。最小二乘法的核心思想就是——通过最小化误差的平方和,使得拟合对象无限接近目标对象,最小二乘法一般解决线性问题。
一、最小二乘法——代数法
假设线性回归的假设函数为
\[
\begin{align}
h_\omega(x_0,x_1,\cdots,x_n) & = \omega_0x_0+\omega_1x_1+\cdots+\omega_nx_n \\
& = \sum_{i=0}^n \omega_ix_i
\end{align}
\]
其中\(n-1\)是特征数。如果针对所有的\(\omega_i\quad(i=1,2,\cdots,n)\)而言,假设函数是非线性的,但是针对某一个\(\omega_i\)的话,由于变量只剩下一个\(\omega_i\),假设函数就是线性的,既可以使用最小二乘法求解。
通过线性回归的假设函数既可以得到目标函数为
\[
\begin{align}
J(\omega_0,\omega_1,\cdots,\omega_n) & = \sum_{j=1}^m (h_\omega(x^{(j)})-y^{(j)})^2 \\
& = \sum_{j=1}^m(\sum_{i=0}^n \omega_ix_i^{(j)} - y^{(j)})^2
\end{align}
\]
其中\(m\)为样本数。
利用目标函数分别对\(\omega_i\)求偏导,并且令导数为0,即
\[
\sum_{j=1}^m \sum_{i=0}^n (\omega_ix_i^{(j)} - y^{(j)})x_i^{(j)} = 0
\]
通过求解上式,可以得到\(n+1\)元一次方程组,通过求解这个方程组就可以的得到所有的\(\omega_i\)。
二、最小二乘法——矩阵法
最小二乘法矩阵法比代数法简单不少。我们把代数法中线性回归的假设函数可以写成
\[
h_\omega(X) = X\omega
\]
其中\(h_\omega(X)\)是\(m*1\)维的向量,\(X\)是\(m*n\)维的矩阵,\(\omega\)是\(n*1\)维的向量,\(m\)为样本数,\(n\)为特征数。
通过上述矩阵形式的假设函数可以得到矩阵形式的目标函数为
\[
J(\omega)={\frac{1}{2}}(X\omega-Y)^T(X\omega-Y)
\]
其中\({\frac{1}{2}}\)只是为了方便计算。
目标函数对\(\omega\)求导取0,可以得
\[
\nabla_\omega{J(\omega)} = X^T(X\omega-Y) =0
\]
上述求偏导使用了矩阵求导链式法则和两个矩阵求导的公式
\[
\begin{align}
& \nabla_X(X^TX) = 2X \\
& \nabla_Xf(AX+B) = A^T\nabla_{AX+B}f
\end{align}
\]
通过对上述式子整理可得
\[
\begin{align}
& X^TX\omega=X^TX\quad{两边同时乘}(X^TX)^{-1} \\
& \omega = (X^TX)^{-1}X^TY
\end{align}
\]
通过上述的化简可以直接对向量\(\omega\)求导,而不需要对\(\omega\)中的每一个元素求偏导。
三、最小二乘法优缺点
3.1 优点
- 简洁高效,比梯度下降法方便
3.2 缺点
- 最小二乘法需要计算\(X^TX\)的逆矩阵,可能\(X^TX\)没有逆矩阵(一般需要考虑使用其他的优化算法,或者重新处理数据让\(X^TX\)有逆矩阵)
- 当特征数\(n\)非常大的时候,\(X^TX\)的计算量非常大(使用随机梯度下降法或使用降维算法降低特征维度)
- 最小二乘法只有拟合函数为线性的时候才可以使用(想办法通过某些机巧让拟合函数转化为线性的)
A-01 最小二乘法的更多相关文章
- 机器学习:R语言中如何使用最小二乘法
详细内容见上一篇文章:http://www.cnblogs.com/lc1217/p/6514734.html 这里只是介绍下R语言中如何使用最小二乘法解决一次函数的线性回归问题. 代码如下:(数据同 ...
- 机器学习:Python中如何使用最小二乘法
之所以说"使用"而不是"实现",是因为python的相关类库已经帮我们实现了具体算法,而我们只要学会使用就可以了.随着对技术的逐渐掌握及积累,当类库中的算法已经 ...
- 机器学习:scipy和sklearn中普通最小二乘法与多项式回归的使用对
相关内容连接: 机器学习:Python中如何使用最小二乘法(以下简称文一) 机器学习:形如抛物线的散点图在python和R中的非线性回归拟合方法(以下简称文二) 有些内容已经在上面两篇博文中提到了,所 ...
- Hinge Loss、交叉熵损失、平方损失、指数损失、对数损失、0-1损失、绝对值损失
损失函数(Loss function)是用来估量你模型的预测值 f(x) 与真实值 Y 的不一致程度,它是一个非负实值函数,通常用 L(Y,f(x)) 来表示.损失函数越小,模型的鲁棒性就越好. 损失 ...
- 最小二乘法 及python 实现
参考 最小二乘法小结 机器学习:Python 中如何使用最小二乘法 什么是” 最小二乘法” 呢 定义:最小二乘法(又称最小平方法)是一种数学优化技术,它通过最小化误差的平方和寻找数据的最佳 ...
- 最小二乘法多项式曲线拟合原理与实现 zz
概念 最小二乘法多项式曲线拟合,根据给定的m个点,并不要求这条曲线精确地经过这些点,而是曲线y=f(x)的近似曲线y= φ(x). 原理 [原理部分由个人根据互联网上的资料进行总结,希望对大家能有用] ...
- 推荐系统之最小二乘法ALS的Spark实现
1.ALS算法流程: 初始化数据集和Spark环境----> 切分测试机和检验集------> 训练ALS模型------------> 验证结果-----------------& ...
- matlab和C语言实现最小二乘法
参考:https://blog.csdn.net/zengxiantao1994/article/details/70210662 Matlab代码: N = ; x = [ ]; y = [ ]; ...
- 转悠望南山 Python闲谈(二)聊聊最小二乘法以及leastsq函数
1 最小二乘法概述 自从开始做毕设以来,发现自己无时无刻不在接触最小二乘法.从求解线性透视图中的消失点,m元n次函数的拟合,包括后来学到的神经网络,其思想归根结底全都是最小二乘法. 1-1 “多线 ...
- Python闲谈(二)聊聊最小二乘法以及leastsq函数
1 最小二乘法概述 自从开始做毕设以来,发现自己无时无刻不在接触最小二乘法.从求解线性透视图中的消失点,m元n次函数的拟合,包括后来学到的神经网络,其思想归根结底全都是最小二乘法. 1-1 “多线→一 ...
随机推荐
- 【笔记 Jvm-并发】
概述 并发处理 是使得Amadahl定律代替摩尔定律成为计算机性能发展源动力的根本原因: Amdahl定律 通过系统中串行化与并行化的比重来描述多处理器系统所能获得到的运算加速能力: 摩尔定律 描述处 ...
- JS-DOM ~ 01. 了解DOM,动手做一下就明白了!/鼠标事件(好吧 其实我卡了三天
DOM概述 html加载完毕,渲染引擎会在内存中把html文档生成一个DOM树,getElementById是获取内DOM上的元素,然后操作的时候修改的是该元素的属性 体验事件/事件三要素1.事件源( ...
- netcore 基于 DispatchProxy 实现一个简单Rpc远程调用
前言 netcore 发布以来,一直很关注netcore的进程.目前在公司负责的网站也历经波折的全部有.net framework 4.0 全部切换到netcore 2.2 版本中.虽然过程遇到的坑不 ...
- asp.net core 使用 NLog日志
NLog是一个配置灵活的日志记录类库,拥有输出日志到文件.存储入库.发送到udp地址的高级功能 1 添加 nlog nuget包 Nlog和NLog.Web.AspNetCore 安装完成后 2 ...
- FreeSql (十二)更新数据时指定列
var connstr = "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;" + "Initia ...
- WTM送书活动:向更遥远的星辰大海起航~
是的,没错~ 这一篇不是大老刘写的.哈哈~ 啥? 你想知道为啥? 大老刘为了你们不加班,熬夜改BUG,姑娘不乐意了... 然后... 后面请自行脑补~ 哎~生活还要继续鸭.... 那么,接下来由我陪 ...
- mvn deploy:deploy-file命令
mvn deploy:deploy-file -DgroupId=com.gome -DartifactId=jwebservices -Dversion=2.0 -Dpackaging=jar -D ...
- SpringBoot——Web开发(静态资源映射)
静态资源映射 SpringBoot对于SpringMVC的自动化配置都在WebMVCAutoConfiguration类中. 其中一个静态内部类WebMvcAutoConfigurationAdapt ...
- git远程仓库常用命令
1. git add . 将工作区的文件推到暂存区: 2. git commit -m " 备注信息" 将暂存区内容提交 ...
- [Advanced Python] 11 - Implement a Class
基础概念:[Python] 08 - Classes --> Objects 进阶概念:[Advanced Python] 11 - Implement a Class 参考资源:廖雪峰,面向对 ...