博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第一章 线性回归
阅读量:5051 次
发布时间:2019-06-12

本文共 4495 字,大约阅读时间需要 14 分钟。

监督学习

给出一个算法,需要部分数据集已经有正确答案。比如给定房价数据集。监督学习又叫回归问题

 

例子:房价预测,癌症预测

 

无监督学习

样本集未作标记,把一组未标记的数据分成多个聚类

 

例子:组织计算机集群,社交网络分析

鸡尾酒会问题

从背景噪声中提取有效信息。

[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]; %40x2y=ya; %40x1maxgen=1000;theta0=0;theta1=1;theta=[theta0;theta1] %2x1alpha=0.01for i = 1:maxgen    e = (theta'*x')'-y    theta = theta-alpha*(e'*x)';endh=(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]; %40x2y=ya; %40x1theta=(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(参数)学习算法。所谓参数学习算法它有固定的明确的参数,参数 一旦确定,就不会改变了,我们不需要在保留训练集中的训练样本。而非参数学习算法,每进行一次预测,就需要重新学习一组 , 是变化的,所以需要一直保留训练样本。也就是说,当训练集的容量较大时,非参数学习算法需要占用更多的存储空间,计算速度也较慢。 

 

转载于:https://www.cnblogs.com/wuchaodzxx/p/5720153.html

你可能感兴趣的文章
C++标准库vector使用(更新中...)
查看>>
cocos2d-x 2.2.6 之 .xml文件数据读取
查看>>
枚举的使用
查看>>
BZOJ 1531 二进制优化多重背包
查看>>
BZOJ 2324 (有上下界的)费用流
查看>>
python3基础06(随机数的使用)
查看>>
Zookeeper系列(二)特征及应用场景
查看>>
【HTTP】Fiddler(三)- Fiddler命令行和HTTP断点调试
查看>>
Spring Boot使用Druid和监控配置
查看>>
poi 处理空单元格
查看>>
Android 内存泄漏优化总结
查看>>
luogu4849 寻找宝藏 (cdq分治+dp)
查看>>
Spring Cloud微服务笔记(五)Feign
查看>>
C语言键盘按键列表
查看>>
Codeforces Round #374 (Div. 2)
查看>>
oracle数据类型
查看>>
socket
查看>>
Vue中使用key的作用
查看>>
二叉索引树 树状数组
查看>>
日志框架--(一)基础篇
查看>>