监督学习
给出一个算法,需要部分数据集已经有正确答案。比如给定房价数据集。监督学习又叫回归问题
例子:房价预测,癌症预测
无监督学习
样本集未作标记,把一组未标记的数据分成多个聚类
例子:组织计算机集群,社交网络分析
鸡尾酒会问题
从背景噪声中提取有效信息。
[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_{ heta }(x)$=$ heta_{ 0}$+$ heta_{ 1}$$x_{ 1}$+$ heta_{ 2}$$x_{ 2}$
$h(x)=sum_{i=0}^{n} heta_{i}x_{i}$ = $ heta ^{T}x$
接下来的问题就是如何求解$ heta$的值
定义如下损失函数,以表示$h(x^{i})$与$y^{i}$的接近程度
$J( heta)=frac{1}{2}sum_{i=1}^{m}(h_{ heta}(x^{(i)})-y^{{i}})^{2}$
LMS算法
对如上面的损失函数,选择合适的$ heta$使之最小。先初始化$ heta$,然后使用梯度下降法不停的更新$ heta$的值。
$ heta_{j}:= heta_{j}-alphafrac{partial }{partial heta_{j}}J( heta)$
此更新对于所有的j=0,1,2,,,n的值同时更新。($ heta$一般是一个向量)
对右侧的偏导部分进行求解(先考虑只有一个训练样本$(x,y)$)
$frac{partial }{partial heta_{j}}J( heta)=frac{partial }{partial heta_{j}}frac{1}{2}(h_{ heta}(x)-y)^{2}$
$frac{partial }{partial heta_{j}}J( heta)=2cdot frac{1}{2} (h_{ heta}(x)-y) cdot frac{partial }{partial heta_{j}} (h_{ heta}(x)-y)$
$frac{partial }{partial heta_{j}}J( heta)= (h_{ heta}(x)-y) cdot frac{partial }{partial heta_{j}}(sum_{i=0}^{n} heta_{i}x_{i}-y)$
$frac{partial }{partial heta_{j}}J( heta)= (h_{ heta}(x)-y)x_{j}$
对于单一的训练样本,更新规则如下:
$ heta_{j} := heta_{j}+alpha (y^{(i)}-h_{ heta}(x^{(i)}))x_{j}^{(i)}$
该规则称为LMS更新规则,具有自然和直观的特点。比如,更新的幅度和$(y_{(i)}-h_{ heta}(x^{(i)}))$成比例。因此,当我们的预测值与实际值非常接近,那么就没有必要更新参数值。
对于一组训练样本,更新规则如下:
$ heta_{j} := heta_{j}+alpha sum_{i=1}^{m} (y^{(i)}-h_{ heta}(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需要大量的矩阵运算,特别是求矩阵的逆。在矩阵很大的情况下,会大大增加计算复杂性以及对计算机内存容量的要求。
矩阵导数
矩阵求导具有以下公式:
$igtriangledown _{A}trAB = B^{T}~~~(1)$
$igtriangledown _{A^{T}}f(A) = (igtriangledown _{A}f(A))^{T} ~~~(2)$
$igtriangledown _{A}trABA^{T}C = CAB+C^{T}AB^{T}~~~(3)$
$igtriangledown _{A} left | A ight | = left | A ight |(A^{-1})^{T}~~~(4)$
最小二乘法修正
前面提到的损失函数表示如下 :
$J( heta)= frac{1}{2}(X heta-vec{y})^{T}(X heta-vec{y})$
$J( heta)= frac{1}{2} sum_{i=1}^{m}(h_{ heta}(x^{(i)})-y^{(i)})^{2}$
根据上面矩阵导数公式(2),(3),发现:
$igtriangledown _{A^{T}}trABA^{T}C = B^{T}A^{T}C^{T}+BA^{T}C~~~(5)$
因此,
$igtriangledown _{ heta}J( heta) = igtriangledown _{ heta} frac{1}{2}(X heta-vec{y})^{T}(X heta-vec{y})$
$igtriangledown _{ heta}J( heta) = frac{1}{2}igtriangledown _{ heta}( heta^{T}X^{T} X heta - heta^{T}X^{T} vec{y} - vec{y}^{T}X heta + vec{y}^{T}vec{y})$
$igtriangledown _{ heta}J( heta) = frac{1}{2}igtriangledown _{ heta} tr( heta^{T}X^{T} X heta - heta^{T}X^{T} vec{y} - vec{y}^{T}X heta + vec{y}^{T}vec{y})$
$igtriangledown _{ heta}J( heta) = frac{1}{2}igtriangledown _{ heta}(tr heta^{T}X^{T}X heta-2trvec{y}^{T}X heta)$
$igtriangledown _{ heta}J( heta) = frac{1}{2}(X^{T}X heta+X^{T}X heta-2X^{T}vec{y})$
$igtriangledown _{ heta}J( heta) = X^{T}X heta-X^{T}vec{y}~~~(6)$
最小化J,则令其导数为0,因此获得以下正则方程:
$X^{T}X heta = X^{T}vec{y}$
因此
$ heta = (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中,我们选取合适的$ heta$使得下式最小:
$sum_{i}^{} omega^{(i)}(y^{(i)}- heta^{T}x^{(i)})^{2}$
其中:
$omega^{(i)} = exp(-frac{(x^{(i)}-x)^{2}}{2 au^{2}})$
LWR算法是我们遇到的第一个non-parametric(非参数)学习算法,而线性回归则是我们遇到的以一个parametric(参数)学习算法。所谓参数学习算法它有固定的明确的参数,参数 一旦确定,就不会改变了,我们不需要在保留训练集中的训练样本。而非参数学习算法,每进行一次预测,就需要重新学习一组 , 是变化的,所以需要一直保留训练样本。也就是说,当训练集的容量较大时,非参数学习算法需要占用更多的存储空间,计算速度也较慢。