- 前言
- 梯度下降法(Gradient Descent)优化函数的详解(0)线性回归问题
- 梯度下降法(Gradient Descent)优化函数的详解(1)梯度下降法(Batch Gradient Descent)
- 梯度下降法(Gradient Descent)优化函数的详解(2)随机梯度下降法(SGD Stochastic Gradient Descent)
- 梯度下降法(Gradient Descent)优化函数的详解(3)小批量随机梯度下降法(mini-batch SGD )
- 几种算法的比较
前言
在机器学习算法中,对于很多监督学习模型,需要对原始的模型构建损失函数,接下来便是通过优化算法对损失函数进行优化,以便寻找到最优的参数。在求解机器学习参数的优化算法中,使用较多的是基于梯度下降的优化算法(Gradient Descent, GD)。
比如说,接触过神经网络的人都知道,其核心是网络的训练,而训练方式多是基于梯度下降(Gradient Descent, GD)的优化算法。
梯度下降法有很多优点,其中,在梯度下降法的求解过程中,只需求解损失函数的一阶导数,计算的代价比较小,这使得梯度下降法能在很多大规模数据集上得到应用。梯度下降法的含义是通过当前点的梯度方向寻找到新的迭代点。
线性回归问题(Linear Regression)
基本原理
回归在数学上来说是给定一个点集,能够用一条曲线去拟合之,如果这个曲线是一条直线,那就被称为线性回归,如果曲线是一条二次曲线,就被称为二次回归,回归还有很多的变种,如局部线性回归(Locally weighted linear regression), 逻辑回归(Logistic regression)等等。
解决问题
(1) 确定被解释变量与解释变量之间的回归模型,并依据样本观测值对回归模型中的参数进行估计,给出回归方程。
(2) 对回归方程中的参数和方程本身进行显著性检验。
(3) 评价解释变量对被解释变量的贡献并对其重要性进行判别。
(4) 利用所求得的回归方程,并根据解释变量的给定值对被解释变量进行预测,对解释变量进行控制
算法详解
假设要做一个房屋价值的评估系统,房屋的价值来自很多地方,比如说面积、房间的数量(几室几厅)、地 段、朝向等等,这些影响房屋价值的变量被称为特征 (feature) 。 在此处为了简单,假设我们的房屋就只有一个影响量,就是房屋的面积。
step1:
数据如下:
面积(m^2) | 销售价格(万元) |
---|---|
123 | 250 |
150 | 320 |
87 | 160 |
102 | 220 |
280 | 590 |
200 | 390 |
… | … |
用这些数据我们可以在坐标系中绘制出一系列散点
我们所想要解决的问题,就是给出任意的一个面积,预测对应的房价。 所以这是一个预测问题。也就是回归问题。
step2:这里我们用最简单的线形模型来做房价预测。那么这个问题也可以称之为线性回归问题。
线形模型简单来说就是直角坐标系中的一根线,用 y = a x + b y=ax+b y=ax+b表示,这里 a 和b 就是我们要优化的参数。换句话说,我们要通过接下来写的一套算法,找到最优的 a 和 b 。
step3:由于在后期的训练中,数据在各个维度上尺度差异太大很容易造成训练速度过慢。所以一般来说,在训练之前,我们首先会对数据做归一化处理,统一归到[0,1]之间,上公式:
x n e w = x − x m i n x m a x − x m i n y n e w = y − y m i n y m a x − y m i n x_{new} = \frac{x-x_{min}}{x_{max}-x_{min}} \qquad y_{new} = \frac{y-y_{min}}{y_{max}-y_{min}} xnew=xmax−xminx−xminynew=ymax−yminy−ymin
这样就得到归一化之后的数据
面积(m^2) | 销售价格(万元) |
---|---|
0.1865 | 0.2093 |
0.3264 | 0.3721 |
0.0777 | 0.1395 |
1 | 1 |
0.5855 | 0.7047 |
… | … |
step4:
我们可以做出一个图,x 轴是房屋的面积, y 轴是房屋的售价,如下:
在对数据做过预处理之后,我们现在就来评判y=x(a=1,b=0) 这条线多大程度上完成了预测。显然的,我们会用到我们的训练数据代入到模型y=x中,看看和实际结果差多少。通过模型得到的结果我们称之为预测值y_p
面积(m^2) | 销售价格(万元) | 预测价格 | 差值 | 差值的平方 |
---|---|---|---|---|
0.1865 | 0.2093 | 0.1865 | 0.0228 | 0.00051984 |
0.3264 | 0.3721 | 0.3264 | 0.0457 | 0.00208849 |
0.0777 | 0.1395 | 0.0777 | 0.0618 | 0.00381924 |
1 | 1 | 1 | ||
0.5855 | 0.5349 | 0.5855 | 0.0506 | 0.0025036 |
… | … | … | … | … |
step5:
如果来了一个新的面积,假设在销售价钱的记录中没有的,我们怎么办呢?
我们可以用一条曲线去尽量准的拟合这些数据,然后如果有新的输入过来,我们可以在将曲线上这个点对应的值返回。如果用一条直线去拟合,可能是下面的样子:
红色的点就是我们想要预测的点。
step6:总结
首先给出一些概念和常用的符号,在不同的机器学习书籍中可能有一定的差别。
- 房屋销售记录表 - 训练集 (training set) 或者训练数据 (training data) ,是我们流程中的输入数据,一般称为x
- 房屋销售价钱 - 输出数据,一般称为 y
- 拟合的函数(或者称为假设或者模型),一般写做 y = h(x)
- 训练数据的条目数 (#training set) , 一条训练数据是由一对输入数据和输出数据组成的
- 输入数据的维度 (特征的个数,#features) : n
下面是一个典型的机器学习的过程,首先给出一个输入数据,我们的算法会通过一系列的过程得到一个估计的函数,这个函数有能力对没有见过的新数据给出一个新的估计,也被称为构建一个模型。就如同上面的线性回归函数。
我们用 x1,x2…xn 去描述 feature 里面的分量,比如 x1=房间的面积 , x2=房间的朝向 等等,我们可以做出一个估计函数:
y ( x ) = y θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 . . . + θ n x n y(x) = y_θ(x) = θ_0 + θ_1x_1 + θ_2x_2...+θ_nx_n y(x)=yθ(x)=θ0+θ1x1+θ2x2...+θnxn
θ 在这儿称为参数,在这儿的意思是调整 feature 中每个分量的影响力,就是到底是房屋的面积更重要还是房屋的地段更重要。如果我们令 X0 = 1 ,就可以用向量的方式来表示了:
y ( x ) = y θ ( x ) = θ T X y(x) = y_θ(x) = θ_TX y(x)=yθ(x)=θTX
我们程序也需要一个机制去评估我们 θ 是否合理,因此我们需要对得到的h函数进行评估,一般这个函数称为损失函数(loss function)或者错误函数 (error function) 。描述 h 函数偏差的程度,我们称这个函数为 J 函数
在这儿我们可以做出下面的一个错误函数:
l o s s = J ( θ ) = 1 2 m ∑ i = 1 m ( y θ ( x i ) − y i ) 2 loss = J(\theta ) = \frac{1}{2m}\sum_{i=1}^{m}(y_{ \theta }(x_{i})- y_{i})^{2} loss=J(θ)=2m1i=1∑m(yθ(xi)−yi)2
这个错误估计函数是去对 x(i) 的估计值与真实值 y(i) 差的平方和作为错误估计函数,前面乘上的 1/2 是为了在求导的时候,这个系数就不见了,除以m是对平均量化。
这种求loss的方法称之为Mean Squared Error (MSE), 即均方差。
接下来的目标很明确,就是
如何不断的调整参数a,b来使loss越来越小,最终令预测尽可能接近真实值。
从这一点出发,很多人做了很多不同的工作,我们将这些方法统称为优化函数
代码地址:https://github.com/admin110/s0/blob/master/linearRegression.py
下一篇:梯度下降法(Gradient Descent)优化函数的详解(1)梯度下降法(Batch Gradient Descent)