第一章 线性回归
监督学习
给出一个算法,需要部分数据集已经有正确答案。比如给定房价数据集。监督学习又叫回归问题
例子:房价预测,癌症预测
无监督学习
样本集未作标记,把一组未标记的数据分成多个聚类
例子:组织计算机集群,社交网络分析
鸡尾酒会问题
从背景噪声中提取有效信息。
[W,s,v]=svd((repmat(sum(x.*x,1),size(x,1),1).*x)*x');
线性回归
比如房价如下:
$x_{1}^{(i)}$表示第i个房子的居住面积,$x_{2}^{(i)}$表示第i个房子的卧室数目,因此x是一个二维向量。
定义假设函数:$h_{\theta }(x)$=$\theta_{ 0}$+$\theta_{ 1}$$x_{ 1}$+$\theta_{ 2}$$x_{ 2}$
$h(x)=\sum_{i=0}^{n}\theta_{i}x_{i}$ = $\theta ^{T}x$
接下来的问题就是如何求解$\theta$的值
定义如下损失函数,以表示$h(x^{i})$与$y^{i}$的接近程度
$J(\theta)=\frac{1}{2}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{{i}})^{2}$
LMS算法
对如上面的损失函数,选择合适的$\theta$使之最小。先初始化$\theta$,然后使用梯度下降法不停的更新$\theta$的值。
$\theta_{j}:=\theta_{j}-\alpha\frac{\partial }{\partial \theta_{j}}J(\theta)$
此更新对于所有的j=0,1,2,,,n的值同时更新。($\theta$一般是一个向量)
对右侧的偏导部分进行求解(先考虑只有一个训练样本$(x,y)$)
$\frac{\partial }{\partial \theta_{j}}J(\theta)=\frac{\partial }{\partial \theta_{j}}\frac{1}{2}(h_{\theta}(x)-y)^{2}$
$\frac{\partial }{\partial \theta_{j}}J(\theta)=2\cdot \frac{1}{2} (h_{\theta}(x)-y) \cdot \frac{\partial }{\partial \theta_{j}} (h_{\theta}(x)-y)$
$\frac{\partial }{\partial \theta_{j}}J(\theta)= (h_{\theta}(x)-y) \cdot \frac{\partial }{\partial \theta_{j}}(\sum_{i=0}^{n}\theta_{i}x_{i}-y)$
$\frac{\partial }{\partial \theta_{j}}J(\theta)= (h_{\theta}(x)-y)x_{j}$
对于单一的训练样本,更新规则如下:
$\theta_{j} := \theta_{j}+\alpha (y^{(i)}-h_{\theta}(x^{(i)}))x_{j}^{(i)}$
该规则称为LMS更新规则,具有自然和直观的特点。比如,更新的幅度和$(y_{(i)}-h_{\theta}(x^{(i)}))$成比例。因此,当我们的预测值与实际值非常接近,那么就没有必要更新参数值。
对于一组训练样本,更新规则如下:
$\theta_{j} := \theta_{j}+\alpha \sum_{i=1}^{m} (y^{(i)}-h_{\theta}(x^{(i)}))x_{j}^{(i)} $
上式称为批量梯度下降。
对于一组训练样本,也可以使用单一的训练样本下的更新规则,每次对i进行循环
上式称为随机梯度下降。
通常情况下随机梯度下降性能优于批量梯度下降。
举例:(批量梯度下降)
clear all; clc; xa = linspace(-2,2,40)'; ya = 2*xa+rand(length(xa),1); t=zeros(40,1)+1; x=[t,xa]; %40x2 y=ya; %40x1 maxgen=1000; theta0=0; theta1=1; theta=[theta0;theta1] %2x1 alpha=0.01 for i = 1:maxgen e = (theta'*x')'-y theta = theta-alpha*(e'*x)'; end h=(theta'*x')'; plot(x(:,2),y,'*'); hold on; plot(x(:,2),h);
xa用于生成随机序列,且是从小到大排序,维度40X1,x维度为40x2,第一列全为1代表x0=1,第二列即是xa的值。y维度为40x1。
正规方程
Normal Equation 跟 Gradient Descent(梯度下降)一样,可以用来求权重向量θ。但它与Gradient Descent相比,既有优势也有劣势。
优势:
Normal Equation可以不在意x特征的scale。比如,有特征向量X={x1, x2}, 其中x1的range为1~2000,而x2的range为1~4,可以看到它们的范围相差了500倍。如果使用Gradient Descent方法的话,会导致椭圆变得很窄很长,而出现梯度下降困难,甚至无法下降梯度(因为导数乘上步长后可能会冲出椭圆的外面)。但是,如果用Normal Equation方法的话,就不用担心这个问题了。因为它是纯粹的矩阵算法。
劣势:
相比于Gradient Descent,Normal Equation需要大量的矩阵运算,特别是求矩阵的逆。在矩阵很大的情况下,会大大增加计算复杂性以及对计算机内存容量的要求。
矩阵导数
矩阵求导具有以下公式:
$\bigtriangledown _{A}trAB = B^{T}~~~(1)$
$\bigtriangledown _{A^{T}}f(A) = (\bigtriangledown _{A}f(A))^{T} ~~~(2)$
$\bigtriangledown _{A}trABA^{T}C = CAB+C^{T}AB^{T}~~~(3)$
$\bigtriangledown _{A} \left | A \right | = \left | A \right |(A^{-1})^{T}~~~(4)$
最小二乘法修正
前面提到的损失函数表示如下 :
$J(\theta)= \frac{1}{2}(X\theta-\vec{y})^{T}(X\theta-\vec{y})$
$J(\theta)= \frac{1}{2} \sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^{2}$
根据上面矩阵导数公式(2),(3),发现:
$\bigtriangledown _{A^{T}}trABA^{T}C = B^{T}A^{T}C^{T}+BA^{T}C~~~(5)$
因此,
$\bigtriangledown _{\theta}J(\theta) = \bigtriangledown _{\theta} \frac{1}{2}(X\theta-\vec{y})^{T}(X\theta-\vec{y})$
$\bigtriangledown _{\theta}J(\theta) = \frac{1}{2}\bigtriangledown _{\theta}(\theta^{T}X^{T} X \theta -\theta^{T}X^{T} \vec{y} - \vec{y}^{T}X\theta + \vec{y}^{T}\vec{y})$
$\bigtriangledown _{\theta}J(\theta) = \frac{1}{2}\bigtriangledown _{\theta} tr(\theta^{T}X^{T} X \theta -\theta^{T}X^{T} \vec{y} - \vec{y}^{T}X\theta + \vec{y}^{T}\vec{y})$
$\bigtriangledown _{\theta}J(\theta) = \frac{1}{2}\bigtriangledown _{\theta}(tr\theta^{T}X^{T}X\theta-2tr\vec{y}^{T}X\theta)$
$\bigtriangledown _{\theta}J(\theta) = \frac{1}{2}(X^{T}X\theta+X^{T}X\theta-2X^{T}\vec{y})$
$\bigtriangledown _{\theta}J(\theta) = X^{T}X\theta-X^{T}\vec{y}~~~(6)$
最小化J,则令其导数为0,因此获得以下正则方程:
$X^{T}X\theta = X^{T}\vec{y}$
因此
$\theta = (X^{T}X)^{-1}X^{T}\vec{y}$
举例:
clear all; clc; xa = linspace(-2,2,40)'; ya = 2*xa+rand(length(xa),1); t=zeros(40,1)+1; x=[t,xa]; %40x2 y=ya; %40x1 theta=(x'*x)^(-1)*x'*y %对应公式(6) h=(theta'*x')'; plot(x(:,2),y,'*'); hold on; plot(x(:,2),h);
局部加权线性回归(LWR)
前面提到的线性回归算法,采用不同数量的特征时,容易出现欠拟合或过拟合。如下第一,三图:
LWR可以自动的选择特征数。
在LWR中,我们选取合适的$\theta$使得下式最小:
$\sum_{i}^{} \omega^{(i)}(y^{(i)}-\theta^{T}x^{(i)})^{2}$
其中:
$\omega^{(i)} = exp(-\frac{(x^{(i)}-x)^{2}}{2\tau^{2}})$
LWR算法是我们遇到的第一个non-parametric(非参数)学习算法,而线性回归则是我们遇到的以一个parametric(参数)学习算法。所谓参数学习算法它有固定的明确的参数,参数 一旦确定,就不会改变了,我们不需要在保留训练集中的训练样本。而非参数学习算法,每进行一次预测,就需要重新学习一组 , 是变化的,所以需要一直保留训练样本。也就是说,当训练集的容量较大时,非参数学习算法需要占用更多的存储空间,计算速度也较慢。