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

     

  • 相关阅读:
    ubantu安装pip3
    ubantu更换镜像源
    git 快速上手
    python zmq(ZeorMQ)
    用python连接SQL server数据库
    Django模板url需要注意的地方
    希尔排序记录--最好写的排序
    口腔溃疡要对症-------阴虚火旺和阳虚火旺
    与大学室友,保持一定的距离
    取指 间址 执行 中断 FE IND EX INT四个触发器
  • 原文地址:https://www.cnblogs.com/wuchaodzxx/p/5720153.html
Copyright © 2011-2022 走看看