梯度下降算法与Normal equation

Normal equation: Method to solve for θ analytically

正规方程:分析求解θ的方法

对于损失函数

\[J\left( {{\theta _0},{\theta _1},...,{\theta _n}} \right) = \frac{1}{{2m}}\sum\limits_{i = 1}^m {{{\left( {{h_\theta }\left( {{x^{\left( i \right)}}} \right) - {y^{\left( i \right)}}} \right)}^2}} \]

只要满足

\[\frac{\partial }{{\partial {\theta _1}}}J\left( \theta  \right) = \frac{\partial }{{\partial {\theta _2}}}J\left( \theta  \right) =  \cdot  \cdot  \cdot  = \frac{\partial }{{\partial {\theta _n}}}J\left( \theta  \right) = 0\]

就可以直接得到所有的参数

\[{{\theta _0},{\theta _1},...,{\theta _n}}\]

而满足上面的连续等式的解是

\[\theta  = {\left( {{X^T}X} \right)^{ - 1}}{X^T}y\]

其中

\[X = \left[ {\begin{array}{*{20}{c}}
{\begin{array}{*{20}{c}}
{1,x_1^{\left( 1 \right)},x_2^{\left( 1 \right)},...,x_n^{\left( 1 \right)}}\\
{1,x_1^{\left( 2 \right)},x_2^{\left( 2 \right)},...,x_n^{\left( 2 \right)}}\\
\begin{array}{l}
\cdot \\
\cdot
\end{array}
\end{array}}\\
{1,x_1^{\left( m \right)},x_2^{\left( m \right)},...,x_n^{\left( m \right)}}
\end{array}} \right]\]

是变量的矩阵;

\[y = \left[ {\begin{array}{*{20}{c}}
{\begin{array}{*{20}{c}}
{{y^{\left( 1 \right)}}}\\
{{y^{\left( 2 \right)}}}\\
\begin{array}{l}
\cdot \\
\cdot
\end{array}
\end{array}}\\
{{y^{\left( m \right)}}}
\end{array}} \right]\]

是对应的输出值

Gradient Descent Normal Equation
Need to choose α No need to choose α
Needs many iterations Don‘t need to iterate
Works well even when n is large O(n3)Need to compute ()
 O(kn2) Slow if n is very large


如果矩阵不可逆,可以计算伪逆矩阵。

原文地址:https://www.cnblogs.com/qkloveslife/p/9839607.html

时间: 2024-08-26 19:47:05

梯度下降算法与Normal equation的相关文章

机器学习笔记02:多元线性回归、梯度下降和Normal equation

在<机器学习笔记01>中已经讲了关于单变量的线性回归以及梯度下降法.今天这篇文章作为之前的扩展,讨论多变量(特征)的线性回归问题.多变量梯度下降.Normal equation(矩阵方程法),以及其中需要注意的问题. 单元线性回归 首先来回顾一下单变量线性回归的假设函数: Size(feet2) Price($1000) 2104 460 1416 232 1534 315 852 178 - - 我们的假设函数为 hθ(x)=θ0+θ1x 多元线性回归 下面介绍多元线性回归(Linear R

Linear regression with multiple variables(多特征的线型回归)算法实例_梯度下降解法(Gradient DesentMulti)以及正规方程解法(Normal Equation)

%第一列为 size of House(feet^2),第二列为 number of bedroom,第三列为 price of House 1 2104,3,399900 2 1600,3,329900 3 2400,3,369000 4 1416,2,232000 5 3000,4,539900 6 1985,4,299900 7 1534,3,314900 8 1427,3,198999 9 1380,3,212000 10 1494,3,242500 11 1940,4,239999 1

简单多元线性回归(梯度下降算法与矩阵法)

多元线性回归是最简单的机器学习模型,通过给定的训练数据集,拟合出一个线性模型,进而对新数据做出预测. 对应的模型如下: n: 特征数量. 一般选取残差平方和最小化作为损失函数,对应为: M:训练样本数量. 通过最小化代价损失函数,来求得 值,一般优化的方法有两种,第一是梯度下降算法(Gradient Descent),第二种是矩阵法(The normal equations). 梯度下降算法

(三)Normal Equation

继续考虑Liner Regression的问题,把它写成如下的矩阵形式,然后即可得到θ的Normal Equation. Normal Equation: θ=(XTX)-1XTy 当X可逆时,(XTX)-1XTy = X-1,(XTX)-1XTy其实就是X的伪逆(Pseudo inverse).这也对应着Xθ = y ,θ = X-1y 考虑特殊情况 XTX 不可逆 解决办法: 1)考虑是否有冗余的特征,例如特征中有平方米,还有平方厘米,这两个特征就是冗余的,解决办法是去掉冗余 2)再有就是n

转载:Normal Equation证明及应用

转载:原文地址为http://www.cnblogs.com/elaron/archive/2013/05/20/3088894.html 作者:elar Many Thanks ---------------------------------------------------------------------------------------------------- Normal Equations 的由来 假设我们有m个样本.特征向量的维度为n.因此,可知样本为{(x(1),y(1

斯坦福CS229机器学习课程笔记一:线性回归与梯度下降算法

应该是去年的这个时候,我开始接触机器学习的相关知识,当时的入门书籍是<数据挖掘导论>.囫囵吞枣般看完了各个知名的分类器:决策树.朴素贝叶斯.SVM.神经网络.随机森林等等:另外较为认真地复习了统计学,学习了线性回归,也得以通过orange.spss.R做一些分类预测工作.可是对外说自己是搞机器学习的还是不太自信,毕竟和科班出身的各位大牛相比自己对这些模型.算法的理解只能算是“知其然而不知其所以然”,用起来总感觉哪里不对劲. 因此,去年早早地就把网易公开课上Andrew大神的斯坦福CS229课程

梯度下降算法(1) - Python实现

算法介绍:梯度下降算法是一种利用一次导数信息求取目标函数极值的方法,也是目前应用最为广泛的局部优化算法之一.其具有实现简单.容易迁移.收敛速度较快的特征.在求解过程中,从预设的种子点开始,根据梯度信息逐步迭代更新,使得种子点逐渐向目标函数的极小值点移动,最终到达目标函数的极小值点.注意,沿梯度正向移动,将获取目标函数局部极大值(梯度上升算法):沿梯度反向移动,将获取目标函数局部极小值(梯度下降算法). 迭代公式:设向量$\vec g_k$表示目标函数在种子点$\vec x_k$处的梯度(即一次导

正规方程(Normal Equation)——对于线性回归问题的一种快速解法

对于某些线性回归问题,正规方程方法可能更加简单高效. 正规方程推导过程如下: 梯度下降法和正规方程的比较: 总结: 只要特征数量并不是特别大,对于线性回归问题正规方程是一个比梯度下降算法更快的替代算法.但是当特征数量非常多的时候或者模型更复杂的时候(比如logistic regression等),正规方程就不再适用了.而梯度下降方法都可以使用.另外,当XTX是奇异矩阵(也称退化矩阵,不可逆)时,正规方程也不能使用,但是这种情况很少会发生(m≤n或者存在有依赖关系的特征).

[ML]简单的Normal Equation对数据点进行线性回归

注明:本文仅作为记录本人的日常学习历程而存在. Normal Equation和上篇介绍的方法相比,简单许多.具体公式见吴恩达老师的coursera视频 1. generate_data用来生成实验中所用到的数据,数据总体分布在斜率为10-30之间随机取值,截距为200-5000之间随机取值的直线上 compute函数用来计算出目标直线参数: import numpy as np import matplotlib.pyplot as plt def compute(X,Y): return (