
A-01 最小二乘法
发布日期:2021-05-09 05:36:21
浏览次数:15
分类:博客文章
本文共 1651 字,大约阅读时间需要 5 分钟。
目录
人工智能从入门到放弃完整教程目录:
最小二乘法
最小二乘法,可以理解为最小平方和,即误差的最小平方和,在线性回归中,\(误差=真实值-预测值\)。最小二乘法的核心思想就是——通过最小化误差的平方和,使得拟合对象无限接近目标对象,最小二乘法一般解决线性问题。
一、最小二乘法——代数法
假设线性回归的假设函数为
\[\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\)的计算量非常大(使用随机梯度下降法或使用降维算法降低特征维度)
- 最小二乘法只有拟合函数为线性的时候才可以使用(想办法通过某些机巧让拟合函数转化为线性的)
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月09日 18时54分57秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
关于我
2021-05-09
数据结构实验之栈四:后缀式求值
2021-05-09
sdut 2498【aoe 网上的关键路径】
2021-05-09
【PHP自定义显示系统级别的致命错误和用户级别的错误】
2021-05-09
【JAVA网络流之URL】
2021-05-09
最通俗易懂的囚徒困境
2021-05-09
递推的思维构建与技巧实现
2021-05-09
五道逻辑思维题
2021-05-09
liteide错误: 进程无法启动--解决方法
2021-05-09
Java程序中的代理作用和应用场景及实现
2021-05-09
Java 前台后台数据传递、中文乱码解决方法
2021-05-09
Git报错:Permission denied (publickey)
2021-05-09
常见的图文布局
2021-05-09
Laravel - 上手实现 - 文件上传、保存到 public 目录下
2021-05-09
一次性搞懂 PHP 中面向对象的所有知识点。
2021-05-09
将mongo设置为windows的服务
2021-05-09
【Flink】Flink 底层RPC框架分析
2021-05-09
【集合框架】JDK1.8源码分析之LinkedList(七)
2021-05-09
【设计模式】命令模式
2021-05-09