zoukankan      html  css  js  c++  java
  • [机器学习][线性回归] 有监督学习之线性回归

    有监督学习(Supervised learning)是一种有示教信号的学习方法,也就是已知一部分数据及其相应的标签(Label),然后建立模型并选取相应的损失函数(Loss function),通过最小化损失函数的方法得到最优模型参数,其中,最小化损失函数的过程就是训练过程。

    图2 监督学习训练过程

    有监督学习一般用于解决两类问题:回归问题(Regression)和分类问题(Classification)。回归问题一般是通过一系列已知数据预测一个连续值,如给定了一段时间内某地的房价随时间变化的数据,我们就可以用机器学习方法利用已有的房价信息预测未来某一时刻的房价具体值;目前深度学习方向较为复杂的长短时记忆网络(LSTM)模型可以进行语义分析,根据之前的句子内容预测判断之后将会出现的词语。分类问题和回归问题本质上是一样的,分类问题是将回归问题的输出通过阈值比较进行离散化得到一个具体的标签(类别),如在深度学习图片分类方面基准数据集之一的MINIST数据集,拥有60000幅28×28像素的手写数字0-9的灰度图像,通过CNN,SVM等有监督机器学习方法能达到99%以上的识别正确率。

        以下我们将从基础的线性回归模型、经典的支持向量机模型来具体对监督学习进行进一步的介绍。

    2.1 线性回归模型

        在介绍线性回归模型之前,我们先明确几个变量的具体意义:

    • 特征向量: 特征也可以理解为属性,这是我们的输入数据,如我们根据一个地区的人均犯罪率、住宅平均房间数、城镇师生比例三个属性(特征)去预测该地区的房价时,。而所有特征的集合称为特征向量,用一个列向量表示:

    一个数据集会包含很多的样本,每个样本都包含一个特征向量,我们一般用来表示该数据集中第个样本的特征向量中的第个特征,表示第个特征向量。

    • 标签向量:表示一个特征向量所对应的标签,数据集中第个样本的特征向量对应的标签用来表示。在如上提到的房价回归问题中,标签即为一个特征向量对应的房价,是一个连续值;在分类问题中,标签即为代表样本类别的离散值,如0,1,2等。
    • 预测函数:它是我们预测结果准度的基石,对于具有m个特征属性的样本,线性预测函数定义为:

    上式可用更简洁的矩阵乘法的形式写出:

    其中, 均为列向量,表示向量的转置,为偏置(Bias)。为回归系数,也可以代表每个特征具有的权值(Weight),权值越大,说明该属性的重要性越大。

        线性回归模型(Linear regression model)就是试图通过确定预测函数中的权值向量和偏置,来使预测函数尽可能的接近给定标签。线性回归模型形式简单,但却是机器学习和深度学习的基石。目前非常火热的深度学习就是在线性回归模型的基础上添加了层级结构,高位映射等方法,用很高的复杂度拟合非常复杂的分布。

        为了方便起见,我们首先考虑线性回归中最简单的一种情形:单变量(特征)线性回归。举个例子,我们人工合成一段数据,其中为从0.1到10,间隔为0.1的100个小数,即是均值为0,标准差为1的高斯白噪声,也为100个点。是特征向量对应的标签向量。我们的线性回归可以利用这些已知的带噪声的100个样本数据来拟合原始未加噪的数据。在这里,我们可以将这个问题近似的比作利用欧姆定律测量电阻的阻值的问题,此时为电流值,为电压值,线性回归模型将会根据测的的100组数据拟合得到这条直线,也就是得到的值,其中代表被测电阻的估计值,代表被测处由导线电阻引起的电压偏置。

    上面提到,线性回归试图学习得到

    实际上这个问题可以表述为:如何通过已知的100个样本数据得到式中的值,使该模型的输出与原样本标签向量尽可能的接近。显然,问题的关键在于度量之间的差异。在机器学习中均方误差(mean square error, MSE)是一种经典且常用的误差度量方法,在该问题中,我们的损失函数可以设定为均方误差函数,优化目标就是让均方误差函数最小,即选取适当的参数 ,使得下式最小:

        均方误差函数对应于欧氏距离(Euclidean distance),具有很好的几何意义,用上述方法进行线性回归模型的求解也称为最小二乘法。用最小二乘法求解就是寻找一条让所有样本到该拟合直线的欧氏距离之和最小的直线。

        我们将上述例子中样本对应的损失函数用穷举法画出,如下图所示:

    图3 损失函数可视化

    A图是以为横坐标,损失函数为纵坐标的图像,可以看出损失函数在空间中是一个平滑的曲面,实际上可以从理论上证明该函数是一个凸函数,即只有一个最小值。B图是当固定为损失函数取最小值的曲线,可以看作是沿方向的梯度图。同理,C图是当固定为损失函数取最小值的曲线。D图是A图的等高线图,从该图可以看出当时损失函数最小。

        使用穷举法画出损失函数并得到最小值只是方便可视化的一种方法,实际中需要耗费大量的时间,所以寻找最适合的参数一般是通过最优化理论来解决,线性回归最优化损失函数一般有两种方法:梯度下降法和正规方程法。这两种方法各有优点,下面我们用这两种方法分别求解上述例子中的参数的值。

    2.1.1 梯度下降法

        从损失函数的形式我们可以看出,是由输入的样本数据决定的多元函数。既然是函数,那么我们就可以顺着偏导数,也就是梯度最大的方向去优化参数,直到目标函数的值降到最低。所以在梯度下降法中我们要做的事情非常简单:1.求出梯度;2.迭代优化。对于上述损失函数,分别对参数求导:

    因为是求损失函数的最小值,所以梯度方向是偏导数的反方向,对参数应用梯度下降法进行更新:

    其中是学习率(learn rate),是机器学习乃至深度学习中最重要的超参数之一,学习率一般范围在0.00001到1之间,若学习率选择的太大可能导致错过参数的最佳值,精度降低甚至不收敛,学习率太小则收敛时间太慢,时间代价太高。注意到梯度下降法需要一个初值来"启动"迭代更新,初值的选取理论上来说是任意的,但一个距离最优参数较近的初值可以加速迭代,所以一般可以事先估计一下最优参数的范围然后随机选取。

    程序按如上所示的公式反复迭代多次,即可得到损失函数的最优化结果,通常情况下,迭代次数越多,得到的结果越精确,但对于多项式回归、非线性回归等复杂度较高的模型中,迭代次数过多反而会出现过拟合的现象,所以迭代次数作为一个同样重要的超参数也需要仔细选取。

    下面我们根据之前提到的100个样本数据来对损失函数进行优化,选取学习率,迭代次数分别为100次和10000次,结果如图4所示。可以看出迭代10000次后拟合的直线明显比迭代100次的拟合直线效果更好,更加贴近原始未加噪的直线

    2.1.2 正规方程法

        用梯度下降法求解线性回归问题是用到了损失函数对参数的偏导数,因为这里仅有两个参数,所以我们也可以通过让导数为0直接解得最优参数:

    其中,为向量的平均值。

    通过求解可以得出,和用梯度下降法迭代10000次后的参数结果一致。可以看出正规方程法解决不需要选择学习率等超参数,但实际上正规方程的局限性很大,只适用于较为简单的模型。当输入的特征数很多,样本数很多时会非常难以计算每个参数对应的方程,甚至不存在解。所以当模型的参数量很大是一般都会使用梯度下降法或其他迭代最优化方法进行参数的最优化。

    图5 不同方法对原始数据进行回归分析

  • 相关阅读:
    Django实现组合搜索
    KindEditor编辑器
    Python 使用Pillow模块生成验证码
    jenkins插件之如何优雅的生成版本号
    maven配置文件详解
    Django文件上传三种方式以及简单预览功能
    jsPlumb 学习笔记
    通用的业务编码规则设计实现[转:http://www.cnblogs.com/xqin/p/3708367.html]
    图解SQL的各种连接join[转]
    Redis配制说明
  • 原文地址:https://www.cnblogs.com/virter/p/9546148.html
Copyright © 2011-2022 走看看