机器学习公开课笔记(2):多元线性回归

多元线性回归

一元线性回归只有一个特征x,而多元线性回归可以有多个特征x1,x2,,xn

假设 (Hypothesis):hθ(x)=θTx=θ0x0+θ1x1++θnxn

参数 (Parameters):θ0,θ1,,θn

代价函数 (Cost function):J(θ0,θ1,,θn)=12mi=1m(hθ(x(i))y(i))2

目标 (Goal):minθJ(θ)

梯度下降 (Gradient Descent)

迭代更新参数θ: θj=θjα1mi=1m(hθ(x(i))y(i))xj(i)   for j=0,1,2,,n

向量化实现 (Vectorized Implementation):θ=θα1m(XT(Xθy))

Feature Scaling

动机:如果不同特征之间的数值量级差别太大,那么梯度下降的速度非常慢,为了加快算法的收敛速度,将各个特征划归到统一数量级,一般是[0, 1]或者[-1, 1]之间

Trick1: xj=xjμjsj, 其中 μj表示第j个特征的均值, sj表示第j个特征的范围(max - min)或者标准差(standard deviation)

Trick2: 学习速率的选择

  • 合理的选择学习速率,保证J(θ)的值在每一次迭代后都是下降的;
  • 如果J(θ)随迭代次数单调递增或者J(θ)随迭代次数成波浪形(例如: \/\/\/\/\/\/), 这时候应该考虑选择较小的α; 但是α太小会导致收敛速度过慢
  • 为了正确的选择 α,尝试序列 0.001, 0.01, 0.1, 1等

Normal Equation的数学推导

解析推导过程:
J(θ)=12mi=1m(hθ(xx(i))y(i))
可以简化写成向量的形式:
J(θ)=12m||Xθy||2=12m(Xθy)T(Xθy)
展开可得:
J(θ)=12m[θTXTXθyTXθθTXTy+yTy] 注意到yTXθ是一个标量,因此它与其转置θTXTy是相等的,即中间两项是相等的,从而J(θ)可以进一步化简为:
J(θ)=12m[XTXθ2θTXTy+yTy]
对向量的求导与单变量的求导法则有诸多不同,这里不加证明给出如下两个重要的向量求导结论(具体可参照向量矩阵求导
(1)d(XTAX)/dX=(dXT/dX)AX+(d(AX)T/dX)X=AX+ATX
(2)d(XTA)/dX=(dXT/dX)A+(dA/dX)XT=IA+0XT=A
根据结论(1), 第一项的求导结果为XTXθ+XTXθ=2XTXθ; 根据结论(2),第二项的求导结果为2xTy;第三项不含θ,求导结果当然为0,整合三项我们可以得到J(θ)的导数dJ(θ)dθ,
dJ(θ)dθ=12m(2XTXθ2XTy)
令该导数等于0,我们很容易得到
θ=(XX)1XTy
这就是使得代价函数J(θ)取得最小值对应的θ

梯度下降和Normal Equation优劣对比

 
Gradient Descent Normal Equation
需要选择合适的α 不需要选择α
需要不断的迭代 不需要迭代
当特征非常多时(n非常大),算法依然表现良好 当n非常大时,计算速度非常慢,因为需要计算(XTX)1复杂度为O(n3)

参考文献

[1] Andrew Ng Coursera 公开课第二周

posted @   python27  阅读(6739)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
历史上的今天:
2011-12-16 【算法23】把字符串转换成整数
点击右上角即可分享
微信分享提示