机器学习(一)—— 线性回归

机器学习(一)—— 线性回归

目录

0. 回归Regression)的由来

1. 回归关系

2. 线性回归的整体思路

1)根据数据提出假设模型

2)求解参数

      1)梯度下降法

      2)正规方程求解参数

3)梯度下降法与正规方程比较

3. 回归的一般方法

4. 实例分析

5. 线性回归的特点及其优缺点

6. 代码实现(Java)

(本文是基于吴恩达老师的机器学习课程整理的)

0. 回归Regression)的由来

*********************************“回归”一词的来源************************************

  今天所知道的回归是由达尔文Charles Darwin)的表兄弟Francis Galton发明的。Galton于1877年完成了第一次回归预测,目的是根据上一代豌豆种子(双亲)的尺寸来预测下一代豌豆种子(孩子)的尺寸。Galton在大量对象上应用了回归分析,甚至包括人的身高。他注意到,如果双亲的高度比平均高度高,他们的子女也倾向于比平均高度高,但尚不及双亲。孩子的高度向着平均高度回退(回归)Galton在多项研究上都注意到这个现象,所以尽管这个英文单词跟数值预测没有任何关系,但这种研究方法仍被称为回归。

******************************************************************************************

  Regression有“衰退,退步”的意思,Galton在研究父母身高和子女身高时发现,即使父母的身高相对于人群平均身高来说很高,子女的身高比平均值高,但是却比父母低,即有种向平均值(正常身高)靠近(“衰退”)的倾向。

  具体地Galton和他的学生Pearson在研究父母身高(单位:英寸)与其子女身高的遗传问题时,观察了1078对夫妇,以每对夫妇的平均身高作为x,而取他们的一个成年儿子的身高作为y,将结果在平面直角坐标系上绘成散点图,发现趋势近乎一条直线,计算出的回归直线方程为y=33.73+0.516x。这种趋势及回归方程总的表明父母平均身高x每增加一个单位,其成年儿子的身高y也平均增加0.516个单位。这个结果表明,虽然高个子父辈确有生高个子儿子的趋势,但父辈身高增加一个单位,儿子的身高仅增加半个单位左右。反之,矮个子父辈确有生矮个子儿子的趋势,但父辈身高减少一个单位,儿子身高仅减少半个单位左右。即子代的平均高度向中心回归了

 1.回归关系

 

  在客观世界中普遍存在着变量之间的关系,变量之间的关系一般来说可以分为两种:

  ①确定性的:变量之间的关系可以用函数关系来表达;

  ②非确定性的:即统计关系或相关关系。如,人的身高与体重的关系,一般来说人高一些,体重也要重一些,但是也存在同样高度的人,体重有高有低,即没有明确的函数关系。现代统计学中关于统计关系已形成两个重要的分支,它们叫相关分析和回归分析。

  回归分析就是研究统计关系的一种数学工具,能帮助我们从一个变量(预测变量或回归变量,可以理解为自变量)取得的值去估计另一个变量(响应变量,可以理解为因变量)所取的值。且自变量与因变量均为连续变量。当自变量只有一个变量时,我们称该回归为一元回归,当自变量有多个变量时,称为多元回归。若使用线性函数刻画自变量和因变量之间的相关关系,则称为线性回归,否则称为非线性回归。所以模型,称为一元线性回归模型(或简单线性回归模型),模型,称为多元线性回归模型,其中,参数θ0称为回归常数,θ1, θ2, … ,θk称为回归系数。注意,其中线性是用来表明模型的参数θ0, θ1, θ2, …, θk线性的,而非y是关于x的线性函数。许多模型中y与x以非线性形式相关,但只要方程关于θ是线性的(也就是说不管x是几次方,只要所有参数θ均为一次方)就仍然可以将其当做线性回归方程处理,因为当回归变量为非线性时,可以通过变量替换将它转化为线性的。

  需要注意的是:回归模型并非意味着变量间存在因果关系。即使两个或更多变量间可能存在牢固的实证关系,也不能认为这就证明了回归变量与响应变量间存在因果联系。确立因果关系,要求回归变量与响应变量必须存在一种基础性的、与样本数据无关的关系,比如理论分析中所暗含的关系。回归分析有助于因果关系的确认,但不能成为判断因果关系是否存在的唯一基础。

  一定要记住,回归分析只是众多用于解决问题的数据分析方法的一种,也就是说,回归方程本身可能并非研究的主要目的,就整个数据处理过程而言,洞察力与理解力通常更为重要。

 2. 线性回归的整体思路

