通俗得说线性回归算法(一)线性回归初步介绍

一.从线性回归的故事提及

相信你们都听过著名的博物学家,达尔文的大名,而今天这个故事的主人公就是他的表弟高尔顿。html

高尔顿是一名生理学家,在1995年的时候,他研究了1078堆父子的身高,发现他们大体知足一条公式,那就是java

Y=0.8567+0.516*x算法

这条式子中的x指的是父亲的身高,Y指的是儿子的身高。能够明显看出,这就是咱们中学时代学的二元一次方程,反应在平面上就是一条直线编程

经过这条公式,咱们或许会直观得觉得高个的父亲总会有高个的儿子,矮个的父亲会有矮个的儿子。但高尔顿进一步观察后发现,并不是全部的状况都是这样的。特别高的父亲的儿子会比他父亲矮一些,特别矮的父亲的儿子会比他父亲高一些,父子不会说一直不断得更高或更矮下去。这个现象,其实就是回归。趋势不会一直持续下去,而是会回到某个中心。函数式编程

经过这个故事,相信你已经明白了什么是线性回归,那么接下来咱们就来讲说更加详细的内容。函数

二.理解线性回归

平面坐标点

抛出问题:假设有这样的一些点,这些都是现有的数据,咱们要找到拟合这些点的线,而后预测接下来的点。那咱们要怎么找出这条线呢?oop

h(x)=a0 + a1 * x(a1是斜率,a0是截距)学习

或者说换个问法,咱们要怎么求出a_1和a_0呢?大数据

Cost Function(代价函数)

第一次接触线性回归的同窗可能不知道什么叫cost function,其实当碰到不知道的概念的时候,只要想清楚两件事,这个概念是什么,有什么用。想清楚这两点,起码就不会犯迷糊了。3d

代价函数是什么?

咱们先随便画两条线来拟合那些点,如图所示,能够看到,明显图二更加拟合,也就是说图二的线更接近咱们理想中的线。
代价函数介绍

OK,再仔细观察,图二的线和图一的线有什么不一样呢?最明显的,就是图一中,各个点沿y轴到那条直线的距离更远,而图二中各个点到线的距离更近。
各点到西线的距离

这全部点沿y轴到直线的偏差,也就是各个点的偏差,的平均值。就是代价函数。公式以下:

代价函数公式

pred(i) 就是第i个点上,直线的y值,y(i)就是第i个点,这个点的y值,加上平方主要是避免了负数的状况。这就是代价函数。

代价函数有什么用?

代价函数有助于咱们找出a0和a1的最佳可能值。前面说到,代价函数就是每一个点在y轴到直线的距离的平均值。咱们的目标就是最小化这个值,在广泛状况下,代价函数是凸函数,以下图所示,

看到这个函数是否是比较熟悉?在学习导数的时候不就常常看到这样的图嘛,这种图一般也是经过求导来解的。

最小化过程

从y=a0+a1*x,这条直线开始。到写出代价函数,咱们的目标一直没变,就是要找出a0和a1,让这条直线更贴紧那些点(就是让代价函数最小)。固然,咱们还没说到如何让代价函数最小化,下面咱们就接着说说如何让代价函数最小化吧。

Gradient Descent(梯度降低)

梯度降低是什么?

梯度降低是一种不断迭代更新a0和a1以下降代价函数的方法。 咱们能够经过对代价函数求导的方式,看出应该让a0或a1加仍是减。

梯度降低公式
上面部分其实就是对代价函数的求导,经过对其求导,咱们可以知道a0和a1应该是增大仍是减小。

求解系数公式

这条公式其实就是(a0-代价函数的偏导数)。固然,其中还有一个控制速率的α(Alpha),对代价函数的求导能知道是对a0和a1增大仍是减小,那么α就是应该增大多少,减小多少。

举个例子,假设你如今在半山坡,你要作的是下山,代价函数的偏导数,就是告诉你应该向下仍是向上。而速率α就是来控制步子要迈多大。

步子小(α小)意味着小步快跑下山,缺点是跑比较久。大步向前(α大)意味着比较快,但可能一会儿迈太大,跑到对面半山腰去了。

速率α的做用

梯度降低有什么用?

经过梯度降低,可以让咱们找到一个局部最优解的a0和a1,为何是局部最优解呢?由于现实中的问题可能没一开始的例子那么清晰,不少时候你发现可能这条线也能够,这条线也不错,那条好像也能够。计算机也会这样,它可能也会以为某条线就已经够好了。就不去找其余的线了。

反应到咱们求的问题里面,能够说由于是最小化问题(最小化代价函数),但可能像右图同样,它已经在一个局部里面是最小的了,向左向右都是升高,既然如此那就安心当咸鱼喽。这种现象和初始的随机选择有关,也和训练的速率有关。

局部最优和全局最优

当选择了一个合适的α值,当更新迭代足够屡次以后。理论上就会到达某个底部,这时候也就意味着代价函数是某个范围内最小的。这个时候的a0喝a1就被咱们求出来了,咱们就可以获得一条拟合空间中点的直线了。

最后再说一下,刚刚介绍的都只是在二维空间中的计算,也就是只有一个特征。而现实中每每不止会有一个特征,而是多个特征,以下面的形式:

h(x)=a0 + a1 * x1 + a2 * x2 + a3 * x3 ...

不过计算方式和计算的方法都是相似的。只是数据量会变多,计算会更加复杂些。

OK,今天先从一个例子开始介绍线性回归。而后阐述了代价函数,以及求解代价函数最小化的一个方法,梯度降低。后面会介绍用sklearn来作线性回归,以及其余多种回归分析方法的初步介绍。

以上~


推荐阅读:
Windows上IDEA搭建最新Spark2.4.3源码阅读及调试的开发环境
Scala 函数式编程指南(一) 函数式思想介绍
通俗地说决策树算法(二)实例解析
大数据存储的进化史 --从 RAID 到 Hadoop Hdfs
C,java,Python,这些名字背后的江湖!

相关文章
相关标签/搜索