引言
机器学习中的监督学习(Supervised Learning)依据目标(Target)变量的类型分为回归问题(Regression,目标变量为浮点数)和分类问题(Classification,目标变量为离散值)。
在遇到回归问题时,自然而然的就要想到简单的线性回归(Linear Regression)可不可以解决当前的问题。在选取了一些特征变量(Features)之后,我们可以通过组装更高幂次的项来模拟非线性的回归特性。
由于特定函数可以通过泰勒展开转化为多项式的形式(保留一定的精度),所以原则上可以通过此种方法模拟这类函数的非线性。
什么是泰勒展开?
泰勒(Taylor)中值定理 如果函数 f(x) 在含有 x0 的某个开区间 (a,b) 内具有直到 (n+1) 阶的导数,则对任一 x∈(a,b) ,有
f(x)=f(x0)+f′(x0)(x−x0)+f′′(x0)2!(x−x0)2+⋯+f(n)(x0)n!(x−x0)n+Rn(x)
其中
Rn(x)=f(n+1)(ξ)(n+1)!(x−x0)n+1
这里 ξ 是 x0 与 x 之间的某个数。Rn(x) 称为拉格朗日(Lagrange)余项。
线性回归
线性回归是假设特征向量与目标变量有以下的假设关系(Hypothesis)
θi 称为参数(Parameter)或权重(Weight),其中 x0 恒等于1,称为截距项(Intercept Term)。
依此,有
此为成本函数(Cost Function)。
线性回归解法
如何选取合适的
θ
使得成本函数尽可能的小?
主要有梯度下降法(Gradient Descent)和正规方程法(Normal Equation)。
梯度下降法
LMS(Least Mean Squares)更新法则或Widrow-Hoff学习法则
其中 α 为学习率(Learning Rate), (y(i)−hθ(x(i))) 为误差项(Error Term)。
而基于应用LMS更新法则的方式不同,有两种使用方法:批处理梯度下降法(Batch Gradient Descent)和随机梯度下降法(Stochastic Gradient Descent,又名增量梯度下降法,Incremental Gradient Descent)。
批处理梯度下降法
重复以下更新法则直至收敛,
随机梯度下降法
循环 {
for i=1 to m {
}
}
一般来说,随机梯度法比批处理梯度法要更快收敛,这得益于随机梯度法每遇到一个训练用例时就进行相应的更新,而批处理梯度法需要费时费力的遍历所有训练用例后方可更新。尤其当训练用例数目急剧增长后,她们的差距便会变得更加明显。
正规方程法
把训练用例一行一行摆放进
X
:
把对应的目标值放入 m 维向量中:
则,
求导可得:
令其为零,可得正规方程式:
解之可得:
这里 X∈Rm×(n+1) , m 个训练用例,
毋庸置疑,这里 XTX 是 R(n+1)×m×Rm×(n+1) ,计算复杂度与训练用例数目, m ,相关。
以上是不可避免的计算量,由于矩阵取逆的运算比较费时,当
工程实践经验
有时由于训练集合中使用的特征数目较少,导致Underfitting,这时小编会通过添加二次,三次甚至多次项的方法把特征数目人为增多;
但是这样的数据可能导致 X 矩阵的秩比较小,
X 成为或接近奇异的可能性较大,不能使用正规矩阵法直接求解,只能使用梯度下降法求解;但如果原来的特征值不是都在1附近的话,新添加的特征值很可能变得很大或很小,这时直接用于训练的话,有些维度的导数过大或过小,导致结果不收敛,最后得到的 θ 向量也就没有了意义(最后的成本函数值可能很大);
这时可以使用正则化的方法把特征值变换至 0 附近,其实这就是把
x∼N(μ,σ) 变换成 x^=x−μσ∼N(0,1) 的方法(提示:不要对 X 的常数列(1,1,...1)T 做正则化操作,否则你会得到一列 0⃗ ,最后的成本函数也不正确,可能看到的是一堆NaN);使用梯度下降法时,由于这个是迭代的方法,初始值可以影响求解的时间,简单的把初始向量设为 0⃗ 不见得好,如果可能的话,可以把初始向量设为在最终 θ 的附近,当然这个很难,不过我们可以选择随机的给出 θ 值(提示,一般伪随机数 r∼Uniform(0,1) ,我们可以通过 r^=(b−a)r+a∼Uniform(a,b) 得到我们想要的数值范围内的随机数);
初始值对一个非凹函数的求解关系很大(当然我们的线性回归是个凹函数),初始值可以使用其他简单模型求解得出,如一些二次型的函数既是凹函数又有矩阵解法,一般可以很快求得结果。把得出的初始值代入非凹函数,一般得到的结果质量会很好(不宜陷入局部解),运行时间也会有改进(迭代次数会减少)。