• [Machine Learning]学习笔记-线性回归


    模型

    假定有i组输入输出数据。输入变量可以用(x^i)表示,输出变量可以用(y^i)表示,一对({x^i,y^i})名为训练样本(training example),它们的集合则名为训练集(training set)
    假定(X)有j个特征,则可以用集合({x^i_1,x^i_2,dots ,x^i_j})表示。
    为了描述模型,要建立假设方程(hypothesis function) :
    $ h:X o Y(。 )h_ heta (x) = heta_0 + heta_1 x_1 + heta_2 x_2 + heta_3 x_3 + cdots + heta_n x_n( 也可以写成矩阵形式: )egin{align}h_ heta(x) =egin{bmatrix} heta_0 hspace{2em} heta_1 hspace{2em} ... hspace{2em} heta_nend{bmatrix}egin{bmatrix}x_0 ewline x_1 ewline vdots ewline x_nend{bmatrix}= heta^T xend{align}$
    (备注:一般一维向量都写成列向量)
    评价假设方程的准确性,可以用代价函数(cost function)

    代价函数


    代价函数可以表示为遍历每个样本,求预测值和实际值的残差平方和的均值。
    (J( heta) = dfrac {1}{2m} displaystyle sum _{i=1}^m left ( hat{y}_{i}- y_{i} ight)^2 = dfrac {1}{2m} displaystyle sum _{i=1}^m left (h_ heta (x_{i}) - y_{i} ight)^2)

    显然,代价函数值越小,假设方程越准确。
    由此可引入两种方法-梯度下降(Gradient Descent)正规方程(Normal Equation)来调整参数( heta)使(J)的值最小。

    梯度下降

    The gradient descent algorithm is:

    repeat until convergence:

    ( heta_j := heta_j - alpha frac{partial}{partial heta_j} J( heta))

    求偏导(舍去m):

    [egin{equation*} egin{split} frac{partial}{partial heta_j} J( heta) & = frac{partial}{partial heta_j}frac{1}{2m}( h_ heta(oldsymbol{x})-y)^2 \ & =2cdotfrac{1}{2m}cdot( h_ heta(oldsymbol{x})-y)cdotfrac{partial}{partial heta_j}( h_ heta(oldsymbol{x})-y) \ & = frac{1}{m}(h_ heta(oldsymbol{x})-y)cdot frac{partial}{partial heta_j}(sum_{i=0}^{n} heta_i x_i-y) \ & =frac{1}{m} (h_ heta(oldsymbol{x})-y)x_j \ end{split} end{equation*}]

    (alpha)学习速率(learning rate),对应上图的步长。
    对于一条样本,可得:
    ( heta_j := heta_j - alpha frac{1}{m} (h_ heta(x^i)-y^i)x_{j}^{i})

    这就是有名的LMS更新原则,也叫Widrow-Hoff学习准则,参数 θ 更新的幅度取决于误差项的大小。从一对样本的情况,我们推导出参数θ
    如何更新使得函数可以收敛。事实上,对于含有多个训练样本的情况,有两个方法可以对参数θ 进行更新,一个是 batch model, 另外一个是stochastic model。

    (PS:这篇博客介绍的很详细,但最后两个公式的正负号错了。)

    batch mode:

    每次更新都遍历所有样本

    [egin{align*} & ext{repeat until convergence:} ; lbrace ewline ; & heta_0 := heta_0 - alpha frac{1}{m} sumlimits_{i=1}^{m} (h_ heta(x^{(i)}) - y^{(i)}) cdot x_0^{(i)} ewline ; & heta_1 := heta_1 - alpha frac{1}{m} sumlimits_{i=1}^{m} (h_ heta(x^{(i)}) - y^{(i)}) cdot x_1^{(i)} ewline ; & heta_2 := heta_2 - alpha frac{1}{m} sumlimits_{i=1}^{m} (h_ heta(x^{(i)}) - y^{(i)}) cdot x_2^{(i)} ewline & cdots ewline brace end{align*} ]

    特征缩放(Feature Scaling)

    在使用梯度下降算法前,最好对每个特征进行归一化操作。
    归一化公式:

    [x_j := dfrac{x_j - mu_j}{s_j} ]

    (mu_j-样本均值)
    (s_j -样本方差)

    正规方程

    公式

    推导过程
    ( heta = (X^T X)^{-1}X^T y)

    与梯度下降的对比

    Gradient Descent Normal Equation
    Need to choose alpha No need to choose alpha
    Needs many iterations No need to iterate
    O (kn2) O (n3), need to calculate inverse of XTX
    Works well when n is large Slow if n is very large
  • 相关阅读:
    数据库-插入数据insert,更新数据update,删除数据delete
    前端移动端监听键盘上的 开始/搜索 按键,并触发函数
    移动端input输入框把页面顶起, 收起键盘页面复原不了问题
    微信小程序如何把接口调用成功的回调函数返回的参数return出去?(promise就可以解决!!)
    js判断json数据是否存在某字段的方法
    微信小程序、微信公众号、H5之间能相互跳转
    java JDK的安装和环境配置(windows10)
    接私活必备的 10 个开源项目
    小程序获取自定义属性之e.target与e.currentTarget
    小程序中webview内嵌h5页面
  • 原文地址:https://www.cnblogs.com/messier/p/7782742.html
Copyright © 2020-2023  润新知