1)根据数据提出假设模型

  上面已经知道,回归的目的是通过几个已知数据来预测另一个数值型数据的目标值。下面通过例子阐述线性回归的思想及过程。

  假设我们有如下1所示的训练集,其中自变量x为房子的面积(单位feet2),因变量为房子的卖价(单位$1000),共有M个样本。

  表 1  训练集样本(M个样本)

size in feet2 (x)

price($) in 1000`s (y)

2104

460

1416

232

1534

315

852

178

  通过观察,我们发现,随着x增大,相应的y也增大,所以我们设想x和y应该满足线性关系,即假设模型可以描述x和y之间的线性关系,其中θ0,θ1为模型的参数。接下来只需要求解出参数θ0,θ1,就可以为新样本x`预测相应的房价hθ(x`),即y`。

2)求解参数

  使用回归分析的一个重要目标是估计模型中的未知参数,这一过程也称为模型拟合数据。

  1)梯度下降法

求解参数的原则

  模型有了,就差参数了,那该如何求解呢?我们先看看求解参数θ0,θ1,的原则是什么。因为模型描述的是x和y之间的关系,即越能准确的刻画x与y的关系,那么模型越好,那怎么来判断是否准确呢?若对于每一个x,模型预测出的hθ(x)=y,那么无疑该模型非常好,因为它能准确的反应我们训练集中所有样本的情况,若是对于未知的x,也能准确的预测出相应的y,那么该模型堪称完美。可惜这种情况是不存在的,因为在我们收集数据时,会由于各种各样的原因,造成数据误差(如测量误差)或者包含噪声等后果,所以模型达不到hθ(x)=y这种理想情况,通常hθ(x)-y≠0,我们当然希望这个差值越小越好,那就要调整hθ(x),所以就需要调整θ0,θ1,到这就明白了,调整参数θ0,θ1目的(原则)是使模型预测值更接近真实y,即使差值

 

代价函数(cost function)

  接下来我们需要衡量模型预测值与真实值之间的差异,通过直接求差值hθ(x)-y来计算一个样本的差是可以的,但是要衡量整个训练集的差异就会存在正负相抵消的问题,那么用绝对值呢?绝对值没有正负抵消问题,但是在后面的计算中求导是分段函数,相对比较麻烦,所以也不用。考虑差值的次方,因为奇数次方都会存在正负抵消问题,所以来看偶数次方,偶数次方没有之前的那些问题,但是考虑到计算的简便性,我们用平方来计算二者之间的差异,也称该函数为平方损失函数。同时,平方损失函数还有个好处是可以惩罚那些差值较大的项,比如(10-5)2=25(10-8)2=425:4相较于5:2更能突出差异大的点。

  接下来,我们用平方损失函数对每一个样本计算差异(损失),再求和取平均作为整体训练集对参数θ0,θ1的损失J(θ0, θ1),公式为:,其中公式中的1/2是为了后续求导计算中约掉指数上的2,x(i),y(i)表示第i个样本。我们称J(θ0, θ1)为代价函数(cost function),其反映了训练集所有样本在参数θ0,θ1下的平均损失。因为我们需要模型能较为准确的表示变量之间的关系,也即模型预测值与真实值之间的差异要尽可能的小,所以我们需要J(θ0, θ1)尽可能的小,也就是说,现在将从假设模型中直接求参数θ0,θ1转化为在代价函数J(θ0, θ1)中求解参数θ0,θ1,使代价函数J(θ0, θ1)最小。

  

代价函数J(θ0, θ1)和模型hθ(x)之间的关系

   首先模型hθ(x)是给定参数θ下,关于x的函数,而J(θ0, θ1)是关于θ0,θ1的函数。给定参数θ0,θ1,可以计算出一个J(θ0, θ1)。为了方便表示和理解,我们假设参数θ0=0,即模型是过原点的直线,设样本点为(1, 1), (2, 2), (3, 3),接下来,我们取不同的θ1来计算J(θ1)。

  如下图1所示,黑色线表示θ1=1,三个样本点刚好全都落在该直线上,其代价函数值为0,所以J(θ1)过点(1, 0),蓝色直线斜率为0.5,其代价函数值为0.58,所以J(θ1)过点(0.5, 0.58),同样绿色直线斜率为2,其代价值为7/3,所以J(θ1)过点(2, 7/3),得到的代价函数如图2所示。若不设θ0=0,则J(θ0, θ1)的等高线如图3所示。

 

