提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
机器学习系列1—回归
前言
回归问题一般都是机器学习算法系列中的第一课,是学习更多复杂机器学习算法的基础,本文我们即来浅析一下机器学习中的回归算法
`
一、监督学习
回归本质上是一种监督学习的算法,因此在解释回归之前,我们需先明白一个概念监督学习
监督学习: 监督学习是指通过让机器学习大量带有标签的样本数据,训练出一个模型,并使该模型可以根据输入得到相应输出的过程,通过已有的一部分输入数据与输出数据之间的对应关系,生成一个函数,将输入映射到合适的输出。
举个通俗的例子:假如我们有一堆猫狗图片要进行分类,我们把一张猫图片的图片数据作为一个机器学习算法模型的输入数据,而猫的这个名字即为标签。我们将每一张图片的输入数据和标签都输入到模型中,让它学习
f
(
图像数据
)
f(图像数据)
f(图像数据)
⟶
\longrightarrow
⟶
名称
名称
名称 的一个映射关系。这个过程即为监督学习
除了监督学习外还有无监督学习,半监督学习,强化学习。其中监督学习与无监督学习的区别主要是模型训练学习时,有无标签的输入。
而监督学习一般分为两类,分类和回归
二、回归
1.定义
回归:回归最简单的定义是,给出一个点集D,用一个函数去拟合这个点集,并且使得点集与拟合函数间的误差最小,如果这个函数曲线是一条直线,那就被称为线性回归,如果曲线是一条二次曲线,就被称为二次回归。
而回归问题的作用在于使我们对于一个问题,可以通过拟合的曲线去预测接下来的值。
其实回归很像高中时学习的回归方程,令回归曲线尽可能的拟合坐标系中更多的点,即回归。以线性回归为例,如下图所示
2.直观理解
我们以最简单的线性回归的例子来阐述其原理过程
假设我们需要面对的是买房问题
房子的面积(area m2) | 房子的价格(price 万) |
---|---|
2 | 4 |
3 | 6 |
4 | 8 |
… | … |
上表给出了,一些数据,那么我们想要通过已有数据预测其他面积房子的价格。这就是典型的回归问题。
进行回归问题时,我们需要先对假设一个函数,去通过调节这个函数去拟合这些数据,我们将房子的面积设为横坐标作为这个房子的特征(需要明白,我们这里只不过是为了方便解释,将房子的一个属性面积作为了其特征进行计算,当然也可以有其他特征例如楼层,高度等等),纵坐标为房子的价格
画一个坐标图如下:
根据此图的数据关系我们可以先将假设函数设为
y
=
θ
x
y=θx
y=θx(在简单地线性回归中,一般将函数假设为
y
=
θ
0
x
+
θ
1
y=θ_0x+θ_1
y=θ0x+θ1,我们这里只是为了方便理解)
在这个回归问题则是需要不断的通过调节参数
θ
θ
θ来使得我们的假设函数尽可能正确的拟合数据,以便做出最符合事实的预测。我们可以通过手动修改
θ
θ
θ感受一下,回归是怎么样的过程。
如上图我们可以看到,
θ
θ
θ值0到2这个过程中,直线越来越拟合这些数据,直到
θ
θ
θ值为2是完美拟合了已有数据,所以这个回归问题最终的目标函数为
y
(
x
)
=
2
x
y(x)=2x
y(x)=2x,之后便可以通过此函数去预测其他面积大小的房屋的价格。
那么在数学上哪?其实数学上的过程与上述的差异并不大,接下来将一下其在数学上是如何实现的
3.数学原理(梯度下降法)
我们依然以上述为例,在数学上,对于回归进行拟合数据的过程即是使得假设函数根据房间大小所输出的值与真实值的差异(也就是误差)尽可能的小。我们使用
e
e
e来表示假设函数输出值与真实值中的差。如下图所示
那么拟合数据即是使得 e 0 2 + e 1 2 + e 2 2 + e 3 2 + e 4 2 e_0^2+e_1^2+e_2^2+e_3^2+e_4^2 e02+e12+e22+e32+e42(平方是因为 e e e有可能为负)最小,我们用 y ∗ y* y∗表示真实数据, y ( x ) y(x) y(x)表示假设函数,那么我们期待的则是,以下公式取得最小值。
J ( θ ) = 1 m ∑ i = 0 m ( y ( x i ) − y i ∗ ) 2 J(θ)= \frac 1m\sum_{i=0}^m(y(x_i)-y^*_i)^2 J(θ)=m1∑i=0m(y(xi)−yi∗)2
其中
m
m
m为数据的数量,也即是第二部分中表中的行数,
y
(
x
i
)
y(x_i)
y(xi)表示假设函数的根据第
i
i
i个
x
x
x的值的输出值即预测值,
y
i
∗
y^*_i
yi∗为第
i
i
i个
x
x
x所对应的真正值。
这类用来最小化误差值,并且同时更新参数的函数一般被称为损失函数或代价函数*
而如何使得
J
(
θ
)
J(θ)
J(θ)最小,我们需要对
θ
θ
θ进行求导,在此之前,需先说明,有很多地方这里的损失函数的公式是这样的
J ( θ ) = 1 2 m ∑ i = 0 m ( y ( x i ) − y i ∗ ) 2 J(θ)= \frac 1{2m}\sum_{i=0}^m(y(x_i)-y^*_i)^2 J(θ)=2m1∑i=0m(y(xi)−yi∗)2 (1)
大多数的说明在这里乘了一个
1
2
\frac12
21,这只是为了简化求导时的运算,于算法本身并无影响,我们后边的公式计算也基于以上公式。
我们将
y
(
x
)
=
θ
x
y(x)=θx
y(x)=θx带入,即
J ( θ ) = 1 2 m ∑ i = 0 m ( θ x i − y i ∗ ) 2 J(θ)= \frac 1{2m}\sum_{i=0}^m(θx_i-y^*_i)^2 J(θ)=2m1∑i=0m(θxi−yi∗)2 (2)
对 θ θ θ进行求导
d J d θ = 1 m ∑ i = 0 m ( θ x i − y i ∗ ) x i \frac {dJ}{dθ}= \frac 1{m}\sum_{i=0}^m(θx_i-y^*_i)x_i dθdJ=m1∑i=0m(θxi−yi∗)xi (3)
到了这里,如果在参数很少的时候,我们当然可以利用我们的数学知识令其导数等于零,求出其极值。但是显然一般机器学习的问题都拥有较多的特征,必然需要较多的参数去进行学习,这样才能学习出可以拟合复杂数据的非线性目标函数,如果再使用导数的方法求值,那就非常困难了,所以我们采取另一种方法,梯度下降法。
梯度下降法首先会随机初始化参数,我们这个例子只有
θ
θ
θ一个参数,因此只初始化这一个参数,然后计算这个参数值下损失函数的导数或者偏导数,即计算其梯度,更新其参数值,寻找能让损失函数值下降最多的方向。如下图所示
具体步骤:
1.随机初始化参数
θ
θ
θ,这里假设初始化
θ
=
0
θ=0
θ=0
2.计算
J
(
θ
)
J(θ)
J(θ),计算
d
J
(
θ
)
d
θ
\frac {dJ(θ)}{dθ}
dθdJ(θ)。
3.更新参数
θ
=
θ
−
α
d
J
(
θ
)
d
θ
θ=θ-\alpha\frac {dJ(θ)}{dθ}
θ=θ−αdθdJ(θ),直到找到全局最小值或者局部极小值(当然陷入局部最小值仍是需要解决的问题),其中损失函数的下降过程,若
d
J
d
θ
\frac {dJ}{dθ}
dθdJ<0,则
J
(
θ
)
J(θ)
J(θ)值向坐标轴右移动;若
d
J
d
θ
\frac {dJ}{dθ}
dθdJ>0,则
J
(
θ
)
J(θ)
J(θ)值向坐标轴走移动,如图
总结
以上便是这篇文章的全部内容,阐述了什么是回归,以及目标函数拟合数据的过程。但是此篇文章,只是以最简单的线性回归和线性函数为例,对其原理,以及梯度下降算法进行了简要的讲述,机器学习中还有很多其他的回归算法以及生活中更多的其实是非线性的处理模型,其必然会更加的复杂和多样,不过最基本的线性回归依然是理解的基础,而且以此为例也比较容易理解一些复杂的算法。最后,此文章乃个人理解,可作为参考,或有错误,不可完全照搬理解,如我错误,请指正。
注意
在这里要说明,很多人将逻辑回归划分为回归算法,这其实是错误的,逻辑回归虽然名字中有回归二字,但其实是分类算法。