zoukankan      html  css  js  c++  java
  • 第一章 线性回归

    监督学习

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

     

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

     

    无监督学习

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

     

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

    鸡尾酒会问题

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

    [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(参数)学习算法。所谓参数学习算法它有固定的明确的参数,参数 一旦确定,就不会改变了,我们不需要在保留训练集中的训练样本。而非参数学习算法,每进行一次预测,就需要重新学习一组 , 是变化的,所以需要一直保留训练样本。也就是说,当训练集的容量较大时,非参数学习算法需要占用更多的存储空间,计算速度也较慢。 

     

  • 相关阅读:
    SQL Server 阻止了对组件 'Ole Automation Procedures' 的 过程'sys.sp_OACreate' 的访问
    谷歌浏览器扩展程序manifest.json参数详解
    获取天气api
    UVA 10385 Duathlon
    UVA 10668 Expanding Rods
    UVALIVE 3891 The Teacher's Side of Math
    UVA 11149 Power of Matrix
    UVA 10655 Contemplation! Algebra
    UVA 11210 Chinese Mahjong
    UVA 11384 Help is needed for Dexter
  • 原文地址:https://www.cnblogs.com/wuchaodzxx/p/5720153.html
Copyright © 2011-2022 走看看