1 不同参数下的模型

 

 

2 代价函数J(θ1)

 

3 J(θ0, θ1)的等高线,横轴为θ1纵轴为θ0

利用代价函数求解参数

  我们的目的是求得参数θ0,θ1,使代价函数J(θ0, θ1)值最小。即,因为线性回归的代价函数J(θ)总是凹面,即凸函数,最小化J(θ)属于凸优化,我们用最经典的梯度下降算法。

梯度下降法的思路

  • 给参数θ0,θ1初始值,常设为(0, 0)
  • 调整θ0,θ1使J(θ0, θ1)减小
  • 直到代价函数J(θ0, θ1)减小到最小值

  为什么要设置初始值为0呢?因为后续都会调整参数来求代价函数的最小值,而且先前我们也不知道要具体设置为多少,所以遵循简单原则,设置为0。接下来调整参数,如下:

  重复以下步骤直到收敛{

  

  }

  α为下降步长,也叫学习率(learning rate),它决定了在梯度下降迭代的过程中,每一步沿梯度负方向前进的长度。偏导数项是用来保证以直线方向下降(最快下降方向)。

  我们来看看α产生的影响,同样的,设θ0=0,在之前图2中会产生以下收敛方式,因为J(θ)图形变化比较缓慢,所以会随着导数项减小而减小,如图4所示,经多次减小后,越到最小值附近,J(θ)变化越缓慢。但是对于图5来说,J(θ)比较陡峭,变化较快,在接近最低点的时候导数值依然很大。即α过大,可能会引起振荡,找不到极值点,α过小,会导致收敛时间太长。那么要怎么选取合适的α呢?吴恩达老师给的建议是从[0.001, 0.003, 0.01, 0.03, 0.1, 0.3…]中选择。在实验过程中可以通过判断第i次更新后的代价值是否小于第i-1次,若小于,可以稍微增大一点α,以更快的收敛;若大于,则需要减小α,防止发生振荡。

4 变换缓慢的J(θ)上的收敛过程

 

5 比较陡峭的J(θ)上的收敛过程

  接下来,我们用一个例子说明梯度下降方法。y=(x-1)2的最小值点,选步长为0.5:

  ① 设初始值x0=0,y=1,在x=0处梯度值-2,

  ② 更新x1=0-0.5*(-2)=1,则y=0,此处梯度值为0,找到最小值点(1,0)

  接下来我们如何判断收敛呢?对于一般的数学函数来说,只要导数值为0即可,但是对于1/x这类函数来说,有两种方式来判断其是否收敛,一种是看J(θ)的函数图形,如果基本没有变化,则可认为是收敛;另一种为设置变化阈值ε,如ε<0.001,若两次相邻的J(θ)变化小于ε,则可认为是收敛了,但是如何确定ε的大小则比较困难。

多元线性回归

  之前描述的是一元线性回归,那么如何对多元变量进行线性回归呢?如下2的训练数据:

2 多维特征数据

size (feet2)  x1

number of bedrooms  x2

number of floors  x3

age of home  

x4

price($1000)

y

2104

5

1

45

460

1416

3

2

40

232

1534

3

2

30

315

852

2

1

36

178

  此时假设模型函数为,代价函数:其中θ为5维向量,优化与求解与之前一样。

  需要注意的是,因为特征中x1, x2之间的取值范围差异太大,得到的J(θ)性状窄长(因为取值范围一大一小),会导致收敛产生振荡,如下图6所示(手画,比较丑)。

 

6 特征取值范围较大时会出现振荡

  产生振荡会使收敛不到最小点处,因此为了避免这种情况,我们需要对特征进行缩放,也相当于归一化处理,使他们的取值范围都在一个区间,通常我们将特征值除以该特征的最大值与最小值的差。比如若x1取值范围为650--3000,缩放为:x1/(3000-650)。缩放后代价函数变得相对圆些,如图7 所示,其收敛过程就相对平滑,也能较快收敛到最小值点。

