Linear Regression
线性回归应该算得上是最简单的一种机器学习算法了吧. 它的问题定义为:
- 给定训练数据集(D), 由(m)个二元组(x_i, y_i)组成, 其中:
- (x_i)是(n)维列向量
- (y_i)的值服从正态分布(N(f(x_i), sigma_i^2)), (f(x_i))是关于(x_i)的线性函数: (f(x_i) = w^Tx_i + b).
为方便起见, 令(x_i gets [x_{i0} = 1, x_{i1}, dots, x_{in}] = [1, x_i^T]^T, w gets [b, w^T]^T), ( herefore f(x_i) = w^Tx_i), 以期望值作为预测值, 即(y_i = f(x_i))
- 对于测试样本(x), 预测(x)对应的(y=f(x)).
问题对应的损失函数:
其中,
加上正则项后,
则
要使(L(w))取最得小值,
((I)是一个(n)维的单位矩阵)
(因为有(lambda I)在, 所以(X^TX + lambda I)一定是可逆的.)
Kernel-based Linear Regression:Theory
不带kernel的线性回归算法得到的模型是一个线性函数 (f(x) = w^Tx). 要将它变成非线性的, 一个很常见的做法是手动构造新的多项式特征, 例如: ((a, b) o (a^2, ab, b^2)). 这个做法从本质上来说就是一种kernel方法, 只不过因为是手动构造的feature space, 它的feature mapping function (Phi) 是已知了. 当原始输入空间的维度不高时, 这种手动方式当然是一个不错的选择, 但是当维度变高后, 例如100维, 代价就太高了.
使用kernel之后, 上面的损失函数变为:
其中,
最后得到的(w)也相应的变为:
之前已经反复讲过, 使用kernel method (kappa)时, 它对应的(Phi)是未知的. 对kernel linear regression也是如此. 所以现在得到的(w)是没法直接用于预测新样本的.
但是当一个新样本(x)进来时, ((x)不包含1, 但是(Phi(x))已经像上面那样已经包含了增广项1, 所以式子仍然没有显式的出现(b))
利用等式(Z(Z^TZ + lambda I_{n imes n})^{-1} = (ZZ^T + lambda I_{m imes m})^{-1}Z),(这个等式通过左右同时乘以相同的矩阵很容易验证.)
其中, (K = ZZ^T)是kernel matrix.
这样一来, 我们在(Phi(x))未知的情况下得到了测试样本(x)的预测值(y).