程序笔记
发布时间:2022-07-13 发布网站:大佬教程 code.js-code.com
大佬教程收集整理的这篇文章主要介绍了【线性回归】,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
1 模型表示
监督学习中都有一个训练集。以房屋交易问题为例,假使训练集如下:
我们将要用来描述这个回归问题的标记如下:
- (m) :代表训练集中实例的数量
- (x) :代表特征/输入变量
- (y) :代表目标变量/输出变量
- (left( x,y right)) :代表训练集中的实例
- (({{x}^{(i)}},{{y}^{(i)}})): 代表第(i) 个观察实例
- (h) :代表学习算法的解决方案或函数也称为假设(hypothesis)
下面是模型训练流程图
2 代价函数
目标函数为:
[h_theta left( x right)=theta_{0}+theta_{1}x
]
求出合适的参数(parameters)(theta_{0}) 和 (theta_{1}),在这个例子中便是直线的斜率和在(y) 轴上的截距。
模型所预测的值与训练集中实际值之间的差距(下图中蓝线所指)就是建模误差(modeling error)
目标是选择出可以使得建模误差的平方和能够最小的模型参数。 即使得代价函数最小。
[J left( theta_0, theta_1 right) = frac{1}{2m}sumlimits_{i=1}^m left( h_{theta}(x^{(i)})-y^{(i)} right)^{2}
]
绘制一个等高线图,三个坐标分别为 (theta_{0}) 和 (theta_{1}) 和 (J(theta_{0}, theta_{1})):
可以看出在三维空间中存在一个使得 (J(theta_{0}, theta_{1})) 最小的点。代价函数也被称作平方误差函数,有时也被称为平方误差代价函数。
3 代价函数的直观理解
-
Hypothesis:
[h_{theta}(x)=theta_{0}+theta_{1}x
]
-
Parameters:
[theta_{0},theta_{1}
]
-
Cost Function:
[J left( theta_0, theta_1 right) = frac{1}{2m}sumlimits_{i=1}^m left( h_{theta}(x^{(i)})-y^{(i)} right)^{2}
]
-
Goal:
[underset{theta_{0}, theta_{1}}{operatorname{minimize}}J(theta_{0},theta_{1})
]
代价函数的样子,等高线图,则可以看出在三维空间中存在一个使得(J(theta_{0}, theta_{1}))最小的点。
需要的是一种算法能自动地找出这些使代价函数(J)取最小值的参数(theta_{0})和(theta_{1})来。
4. 梯度下降
梯度下降是用来求函数最小值的算法,使用梯度下降法来求出代价函数(J(theta_{0}, theta_{1})) 的最小值。
梯度下降背后的思想:
-
Step 1 :随机选择一个初始参数 (left( {theta_{0}},{theta_{1}},......,{theta_{n}} right)),计算代价函数,
-
Step 2 :寻找下一个能让代价函数值下降最多的参数组合。我们持续这么做直到找到一个局部最小值(local minimum)
因为我们并没有尝试完所有的参数组合,所以不能确定我们得到的局部最小值是否便是全局最小值(global minimum),选择不同的初始参数组合,可能会找到不同的局部最小值。
想象正站立在山的这一点上,在梯度下降算法中,我们要做的就是旋转360度,朝梯度最大的某个方向上,用小碎步尽快下山。
批量梯度下降(batch gradient descent)算法的公式为:
[begin{array}{l}text { repeat until convergence { } \ left.qquad theta_{j}:=theta_{j}-alpha frac{partial}{partial theta_{j}} Jleft(theta_{0}, theta_{1}right) quad text { (for } j=0 text { and } j=1right) \ }end{array}
]
其中 (alpha) 是学习率(learning rate),决定移动步幅大小,在批量梯度下降中,每次都同时让所有的参数减去学习速率乘以代价函数的导数。其实就是代价函数的偏导
[alpha frac{partial }{partial {{theta }_{0}}}J({{theta }_{0}},{{theta }_{1}})
\
alpha frac{partial }{partial {{theta }_{1}}}J({{theta }_{0}},{{theta }_{1}})
]
梯度下降更新参数:
[begin{array}{l}text { temp } 0:=theta_{0}-alpha frac{partial}{partial theta_{0}} Jleft(theta_{0}, theta_{1}right) \ text { temp } 1:=theta_{1}-alpha frac{partial}{partial theta_{1}} Jleft(theta_{0}, theta_{1}right) \ theta_{0}:=text { temp } 0 \ theta_{1}:=text { temp } 1end{array}
]
5. 梯度下降的直观理解
[{theta_{j}}:={theta_{j}}-alpha frac{partial }{partial {theta_{j}}}Jleft(theta right)
]
对 $theta $ 赋初值,使得 (Jleft( theta right)) 按梯度下降最快方向进行,一直迭代下去,最终得到局部最小值。其中 (alpha) 是学习率(learning rate),决定了沿着下降程度最大的方移动的程度。
[{theta_{j}}:={theta_{j}}-alpha frac{partial }{partial {theta_{j}}}Jleft( theta right)
]
如果我们预先把 ({theta_{1}}) 放在一个局部的最低点,下一步梯度下降法会怎样
假设你将({theta_{1}})初始化在局部最低点,在这儿,它已经在一个局部的最优处或局部最低点。结果是局部最优点的导数将等于零,如果你的参数已经处于局部最低点,那么梯度下降法更新其实什么都没做,它不会改变参数的值。
我们来看一个例子,这是代价函数(Jleft( theta right))。
在梯度下降法中,当我们接近局部最低点时,梯度下降法会自动采取更小的幅度,这是因为当我们接近局部最低点时,很显然在局部最低时导数等于零,所以当我们接近局部最低时,导数值会自动变得越来越小,所以梯度下降将自动采取较小的幅度,没有必要再另外减小(a)。
6. 梯度下降的线性回归
对我们之前的线性回归问题运用梯度下降法,关键在于求出代价函数的导数,即:
[frac{partial }{partial {{theta }_{j}}}J({{theta }_{0}},{{theta }_{1}})=frac{partial }{partial {{theta }_{j}}}frac{1}{2m}{{sumlimits_{i=1}^{m}{left( {{h}_{theta }}({{x}^{(i)}})-{{y}^{(i)}} right)}}^{2}}
]
(j=0) 时:
[frac{partial }{partial {{theta }_{0}}}J({{theta }_{0}},{{theta }_{1}})=frac{1}{m}{{sumlimits_{i=1}^{m}{left( {{h}_{theta }}({{x}^{(i)}})-{{y}^{(i)}} right)}}}
]
(j=1) 时:
[frac{partial }{partial {{theta }_{1}}}J({{theta }_{0}},{{theta }_{1}})=frac{1}{m}sumlimits_{i=1}^{m}{left( left( {{h}_{theta }}({{x}^{(i)}})-{{y}^{(i)}} right)cdot {{x}^{(i)}} right)}
]
则算法改写成:
[begin{array}{l}text { Repeat { } \ qquad begin{array}{l}theta_{0}:=theta_{0}-a frac{1}{m} sum_{i=1}^{m}left(h_{theta}left(x^{(i)}right)-y^{(i)}right) \ theta_{1}:=theta_{1}-a frac{1}{m} sum_{i=1}^{m}left(left(h_{theta}left(x^{(i)}right)-y^{(i)}right) cdot x^{(i)}right)end{array} \ }end{array}
]
批量梯度下降
指在梯度下降的每一步中,我们都用到了所有的训练样本,更新所有的调整参数,在梯度下降中,在计算微分求导项时,我们需要进行求和运算,我们最终都要计算这样一个东西,这个项需要对所有 (m)个训练样本求和。
大佬总结
以上是大佬教程为你收集整理的【线性回归】全部内容,希望文章能够帮你解决【线性回归】所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。