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 “多线→一 ...
随机推荐
- Requests库整理
一.Requests库的安装 win平台下,直接在命令行使用 pip install requests 即可进行安装 成功后测试如下 >>> import requests > ...
- 基于WFST的语音识别解码器
学习语音识别有些时间了.老板要求我们基于Kaldi搭一个语音识别系统,在设备上通过MIC讲话,连着设备的PC的console上就能基本实时显示出讲话的内容.由于我们都是小白,刚开始可以要求低些,就用传 ...
- 去重合并两个有序链表之直接操作和Set集合操作
两者思路对比: 直接操作:因为传入的是两个有序的链表,所以说我就直接以其中一个链表为基准,与另外一个链表比较,只将比返回值链表的最后一个记录的值大的插入,不将等值的插入,理论时间复杂度为O(n) Se ...
- 六星教育php vip视频(分享)
最近看的一个swoole的课程,应该也算是vip课程了,不是公开的直播课 比较有特点有一定深度,swoole的实战教程一直也不多,结合swoole构建一个新型框架,最后讲解如何实现分布式RPC的调用. ...
- MongoDB入门及 c# .netcore客户端MongoDB.Driver使用
MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系 ...
- Java多线程(十三):线程池
线程池类结构 1.Executor是顶级接口,有一个execute方法. 2.ExecutorService接口提供了管理线程的方法. 3.AbstractExecutorService管理普通线程, ...
- FreeSql (十八)导航属性
导航属性是 FreeSql 的特色功能之一,可通过约定配置.或自定义配置对象间的关系. 导航属性有 OneToMany, ManyToOne, ManyToMany, OneToOne, Parent ...
- C#中using的使用-以FileStream写入文件为例
场景 CS中FileStream的对比以及使用方法: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100396022 关注公众号 ...
- mybatis if判断两个值是否相等存在的坑啊
1.使用“==”比较 字符类型 的值 用“==”比较的使用场景: 不管你用的什么类型的变量,只要变量的值是字符类型就用“==” 产生原因: 在mybatis中如果<if>标签用一个“=”判 ...
- Linux 笔记 - 前三章 CentOS 简介、安装和远程连接
博客地址:http://www.moonxy.com 一.Unix 和 Linux 的区别 目前主流的 Unix 系统有三种,分别是 IBM-AIX.HP-UX.SUN-Solaris,它们分别运行在 ...