线性回归Linear Regression-模型和参数求解

训练集共m个样本,第i个样本 (x(i),y(i)),x(i)=(x(i)1,x(i)2,...,x(i)d)T ,即有d维特征。

线性回归模型

h(x)=w1x1+w2x2+...+wdxd+b

1.用向量表示

  • 假设函数   Hypothesish(x)=wTx+b
  • 参数     Parameters:w,b
  • 损失函数   CostFunction:J(w,b)=12mmi=1(h(x(i))y(i))2
  • 优化目标   Goal:minimizeJ(w,b)

2.参数求解方法:

2.1Gradient Descent 梯度下降

  • 步骤

    1.初始化 w1,w2...,wd,b
    2.同步更新所有参数,使 J(w,b) 不断减小。( α 是学习率)
          wj:=wjαwjJ(w,b)(j=1,...,d)
          b:=bαbJ(w,b)
    3.重复步骤2直至收敛

  • 推导
    计算偏导数
    因为

    J(w,b)=12mi=1m(h(x(i))y(i))2=12mi=1m(w1x(i)1+w2x(i)2+...+wdx(i)d+by(i))2

    所以
    wjJ(w,b)==1mi=1m(w1x(i)1+w2x(i)2+...+wdx(i)d+by(i))x(i)j1mi=1m(h(x(i))y(i))x(i)j

    bJ(w,b)==1mi=1m(w1x(i)1+w2x(i)2+...+wdx(i)d+by(i))1mi=1m(h(x(i))y(i))

    则参数更新公式为

    wj:=wjα1mmi=1(h(x(i))y(i))x(i)j
    b:=bα1mmi=1(h(x(i))y(i))

    这里需要注意的一点,正确的参数更新方式为同步更新,例如输入只有一维时 y=w1x1+b
      正确的参数更新:

    temp0=w1αw1J(w1,b)temp1=bαbJ(w1,b)w1=temp0b=temp1

      错误的参数更新:
    {w1=w1αw1J(w1,b)b=bαbJ(w1,b)

      错误原因:没有同步更新, w1 先更新,然后再更新b,而此时更新b用了更新后的 w1 ,而不是本来的 w1

2.2Normal Equation 正规方程

解析法求解参数 :对cost function求导,令导数为0,求得参数。

  • 简单情况举例
    输入只有一维特征 y=wx+b ,优化目标 minimizeJ(w,b)=J(w,b)=12mmi=1(wx(i)+by(i))2
    求导
    {wJ(w,b)=1mmi=1(wx(i)+by(i))x(i)bJ(w,b)=1mmi=1(wx(i)+by(i))

    令导数为0,求得
    w=mi=1(y(i)b)x(i)mi=1x(i)2b=mi=1(y(i)wx(i))m
  • 通常情况,多维特征
    m个样本,d维特征。为了计算简便,通常把 w,b 统一起来,给x增加一列1,b作为 w0 ,如下:
    线性回归Linear Regression-模型和参数求解_第1张图片
    线性回归Linear Regression-模型和参数求解_第2张图片

    J(w)=12m(XWY)2=12m(XWY)T(XWY)

    求导
    wJ(w)==12m(XWY)T(XWY)12m(XTXWXTY)

    令导数等于0,得到
    W=(XTX)1XTY

    n*n矩阵求逆运算的时间复杂度是 O(n3) (XTX) 是(d+1)*(d+1)维,所以当特征维数d很大时,计算将花费很长时间。

2.3两种方法比较

线性回归Linear Regression-模型和参数求解_第3张图片
一般,当特征维数小于10000时,正规方程计算是一个很好的方法,当特征维数多于10000时,通常采用梯度下降方法。
像线性回归这样简单的模型可通过对损失函数求导,令导数为0,解得最优解所对应的参数。但对复杂的模型来说,求导过程可能相当复杂,只能用梯度下降法不断向最优解处逼近。

参考资料:

1.Andrew Ng的Machine Learning课程
2.《机器学习》周志华
3.http://blog.csdn.net/stdcoutzyx/article/details/9101621

你可能感兴趣的:(机器学习)