(本文是基于吴恩达老师的机器学习课程整理的)
今天所知道的回归是由达尔文(CharlesDarwin)的表兄弟FrancisGalton发明的。Galton于1877年完成了第一次回归预测,目的是根据上一代豌豆种子(双亲)的尺寸来预测下一代豌豆种子(孩子)的尺寸。Galton在大量对象上应用了回归分析,甚至包括人的身高。他注意到,如果双亲的高度比平均高度高,他们的子女也倾向于比平均高度高,但尚不及双亲。孩子的高度向着平均高度回退(回归)。Galton在多项研究上都注意到这个现象,所以尽管这个英文单词跟数值预测没有任何关系,但这种研究方法仍被称为回归。
******************************************************************************************
Regression有“衰退,退步”的意思,Galton在研究父母身高和子女身高时发现,即使父母的身高相对于人群平均身高来说很高,子女的身高比平均值高,但是却比父母低,即有种向平均值(正常身高)靠近(“衰退”)的倾向。
具体地,Galton和他的学生Pearson在研究父母身高(单位:英寸)与其子女身高的遗传问题时,观察了1078对夫妇,以每对夫妇的平均身高作为x,而取他们的一个成年儿子的身高作为y,将结果在平面直角坐标系上绘成散点图,发现趋势近乎一条直线,计算出的回归直线方程为y=33.73+0.516x。这种趋势及回归方程总的表明父母平均身高x每增加一个单位,其成年儿子的身高y也平均增加0.516个单位。这个结果表明,虽然高个子父辈确有生高个子儿子的趋势,但父辈身高增加一个单位,儿子的身高仅增加半个单位左右。反之,矮个子父辈确有生矮个子儿子的趋势,但父辈身高减少一个单位,儿子身高仅减少半个单位左右。即子代的平均高度向中心回归了。
在客观世界中普遍存在着变量之间的关系,变量之间的关系一般来说可以分为两种:
①确定性的:变量之间的关系可以用函数关系来表达;
需要注意的是:回归模型并非意味着变量间存在因果关系。即使两个或更多变量间可能存在牢固的实证关系,也不能认为这就证明了回归变量与响应变量间存在因果联系。确立因果关系,要求回归变量与响应变量必须存在一种基础性的、与样本数据无关的关系,比如理论分析中所暗含的关系。回归分析有助于因果关系的确认,但不能成为判断因果关系是否存在的唯一基础。
一定要记住,回归分析只是众多用于解决问题的数据分析方法的一种,也就是说,回归方程本身可能并非研究的主要目的,就整个数据处理过程而言,洞察力与理解力通常更为重要。
上面已经知道,回归的目的是通过几个已知数据来预测另一个数值型数据的目标值。下面通过例子阐述线性回归的思想及过程。
假设我们有如下表1所示的训练集,其中自变量x为房子的面积(单位feet2),因变量为房子的卖价(单位$1000),共有M个样本。
表1训练集样本(M个样本)
sizeinfeet2(x)
price($)in1000`s(y)
2104
460
1416
232
1534
315
852
178
…
使用回归分析的一个重要目标是估计模型中的未知参数,这一过程也称为模型拟合数据。
求解参数的原则
代价函数(costfunction)
代价函数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)
图3J(θ0,θ1)的等高线,横轴为θ1,纵轴为θ0
利用代价函数求解参数
梯度下降法的思路:
为什么要设置初始值为0呢?因为后续都会调整参数来求代价函数的最小值,而且先前我们也不知道要具体设置为多少,所以遵循简单原则,设置为0。接下来调整参数,如下:
重复以下步骤直到收敛{
}
α为下降步长,也叫学习率(learningrate),它决定了在梯度下降迭代的过程中,每一步沿梯度负方向前进的长度。偏导数项是用来保证以直线方向下降(最快下降方向)。
图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
numberofbedroomsx2
numberoffloorsx3
ageofhome
x4
price($1000)
y
5
1
45
3
2
40
30
36
需要注意的是,因为特征中x1,x2之间的取值范围差异太大,得到的J(θ)性状窄长(因为取值范围一大一小),会导致收敛产生振荡,如下图6所示(手画,比较丑)。
图6特征取值范围较大时会出现振荡
产生振荡会使收敛不到最小点处,因此为了避免这种情况,我们需要对特征进行缩放,也相当于归一化处理,使他们的取值范围都在一个区间,通常我们将特征值除以该特征的最大值与最小值的差。比如若x1取值范围为650--3000,缩放为:x1/(3000-650)。缩放后代价函数变得相对圆些,如图7所示,其收敛过程就相对平滑,也能较快收敛到最小值点。
图7特征缩放后的收敛相对平缓
对于表2中的数据,我们添一列x0,使其全为1,模型写为:hθ(x)=θ0x0+θ1x1+θ2x2+θ3x3+θ4x4。我们记矩阵
(4)梯度下降法与正规方程比较
梯度下降法
正规方程
需要选择学习率(下降步长)α
不需要选择α
需要多次迭代
不需要迭代,一次运算得出
当特征数量N很大时,依然能很好的运用
需要计算(XTX)的逆,若特征数量N很大时,计算代价太大,求矩阵逆复杂度为O(n3)
适用于各种类型的模型
只适用于线性模型,不适合逻辑回归模型等其他模型
(1)收集数据:采用任意方法收集数据;
(2)准备数据:回归需要数值型数据,标称型数据将被转成二值型数据;
(3)分析数据:绘出数据的可视化二维图将有助于对数据做出理解和分析,在采用缩减法求得新回归系数之后,可以将新拟合线绘在图上作为对比;
(4)训练算法:找到回归系数;
(5)测试算法:使用R2或者预测值和数据的拟合度,来分析模型的效果;
(6)使用算法:使用回归,可以在给定输入的时候预测出一个数值,这是对分类方法的提升,因为这样可以预测连续型数据而不仅仅是离散的类别标签。
为了可视化效果,我们只使用一个特征(sizeoffeet2)来说明线性回归的实例应用。
(1)收集数据:我们根据现实生活的情况,设定了20个样本,如下表3所示:
表3训练样本集
Sizeoffeet2
Price($1000)
265
32
568
98
1564
250
100
23
3645
564
879
125
356
86
873
105
1356
254
458
1587
298
2458
521
2478
512
3578
652
87
965
154
546
65
1548
246
(2)准备数据:数据已是数值型数据;
(3)分析数据:将其可视化如下图8.
图8训练集数据的可视化
(4)训练算法:
(5)测试算法:
我们将得到的hθ(x)与样本点画出来,如下图9.可以看出效果不错,毕竟事实就是房子面积越大,卖价越高,当然还有地段等因素影响,所以并不是完全都在直线上。
图9样本点与回归线
(6)使用算法:我们用得到的线性模型对新样本x=2000,来预测该面积的房子卖价y=hθ(x)=-10.13+0.18*2000=349.87,注意单位是千$。