zoukankan      html  css  js  c++  java
  • Linear Regression

    线性回归模型

    [h_{ heta}(x)=sum_{i=0}^{d} heta_ix_i= heta^Tx=x^T heta ]

    其中,(x_0=1)(d)表示(x)的特征数量。

    在给定训练集下,需要用学习算法确定参数( heta),使得模型的预测值(h(x))与真实值(y)尽可能接近。为了精确地描述这种接近程度,定义损失函数:

    [J( heta)=frac{1}{2}sum_{i=1}^{n}(h_{ heta}(x^{(i)})-y^{(i)})^2 ]

    问题转化为选择一组( heta)使得(J( heta))最小,这里有2种求解方法:

    1. 梯度下降
    2. Normal Equation

    梯度下降

    梯度下降的motivation非常直观,首先随机选择一组参数( heta),接着沿(J( heta))下降最快的方向更新( heta),经过若干次迭代就有望找到令(J( heta))收敛的参数( heta)

    [ heta_j= heta_j-alphafrac{partial}{partial heta_j}J( heta) ]

    (J( heta))的偏导数代入即得到所谓的batch gradient descent更新规则:

    [ heta_j= heta_j-alphasum_{i=1}^{n}(h_ heta(x^{(i)})-y^{(i)})x_j^{(i)} ]

    其向量化表示为:

    [ heta= heta-alphasum_{i=1}^{n}(h_ heta(x^{(i)})-y^{(i)})x^{(i)} ]

    由于损失函数(J( heta))是凸二次函数,因此总能收敛到唯一的全局最小值。

    batch gradient descent一次更新需要计算所有训练样本,开销较大,因此有同学提出了stochastic gradient descent,每遇到一个训练样本就进行一次参数更新:

    [ heta= heta-alpha(h_ heta(x^{(i)})-y^{(i)})x^{(i)} ]

    stochastic gradient descent一般比batch gradient descent收敛快,但是有可能在(J( heta))的最优点附近振荡,永远无法收敛到精确最优。不过一般选择最优点附近的参数也可以接受,还可以通过递减学习率(alpha)确保其精确收敛。

    值得一提的是:梯度下降算法存在“锯齿”效应,因此为了加速收敛,通常要进行归一化处理使得不同特征的尺度相近。

    Normal Equation

    除了用迭代的方式求解(J( heta))的最小值,还可以用数学工具直接求得闭式解。

    为了简洁地表示后续求导,使得人生不要太过凌乱,我们首先研究下(J( heta))的向量表示:
    假设训练集(X)和对应的标签(y)分别为:

    [X=left[ egin{matrix} (x^{(1)})^T \ (x^{(2)})^T \ vdots \ (x^{(n)})^T \ end{matrix} ight],y=left[ egin{matrix} y^{(1)} \ y^{(2)} \ vdots \ y^{(n)} \ end{matrix} ight] ]

    由于(h_{ heta}(x^{(i)})=(x^{(i)})^T heta),所以有:

    [X heta-y=left[ egin{matrix} (x^{(1)})^T heta \ (x^{(2)})^T heta \ vdots \ (x^{(n)})^T heta \ end{matrix} ight]-left[ egin{matrix} y^{(1)} \ y^{(2)} \ vdots \ y^{(n)} \ end{matrix} ight]=left[ egin{matrix} h_{ heta}(x^{(1)})-y^{(1)} \ h_{ heta}(x^{(2)})-y^{(2)} \ vdots \ h_{ heta}(x^{(n)})-y^{(n)} \ end{matrix} ight]]

    根据向量运算法则(x^Tx=sum_ix_i^2),终于得到了(J( heta))的简单点的表示:

    [frac{1}{2}(X heta-y)^T(X heta-y)=frac{1}{2}sum_{i=1}^{n}(h_{ heta}(x^{(i)})-y^{(i)})^2=J( heta) ]

    利用高中数学导数的知识,只要求得(J( heta))关于参数( heta)的导数并令其为0,就大功告成了:

    [ abla_{ heta}J( heta)=frac{1}{2}(X heta-y)^T(X heta-y)\=frac{1}{2} abla_{ heta}[(X heta)^TX heta-(X heta)^Ty-y^T(X heta)+y^Ty]=frac{1}{2} abla_{ heta}[ heta^T(X^TX) heta-y^T(X heta)-y^T(X heta)]\=frac{1}{2} abla_{ heta}[ heta^T(X^TX) heta-2(X^Ty)^T heta]=frac{1}{2}(2X^TX heta-2X^Ty)=X^TX heta-X^Ty ]

    哦,高中数学好像不太够,还要知道(a^Tb=b^Ta, abla_{x}Ax=A^T, abla_{x}x^TAx=(A+A^T)x)

    结束了无聊的数学推导,所谓的Normal Equation就来了:

    [X^TX heta=X^Ty ]

    我们暂时先不考虑(X^TX)不可逆的情况,最终的解析解就是( heta=(X^TX)^{-1}X^Ty)。这种方法不需要做Feature Scaling,但是只能用于容易求解的模型。

    Probabilistic view

    当观测数据满足一些假设条件时,就可以自然而然地推导出均方误差形式的损失函数。

    假设观测数据满足:

    [y^{(i)}= heta^Tx^{(i)}+epsilon^{(i)} ]

    其中,(epsilon^{(i)})表示偏差项,并且(epsilon^{(i)})服从IID的高斯分布,即(epsilon^{(i)}sim mathcal{N}(0, sigma^2))

    在满足上述假设的条件下,给定(x^{(i)}),观测到的(y^{(i)})满足概率分布(y^{(i)}|x^{(i)}; hetasim mathcal{N}( heta^Tx^{(i)}, sigma^2)),即:

    [p(y^{(i)}|x^{(i)}; heta)=frac{1}{sqrt{2pi }sigma}exp(-frac{(y^{(i)}- heta^Tx^{(i)})^2}{2 sigma^2}) ]

    我们希望选择合适的参数( heta),使得在整个训练集上最大化观测数据出现的概率,也就是所谓的极大似然估计:

    [prod_{i=1}^{n}p(y^{(i)}|x^{(i)}; heta)=prod_{i=1}^{n}frac{1}{sqrt{2pi }sigma}exp(-frac{(y^{(i)}- heta^Tx^{(i)})^2}{2 sigma^2})=L( heta) ]

    To make our life easier,采用对数似然函数的形式去求(L( heta))的最大值:

    [l( heta)=log L( heta)=nlog frac{1}{sqrt{2pi }sigma}-frac{1}{2sigma^2}sum_{i=1}^n(y^{(i)}- heta^Tx^{(i)})^2 ]

    因此,最大化(L( heta))与最小化(J( heta)=frac{1}{2}sum_{i=1}^{n}(h_{ heta}(x^{(i)})-y^{(i)})^2)等价,也就证明了均方误差损失函数的合理性。

    值得一提的是:上述假设并不唯一,存在其它合理的假设同样能够证明均方误差作为损失函数的合理性。

    局部加权线性回归

    在朴素的线性回归中,训练模型得到的参数( heta)是固定的,对于每个要预测的点(x)计算( heta^Tx)就完事了。这种参数化的学习算法在预测时不需要训练数据的支持,非常快捷。

    局部加权线性回归的motivation在于:朴素线性模型强行拟合所有训练样本,因为模型简单往往欠拟合。对于任意一个样本(x),如果只根据其周围几个样本来建立局部的线性模型,且距离(x)越近其在损失函数中的权值越大,就得到了所谓的Locally Weighted Linear Regression:

    [J( heta)=frac{1}{2}sum_{i=1}^{n}w^{(i)}(h_{ heta}(x^{(i)})-y^{(i)})^2 ]

    直观上看:如果一个点权值较大,其对损失函数的贡献就越大;如果权值较小,那么该点基本可以忽略不计。

    权值一般会设计为指数函数:

    [w^{(i)}=exp(-frac{(x^{(i)}-x)^T(x^{(i)}-x)}{2 au^2}) ]

    其中,(x)表示待测试样本,( au)负责控制随距离增加权值的衰减快慢。

    另外,与kNN类似,LWR也是一种懒惰学习算法,即只有给出测试样例时才会训练并预测。因此,这种非参数算法在预测时需要存储训练集,并且参数数量会随训练集大小线性增长。

  • 相关阅读:
    luogu 2491 [SDOI2011]消防 / 1099 树网的核 单调队列 + 树上问题
    BZOJ 1179: [Apio2009]Atm tarjan + spfa
    BZOJ 1112: [POI2008]砖块Klo Splay + 性质分析
    BZOJ 1596: [Usaco2008 Jan]电话网络 树形DP
    BZOJ 2060: [Usaco2010 Nov]Visiting Cows 拜访奶牛 树形DP
    CF286E Ladies' Shop FFT
    CF528D Fuzzy Search FFT
    BZOJ 3771: Triple 生成函数 + FFT
    BZOJ 3513: [MUTC2013]idiots FFT
    python爬虫网页解析之parsel模块
  • 原文地址:https://www.cnblogs.com/EIMadrigal/p/12130856.html
Copyright © 2011-2022 走看看