7 特征缩放后的收敛相对平缓

  2)正规方程求解参数

  对于表2中的数据,我们添一列x0,使其全为1,模型写为:hθ(x) = θ0x01x12x23x34x4。我们记矩阵

 

  其中,每一行为一个样本的所有特征,X称为设计矩阵(design matrix),为m*(n+1)型矩阵,其中m是训练集样本数,n为样本的特征数(不包括x0)。记向量y=(460, 232, 315, 178, …)T,即y为m*1型,同样θ=(θ0, θ1,θ2, θ3, θ4)为(n+1)*1型,类似于梯度下降的优化目标,有,令Eθ=(y-Xθ)T(y-Xθ),对θ求导得到,令其为0,可得到θ的最优解,θ=(XTX)-1XTy,但是XTX的逆是否一直存在呢?其实不是的,当矩阵X中存在冗余的特征,那么就不可逆,还有,当m≤n,即特征数太多,对于这两种情况,都可以通过删除特征解决,对于冗余特征来说,我们删除掉冗余的特征,第二种情况除过删除特征外,还可以使用正则化的方式解决 θ=(XTX+λB)-1XTy,其中B为(n+1)*(n+1)型矩阵,其对角线上除B11外均为1,其余为0,则括号内的矩阵绝对可逆

4)梯度下降法与正规方程比较

梯度下降法

正规方程

需要选择学习率(下降步长)α

不需要选择α

需要多次迭代

不需要迭代,一次运算得出

当特征数量N很大时,依然能很好的运用

需要计算(XTX)的逆,若特征数量N很大时,计算代价太大,求矩阵逆复杂度为O(n3)

适用于各种类型的模型

只适用于线性模型,不适合逻辑回归模型等其他模型

 3. 回归的一般方法

(1) 收集数据:采用任意方法收集数据;

(2) 准备数据:回归需要数值型数据,标称型数据将被转成二值型数据;

(3) 分析数据:绘出数据的可视化二维图将有助于对数据做出理解和分析,在采用缩减法求得新回归系数之后,可以将新拟合线绘在图上作为对比;

(4) 训练算法:找到回归系数;

(5) 测试算法:使用R2或者预测值和数据的拟合度,来分析模型的效果;

(6) 使用算法:使用回归,可以在给定输入的时候预测出一个数值,这是对分类方法的提升,因为这样可以预测连续型数据而不仅仅是离散的类别标签。

 

 4. 实例分析

  为了可视化效果,我们只使用一个特征(size of feet2)来说明线性回归的实例应用。

(1) 收集数据:我们根据现实生活的情况,设定了20个样本,如下3所示:

3 训练样本集

Size of feet2

Price ($1000)

2104

460

1416

232

265

32

568

98

1564

250

100

23

3645

564

879

125

356

86

873

105

1356

254

458

36

1587

298

2458

521

2478

512

3578

652

458

87

965

154

546

65

1548

246

(2) 准备数据:数据已是数值型数据;

(3) 分析数据:将其可视化如下图8.

 

8 训练集数据的可视化

(4) 训练算法:

  我们的假设为hθ(x)=θ01*x,优化的目标函数为 ,根据梯度下降法,通过判断参数更新前后的代价函数差值来看是否α取得过大,即差值小于零,表示更新完参数后,代价值增加,说明有振荡产生,因此再减小α。经过试验,取学习率(下降步长)10^-6,当连续两次代价函数差小于10^-6作为收敛条件,求得θ0=-10.13,θ1=0.18,此时的代价J(θ)=890.81

(5) 测试算法:

  我们将得到的hθ(x)与样本点画出来,如下图9.可以看出效果不错,毕竟事实就是房子面积越大,卖价越高,当然还有地段等因素影响,所以并不是完全都在直线上。

 

9 样本点与回归线

(6) 使用算法:我们用得到的线性模型对新样本x=2000,来预测该面积的房子卖价y=hθ(x)=-10.13+0.18*2000=349.87,注意单位是千$。

5.线性回归的特点及其优缺点

 

使用数据类型:数值型和标称型数据

优点:

结果易于理解,计算上不复杂;

可以根据系数理解每个变量;

缺点:

对非线性的数据拟合不好;

对异常值非常敏感;

受噪声影响大;

只能表示线性关系;

 6. 代码实现(Java

 https://www.cnblogs.com/datamining-bio/articles/9240378.html

猜你喜欢

转载自www.cnblogs.com/datamining-bio/p/9256302.html