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 “多线→一 ...
随机推荐
- JS-DOM ~ 01. 了解DOM,动手做一下就明白了!/鼠标事件(好吧 其实我卡了三天
DOM概述 html加载完毕,渲染引擎会在内存中把html文档生成一个DOM树,getElementById是获取内DOM上的元素,然后操作的时候修改的是该元素的属性 体验事件/事件三要素1.事件源( ...
- Django-下载安装-配置-创建django项目-三板斧简单使用
目录 Django 简介 使用 django 的注意事项 计算机名不能有中文 Django版本问题 django下载安装 在命令行下载安装 在pycharm图形界面下载安装 检验是否安装成功 创建Dj ...
- js关系运算符的用法和区别
var num = 1; var str = '1'; var test = 1; test == num //true 相同类型 相同值 test === num //true ...
- 小白学习VUE第一篇文章---如何看懂网上搜索到的VUE代码或文章---使用VUE的三种模式:
小白学习VUE第一篇文章---如何看懂网上搜索到的VUE代码或文章---使用VUE的三种模式: 直接引用VUE; 将vue.js下载到本地后本目录下使用; 安装Node环境下使用; ant-desig ...
- rpyc + plumbum 实现远程调用执行shell脚本
rpyc可以很方便实现远程方法调用, 而plumbum则可以实现在python中类似shell的方式编码: 具体实现代码如下: Server.py import rpyc from rpyc.util ...
- Egiht(八种方法)
Problem Description The 15-puzzle has been around for over 100 years; even if you don't know it by t ...
- sudo apt-get install 、 pip install和conda install的对比
sudo apt-get install: apt-get可以用来安装软件.更新源,也可以用来更新自Ubuntu的典型依赖包. (sudo apt-get remove --purge 软件名称 su ...
- 夯实Java基础系列3:一文搞懂String常见面试题,从基础到实战,更有原理分析和源码解析!
目录 目录 string基础 Java String 类 创建字符串 StringDemo.java 文件代码: String基本用法 创建String对象的常用方法 String中常用的方法,用法如 ...
- 网络编程之多线程——GIL全局解释器锁
网络编程之多线程--GIL全局解释器锁 一.引子 定义: In CPython, the global interpreter lock, or GIL, is a mutex that preven ...
- vue把链接转二维码
使用qrcodejs2插件 1. 安装qrcodejs2:npm install qrcodejs2 --save 2. 在组件里面引入: import QRCode from 'qrcodejs2' ...