• 线性回归


    线性回归

    (X=(x_1, x_2, ...,x_n)^T in mathbb{R}^{n imes p})表示数据,用(y=(y_1, y_2, ...,y_n)^T in mathbb{R}^{n})表示标签。对于一个样本(x_i),它的输出值是其特征的线性组合:

    [egin{equation} f(x_i) = sum_{m=1}^{p}w_m x_{im}+w_0={w}^T{x_i} end{equation} ]

    线性回归的目标是用预测结果尽可能地拟合目标label,用最常见的Least square作为loss function:

    [egin{equation} J(w)=frac{1}{n}sum_{i=1}^{n}(y_i - f(x_i))^2=frac{1}{n}|y-Xw|^2 end{equation} ]

    性能指标

    回归模型最简单常用的两种指标是平方根误差(Root Mean Square Error,RMSE)和R平方值((R^2)).

    • RMSE 是 MSE的平方根: (sqrt{frac{1}{n}sum_{i=1}^{n}(y_i - f(x_i))^2})
      缺点: 数值大小与数据集相关, 不容易在不同数据集上进行比较. 如果预测值和真实值都比较大,那么RMSE也较大.
    • R平方: 是一个0~1之间的相对值,克服了RMSE的缺点. R平方越接近于1,预测效果越好.

    [R^2 = 1 - frac{sum_{i=1}^{n}(y_i - f(x_i))^2}{sum_{i=1}^{n}(y_i - ar y))^2} ]

    局部加权线性回归

    Locally Weighted Lieanear Regression (LWR) 是一种非参数学习方法,不适合于数据量比较大的情况,每次数据改变时均需要重新计算.

    LWR: Fit ( heta) to minimize

    [sum_i omega^{(i)}(y^{(i)}- heta^T x^{(i)})^2 ]

    where (omega^{(i)}=exp(-frac{(x^{(i)}-x)^2}{2}))

    (x^{(i)})和x非常接近时,(omega^{(i)})接近于1;相差很大时,接近于0.
    这样离 x 越近的样本权重越大,越远的影响越小。这个公式与高斯分布类似,但有所不同,因为 w (i) 不是随机变量。
    此方法称为非参数学习算法,因为误差函数loss随着预测值的不同而不同,这样 θ 无法事先确定,预测一次需要临时计算.
    一个更加一般化的公式是在(omega^{(i)})的公式中分母2的后边加上( au^2),称为bandwith parameter(波长函数),它控制了权值随距离下降的速率.
    (omega^{(i)}=exp(-frac{(x^{(i)}-x)^2}{2 au^2}))

    单元多项式回归

    上边提到的局部加权线性回归属于多元线性回归,除此之外还有类线性单元多项式回归. 如多项式假设:(h_ heta= heta_0+ heta_1x_1+ heta_2x_1^2+ heta_3x_1^3+cdots+ heta_mx_1^m)
    单元多项式回归可以轻易地转化为线性回归:将高次项用新变量替换即可,转化为线性假设函数(h_ heta= heta_0+ heta_1x_1+ heta_2x_2+ heta_3x_3+cdots+ heta_mx_m).

    线性回归求解思路

    在求一个点的预测值时,在该点附近一段区间内,拟合一条直线,从而求得预测值.

    多元线性回归的求解方法可以是梯度下降和Normal Equation,以及二阶的牛顿法等。最小二乘法可以求出全局最优,但是大规模矩阵的求逆运算复杂度较高,因此在数据量较大时常使用梯度下降算法。牛顿法的收敛速度较快,但同样求逆运算复杂度较高.

    一元线性回归-最小二乘

    当我们希望预测值和真实值的平方和尽量小时,损失函数为(sum_{i=1}^n(y_i-hat y_i)^2), 这个就是最小二乘线性回归(Ordinary Least Squares, OLS)。普通最小二乘法是线性回归预测问题中一个很重要的概念, 并且十分有用,例如可以用来做推荐系统、资金流动预测等。

    当我们希望预测值和真实值的绝对值的和尽量小时,损失函数为(sum_{i=1}^n|y_i-hat y_i|), 这个就是最小绝对偏差(Least Absolute Deviation, LAD)线性回归。还有其他的不同的更复杂的损失函数,造就了不同的线性回归模型,比如分位数回归Huber回归,等等。

    由于最常用的、最简单的线性回归模型就是最小二乘法,所以通常说到线性回归的时候其实就是指的最小二乘线性回归。下面推导下我们中学数学课本上所学的最小二乘公式。

    公式推导[1]

    对观察点 ((x_i,y_i),i=1,2,...,n) 拟合一条直线: (y=a+bx),

    均方误差为:(D=sum_{i=1}^n(y_i-hat y_i)^2=sum_{i=1}^n(y_i-a-b x_i)^2),对a,b分别求偏导,并令导数为0,得:

    [{partial Dover partial a}=-2ig (sum_i y_i-na-bsum_i x_iig )=0 \ {partial Dover partial b}=sum_i 2(y_i-a-bx_i)cdot(-x_i)=0 ]

    (nar x=sum_i x_i, nar y=sum_i y_i)代入,可得:

    [egin{cases} a=ar y-bar x \ b={sum_i x_iy_i-ar ysum_i x_iover sum_i x_i^2-ar xsum_i x_i}={sum_i (x_i-ar x)(y_i-ar y)over sum_i (x_i-ar x)^2} end{cases} ]

    多元线性回归-Normal Equation

    Normal Equation是一种基础的最小二乘方法,是以矩阵计算的方式求解多元线性回归。相比于梯度下降法是一种更加数学化的方法,可以用来求权重向量θ。

    记:

    [underset{1le ile m}{x^{(i)}} = left[ egin{matrix} x_0^{(i)}\ x_1^{(i)}\ x_2^{(i)}\ ...\ x_n^{(i)} end{matrix} ight] in R^{(n+1)};quad y=left[ egin{matrix} y^{(1)}\ y^{(2)}\ y^{(3)}\ ...\ y^{(m)} end{matrix} ight]; quad heta= egin{bmatrix} heta_0\ heta_1\ heta_2\ ...\ heta_n end{bmatrix} \ X=left[ egin{matrix} (x^{(1)})^T\ (x^{(2)})^T\ (x^{(3)})^T\ ...\ (x^{(m)})^T end{matrix} ight]= left[ egin{matrix} x_0^{(1)}&x_1^{(1)}&x_2^{(1)}&...&x_n^{(1)}\ x_0^{(2)}&x_1^{(2)}&x_2^{(2)}&...&x_n^{(2)}\ x_0^{(3)}&x_1^{(3)}&x_2^{(3)}&...&x_n^{(3)}\ ...&...&...&...&...\ x_0^{(m)}&x_1^{(m)}&x_2^{(m)}&...&x_n^{(m)}\ end{matrix} ight] ]

    用矩阵相乘的形式表示为(h_{ heta}(x)= heta^TX=Xcdot heta),均方误差损失函数(J( heta_0, heta_1,..., heta_n)=frac{1}{2m} sum_{i=1}^m (h_ heta(x^{(i)})-y^{(i)})^2)可以表示为

    [egin{align}J( heta)&=((X heta)^T-y^T)(X heta-y) \ &=(X heta)^TX heta-(X heta)^Ty-y^T(X heta)+y^Ty \ &= heta^TX^TX heta-2(X heta)^Ty+y^Ty end{align} ]

    接着对θ求导:

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

    最终得到的计算表达式即为Normal equation:( heta=(X^TX)^{-1}X^Ty).

    此时表达式中存在一个问题,如果矩阵((X^TX)) 不可逆怎么办呢?原因有二:
    1.存在冗余特征。
    比如有两个特征

    特征 (x_1) (x_2)
    意义 面积((feet^2)) 面积((m^2))

    因为 1 m=3.28 feet,所以 (x_1=(3.28)^2cdot x_2)。我们知道线性代数中出现这种线性相关的情况,其行列式值为0,所以不可逆,我们只需确保不会出现冗余特征即可。(根据相关性去除冗余特征)

    2.特征数量 n 过多,而训练样本数 m 过少。 解决方法为删除一部分特征,或者增加样本数量。(特征选择)

    另外的解决办法是加入扰动项防止(X^TX)不可逆[2]
    增加λ扰动:( heta = (X^{T}X + lambda I)^{-1}X^{T}y)
    同时能够起到防止过拟合的作用. 这个正则项与添加L2 norm的线性回归求导结果相同:
    (J'( heta) = [frac{1}{2}(h_{ heta}(x^{(i)})-y^{(i)})^{2}]' + lambdasum_{j=1}^{n} heta_{j}^{2}= frac{1}{2}(X heta-y)^{T}(X heta-y) + lambda heta^{T} heta)
    然后对这个新的目标函数求驻点,得到:( heta = (X^{T}X + lambda I)^{-1}X^{T}y)

    线性回归-梯度下降

    随机初始化θ;
    沿着负梯度方向迭代更新θ,为了使得 J(θ) 更小:
    ( heta_{j} = heta_{j} - alpha frac{partial J( heta)}{partial heta})
    梯度方向为:

    [egin{align} frac{partial J( heta)}{partial heta_{j}} &= frac{partial}{partial heta_{j}}frac{1}{2}(h_{ heta}(x) - y)^{2} \ &= (h_{ heta}(x) - y)frac{partial}{partial heta_{j}}(h_{ heta}(x) - y) \ &= (h_{ heta}(x) - y)x_{j} end{align} ]

    梯度下降和Normal equation的区别

    假设我们有 m 组样本,每个样本有 n 个特征

    对比 Gradient descent Normal equation
    超参数 需要选取合适的学习率α 不需要学习率
    迭代计算 需要很多次的迭代计算 不需要迭代计算
    计算量 在n很大时,能工作得很好 需要计算((X^TX)^{−1}),其时间复杂度为(O(n^3)); 当n非常大时,速度非常慢

    我们如何来选择使用哪种方法么呢?这个就要跟着感觉走了。因为我们无法精确的得到选择Gradient descent还是Normal equation的阈值。一般如果 n 不超过1000的话,选用Normal equation还是挺好的,如果要是 n 超过10000的话,那么矩阵 X 的规模将是10000×10000,这时候Gradient descent将是一个更好的选择。

    牛顿法求最大似然估计

    解最大似然估计的方法可以是求导迭代的方法,但是收敛速度慢.而使用牛顿下降法可以加快收敛速度.

    当要求解(f( heta)=0)时,如果f可导,那么可以通过迭代公式:

    [ heta:= heta-frac{f( heta)}{f^{'}( heta)} ]

    来求解最小值.(( heta_{k+1})为点(( heta_k,f( heta_k)))处的切线与横轴的交点)

    当应用于求解最大似然估计的最大值时,变成求解 (l^{'}( heta)=0) 的问题,迭代公式变为:

    [ heta:= heta-frac{l^{'}( heta)}{l^{''}( heta)} ]

    ( heta)是向量时,牛顿法可以使用下面的式子表示:

    [ heta:= heta-H^{-1} abla_ heta l( heta) ]

    其中(H_{ij}=frac{partial^2l( heta)}{partial heta_i partial heta_j})(n imes n)的Hessian矩阵.

    牛顿法收敛速度虽然很快,但求 Hessian 矩阵的逆的时候比较耗费时间。
    当初始点 (X_0) 靠近极小值 X 时,牛顿法的收敛速度是最快的。但是当 (X_0) 远离极小值时,
    牛顿法可能不收敛,甚至连下降都保证不了。原因是迭代点 (X_{k+1}) 不一定是目标函数 f 在牛顿方向上的极小点。

    正则化

    对误差项(损失函数)加惩罚项是防止过拟合的一种手段.
    加L1正则的线性回归有lasso回归,趋向于迫使系数变为0,这使得它更适合于学习稀疏模型.
    加L2正则的回归有岭回归(ridge regression),迫使系数缩小.


    1. 公式计算参考 https://my.oschina.net/keyven/blog/526010 ↩︎

    2. 再论最小二乘 https://www.cnblogs.com/little-YTMM/p/5885856.html ↩︎

  • 相关阅读:
    Spark Application的调度算法
    spark 问题
    读取hdfs文件之后repartition 避免数据倾斜
    生成树
    Curator Cache
    Curator leader 选举(一)
    Spark ZooKeeper数据恢复
    Curator 异步获取结果
    spark shuffle 相关细节整理
    matlab 求解线性方程组之LU分解
  • 原文地址:https://www.cnblogs.com/makefile/p/linear-reg.html
Copyright © 2020-2023  润新知