zoukankan      html  css  js  c++  java
  • 02-04 线性回归


    更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:https://www.cnblogs.com/nickchen121/p/11686958.html

    线性回归

    线性回归是比较经典的线性模型,属于监督学习中预测值为连续值的回归问题。

    线性回归针对的是一个或多个特征与连续目标变量之间的关系建模,即线性回归分析的主要目标是在连续尺度上预测输出,而非分类标签,即预测值为连续值。

    一、线性回归学习目标

    1. 线性模型
    2. 一元线性回归和多元线性回归
    3. 多项式回归和对数线性回归
    4. 线性回归的L1正则化和L2正则化
    5. 线性回归流程
    6. 线性回归优缺点

    二、线性回归引入

    相信我们很多人可能都有去售楼处买房而无奈回家的行为,就算你没去过售楼处,相信你也应该听说过那令人叹而惊止的房价吧?对于高房价你没有想过这房价是怎么算出来的呢?难道就是房地产商拍拍脑门,北京的一概1000万,上海的一概800万,杭州的一概600万吗?看到这相信你应该有动力想要学好机器学习走向人生巅峰了。

    其实仔细想想这房价大有来头,首先房价不可能只和地区有关,北京有1000万的房子,又会有800万、600万的房子,那这些房价不和地区有关还和什么有关呢?如果你真的买过房就知道,房子的价格首先和地区是有着比较大的联系的,北京五环外的房子可能都高于杭州任何地区的房子,在同一个地区内,房子的价格大多和房子的占地面积、户型、采光度等等因素有关系。

    这个时候就有某位聪明的投机者想到了,我是不是可以找到一个方法来预测房价呢?如果这个房子的房价明显小于这所房子该有的房价(注:房价可能在某段时间由于某种不为人知的因素有小幅波动),就把那所买过来了,等房价涨回去了再卖出去,这样看起来也是生财之道。(注:纯属虚构)

    可是如果去预测房价呢?上面讲到了房价和房子所在地区x1、占地面积x2、户型x3和采光度x4有关,那么我是不是可以把这些因素假想成房子的特征,然后给这些每个特征都加上一个相应的权重ω,既可以得到如下的决策函数

    y^=ω1x1+ω2x2+ω3x3+ω4x4+b

    其中b可以理解为偏差,你也可以想成房子的这些特征再差也可能会有一个底价。

    基于上述给出房价的决策函数,我们就可以对一个某个不知名的房子输入它的这些特征,然后就可以得到这所房子的预测价格了。

    理想总是美好的,即一条生财之道就在眼前,但是我们如何去得到这个决策函数呢?我们可以得到这个特征值,但是这个ω怎么得到呢?这就是我们的线性回归需要解决的问题,下面让我们一起走向这条生财之道吧!

    三、线性回归详解

    3.1 线性模型

    给定有n属性的样本x=(x1,x2,,xn),其中xix在第i个属性上的取值,线性模型(linear model)则是试图学得一个通过线性组合预测的函数。该线性组合可以表示为

    y^=f(x)=ω1x1+ω2x2++ωnxn+b

    线性组合用向量可以表示为

    y^=f(x)=ωTx+bω={ω1,ω2,,ωn},x={x1,x2,,xn}

    如果ωb被确定之后,模型就可以确定。

    3.2 一元线性回归

    3.2.1 一元线性回归的目标函数

    给定有m个样本的数据集D={(x1,y1),(x2,y2),,(xm,ym)},假设每个样本只有1个特征为xi

    由于线性回归属于线性模型的一种,则线性回归也可以通过线性组合的方式学得关于预测值的公式

    yi^=f(xi)=ωxi+b

    现在的问题时如何学得并确定ωb。显然,关键在于衡量真实值yi和预测值yi^之间的差别。通常在回归任务中使用均方误差作为回归模型的性能度量,既可以得到线性回归的损失函数

    L(ω,b)=(yiyi^)2

    通过损失函数则可以得到线性回归的目标函数

    (1)J(ω,b)=i=1m(yiyi^)2(2)=i=1m(yiwTxib)

    3.2.2 均方误差最小化——最小二乘法

    均方误差的几何意义对应了欧氏距离(Euclidean distance),基于均方误差最小化进行模型求解的方法称为最小二乘法(least square method)。在线性回归中,最小二乘法试图找到一条直线,使所有样本的欧式距离之和最小,即试图让均方误差最小化。

    在回归问题中对均方误差最小化的过程称为线性回归的最小二乘参数估计(parameter estimation),可以对均方误差分别对ωb求导得

    (3)L(ω,b)ω=2(ωi=1mxi2i=1m(yib)xi)(4)L(ω,b)b=2(mbi=1m(yiωxi)

    利用数学中求极值的思想即可求得ωb的最优解

    ω=i=1myi(xix¯)i=1mxi21m(i=1mxi)2

    b=1mi=1m(yiωxi)

    其中x¯=1mi=1mxi,即x的均值

    3.3 多元线性回归

    一元线性回归更多的是为了入门,通常情况下碰到的问题都是用多元线性回归(multivariate linear regression)解决的,即样本通常都有n,n>1个特征。

    给定数据集D={(x1,y1),(x2,y2),,(xm,ym)},假设每个样本有n个特征则xi=xi1,xi2,,xin。由此可以得到n个特征样本的预测值和目标函数

    yi^=f(xi)=ω0xi0+ω1xi1+ω2xi2++ωnxin+b=ωTxiw0=b,xi0=1

    (5)J(ω)=i=1n(yiyi^)2(6)=i=1n(yiwTxi)

    3.3.1 均方误差最小化——最小二乘法

    如果对该目标函数直接使用最小二乘法进行估计,计算会很麻烦,因此把特征和标记都写成向量的形式并命名为XY

    X=(x11x12x1n1x21x22x2n1xm1xm2xmn1)

    Y=(y1y2ym)

    通过上述向量的转换可以把目标函数转换成

    J(ω)=12(XωY)T(XωY)

    其中12是为了方便计算。

    同一元线性回归,对ω求导找到最优的ω,对ω求导得

    L(ω)ω=2XT(XωY)

    得到目标函数对ω求导公式之后,理应求2XT(XωY)=0ω的值,但是需要考虑XTX是否为满秩矩阵。

    XTX为满秩矩阵(full-rank matrix)或正定矩阵(positive definite matrix)时,2XT(XωY)=0可得ω

    ω=(XTX)1XTY

    然而现实生活中XTX往往不为满秩矩阵,例如生物信息学的基因芯片数据中常有成千万个属性,但往往只有几百个样例。因此会有多个ω都能使得2XT(XωY)=0,即这些ω都能使得均方误差最小化,通常情况下会引入正则化(regularization)项解决该问题。
    ω加入正则化项则变成

    ω=(XTX+λI)1XTY

    由于加上正则化项λI后,对任意的实数λXTX+λI一定为满秩矩阵。

    3.3.2 均方误差最小化——牛顿法(TODO)

    使用二阶的海森矩阵的逆矩阵或伪逆矩阵求解,相比比梯度下降法收敛更快,但是当特征参数大时,计算量庞大,时间慢。

    3.3.3 均方误差最小化——拟牛顿法(TODO)

    牛顿法得到的f(x)是一个半正定矩阵,拟牛顿法则利用一个正定矩阵代替这个半正定矩阵。

    3.4 多项式回归

    前面说到线性模型为

    y^=f(x)=ω1x1+ω2x2++ωnxn+b

    但是如果在这个关系式中不仅用到特征xi的一次方,而是增加一个关于xin,n2次方,那么模型就变成了多项式回归(polynomial regression)。

    假设一个正方体的房子的价格与房子的边长、房子的占地面积和房子的体积有关系,然而现在只有房子的边长x1一个特征,如果只拿特征去预测房子的价格,则有很大可能会欠拟合,因此需要增加房子的占地面积和体积这两个特征,即

    y^=ω1x1+ω2x12+ω3x13+b

    x1=x1,x2=x12,x3=x13,则多项式的线性模型变成

    y^=ω1x1+ω2x2+ω3x3+b

    通过上述转换多项式的线性模型变成了一个多(三)元线性回归的问题,可以使用线性回归的方法来完成算法。并且对于每个边长这个特征(x1)得到一个三元样本特征(x1,x12,x13)。需要注意的是对于多维度特征时,使用多项式回归会使得特征之间的关联度增加,例如这三个特征(x1,x12,x13)是有很高的相关性的。

    拿上一个例子假设,如果房子的边长为10,则房子的占地面积为100,房子的体积为1000,这三个特征有了数量级的差距,所以在使用多项式回归的时候需要注意对特征进行特征统一尺度处理。

    工业上可能并不像房子的面积、房子的体积一样有明确的目标加上2或者3,而可能是加上2或者5模型就能变得更好,但是并不知道25表示什么意思,进而会导致模型的解释能力变差。

    3.5 对数线性回归

    假设现在得到了一个线性回归模型y^=ωTx+b,但是该线性模型无法满足输出y^与输入x的线性关系,但是lny^x满足线性关系,则可以将输出标记的对数作为线性模型逼近的目标,即模型函数如下

    lny^=ωTx+b

    这就是对数线性回归(log-linear regression),它实际上是在视图让eωT+b逼近y^,但是仍然可以使用线性回归的算法去处理该问题。

    假设函数g(·)是单调可微的函数,则一般化的广义线性模型(generalized linear model)可以表示为

    y^=g1(ωTx+b)或者g(y^)=ωTx+b

    其中g(·)称为联系函数(link function),并且对数线性回归是广义线性模型在g(·)=ln(·)时的特例。

    3.6 局部加权线性回归

    线性回归的一个大问题就是容易欠拟合,上次讲到的多项式回归属于解决欠拟合的方法之一,但是它也增加了数据的维度,如果数据本身有很多维度,则不适合使用多项式回归。

    局部加权线性回归(locally weighted linear regression)也可以解决数据欠拟合的问题,它主要是在估计中引入一些偏差,从而降低预测的均方误差,它的目标函数为

    (7)J(ω)=i=1mwi(yiyi^)2(8)=(XωY)TW(XωY)

    其中wiW都是对角矩阵,用来给每个数据点赋予权重。

    目标函数对ω求导得

    J(ω)ω=XTWXωXTWY

    局部加权线性回归给预测点附近的每个点赋予一定的权重,然后与线性回归类似,在这个被赋予权重的样本的子集上基于最小均方误差来进行普通的回归,即XTWXωXTWY=0时可以得到最优的ω

    ω=(XTWX)1XTWY

    其中局部加权线性回归与支持向量机类似,使用核函数给离预测点越近的点赋予更高的权重;离预测点越远的点赋予更低的权重。核的类型一般可以自由选择,一般情况下使用高斯核,高斯核对应的权重如下

    W(i,i)=exp(|x(i)x|2k2)

    其中k相当于学习率,它决定了对附近的点赋予多大的权重。

    通过高斯核即可构造一个只含对角元素的矩阵W,并且点xxi越近,则|x(i)x|越接近1,W(i,i)将会越趋近于1;如果点xxi越远,则|x(i)x|越接近0,W(i,i)将会越趋近于0,即离预测点越接近的点权重越高,离预测点越远的点权重越低,这也是局部加权线性回归只关注附近点的原因。

    局部加权线性回归虽然解决了欠拟合的问题,但是由于每个预测点都要进行一次线性回归的运算,因此样本数越多则该方法的计算量将越大。相比较普通的线性回归,普通的线性回归属于参数模型,而局部加权线性回归属于非参数模型,每次增加新数据的时候都需要基于样本重新计算ω

    3.7 正则化

    在过拟合问题的时候说到过,为了解决过拟合问题时,可以在建立模型的时候加上正则化项。对于线性模型,一般有L1正则化、L2正则化和弹性网络等。

    3.7.1 L1正则化

    线性回归的L1正则化通常称为Lasso回归,它和普通的线性回归的区别是它在目标函数上增加了一个L1正则化项,L1正则化项有一个正则化参数λ调节目标函数的均方误差项和正则化项的权重,Lasso回归的目标函数表达式为

    J(ω)=12(XωY)T(XωY)+λi=1m||ω||1

    其中12只是为了方便计算,m是样本数量,||ω||1为L1范数。

    由于目标函数中的L1范数用的是绝对值之和,导致目标函数中有不可导的点,即无法使用最小二乘法、梯度下降法、牛顿法求解使得均方误差最小化的ω,因此可以使用全新的方法求解最优ω,即坐标轴下降法(coordinate descent)和最小角回归法(least angle regression)

    如果你对Lasso回归的求解过程熟悉了,会发现Lasso回归可以使得一些特征的ω变小,甚至还能使得一些绝对值较小的ω直接变成0,进而使得数据的特征变得稀疏,增强模型的泛化能力。

    3.7.2 L2正则化

    线性回归的L2正则化通常称为Ridge回归,也称为岭回归。它和普通的线性回归的区别是它在目标函数上增加了一个L2正则化项,而Ridge回归与Lasso回归的区别在于Lasso回归的正则化项是L1范数,而Ridge回归的正则化项是L2范数,Ridge回归的目标函数表达式为

    J(ω)=12(XωY)T(XωY)+12λi=1m||ω||2

    其中12只是为了方便计算,m是样本数量,||ω||2为L2范数。

    Ridge回归一般使用最小二乘法的矩阵推导形式,和普通的线性回归类似,首先对ω求导得

    J(ω)ω=XT(XωY)+λω

    XT(XωY)+λω=0即可得到ω

    ω=(XTX+λE)1XTY

    其中E为单位矩阵。

    3.7.3 弹性网络

    弹性网络(elastic net)是对Ridge回归和Lasso回归的折中处理,通过混合比γ进行控制,即它的目标函数为

    J(ω)=12(XωY)T(XωY)+γλi=1m||ω||1+1γ2λi=1m||ω||2

    其中γλ都是超参数,当γ=1的时候弹性网络为Ridge回归;当γ=0的时候弹性网络为Lasso回归,至于混合比γ值具体情况具体分析。

    四、线性回归流程

    4.1 输入

    m个实例n维特征的数据集

    T={(x1,y1),(x2,y2),,(xm,ym)}

    其中xi是实例的特征向量即(xi(1),xi(2),,xi(n))

    4.2 输出

    ω和线性回归模型f(x)=ωTx

    4.3 流程

    1. 选取初值ω=0
    2. 训练集中选取数据(xi,yi),对ω使用梯度下降更新

    ω=ωα(yih(ωTx))xi(j)

    1. 重复步骤2,直至ω收敛停止更新
    2. 得到最小化的目标函数J(ω),同时可以得到最优的ω,线性回归模型为f(x)=wTx

    五、线性回归优缺点

    5.1 优点

    1. 建立了多特征与标记间的线性因果关系便于分析
    2. 可以得到每个特征值的权重,有很好的解释型

    5.2 缺点

    1. 普通的线性回归无法处理敏感值问题
    2. 无法处理分类问题

    六、小结

    线性回归可以说是我们学的第一个工业上还在使用的算法,对于连续值的测量线性回归的表现还是挺不错的。但通常情况下还是需要多多尝试线性回归的变种,即对数线性回归、正则化线性回归,使用它们能够更精准的预测数据,解决过拟合问题,也可以一定的程度让线性回归拟合非线性数据。

    下一篇将会给大家介绍另外一种分类方法,该方法在某些方面继承了线性回归的思想,但是实质上两者完全不可相提并论,因为线性回归属于监督学习的回归问题,而下一篇所要介绍的是分类问题,即Logistic(逻辑)回归。

  • 相关阅读:
    Python之模块
    Python之request模块-基础用法
    Linux小知识点
    python之pip安装软件包常用命令
    windows设置多个JDK环境
    window配合虚拟机VMware搭建虚拟ubuntu服务器入坑集锦
    Linux服务器相关信息查询
    达梦数据库
    创业公司如何快速构建高效的监控系统?
    干货分享:智慧工厂时代下大数据 + 智能的深度实践
  • 原文地址:https://www.cnblogs.com/abdm-989/p/14111322.html
Copyright © 2011-2022 走看看