机器学习中的两个常见的问题:回归任务和分类任务。那什么是回归任务和分类任务呢?简单的来说,在监督学习中(也就是有标签的数据中),标签值为连续值时是回归任务,标志值是离散值时是分类任务。而线性回归模型就是处理回归任务的最基础的模型

单变量线性回归:

简单来说,线性回归就是选择一条线性函数来很好的拟合已知数据并预测未知数据

例如预测住房价格,我们要使用一个数据集,数据集包含俄勒冈州波特兰市的住房价格。根据不同房屋尺寸所售出的价格,画出我的数据集。比方说,根据房子是1250平方尺大小,来确定这房子能卖多少钱。那么,我们需要构建一个模型,直线即可满足要求

回归任务的卷积网络 回归任务和分类任务_机器学习线性回归算法实验报告

所使用的训练集如下:

回归任务的卷积网络 回归任务和分类任务_线性回归_02

? 代表训练集中实例的数量

? 代表特征/输入变量

? 代表目标变量/输出变量

(?, ?) 代表训练集中的实例

(?⁽ⁱ⁾, ?⁽ⁱ⁾) 代表第? 个观察实例

ℎ 代表学习算法的解决方案或函数也称为假设(hypothesis)

回归任务的卷积网络 回归任务和分类任务_线性回归_03

一种可能的表达方式为:ℎ?(?) = ?₀ + ?₁?,因为只含有一个特征/输入变量,因此这样的问题叫作单变量线性回归问题

我们需要为模型选择合适的参数(parameters)?₀ 和 ?₁,在房价问题这个例子中便是直线的斜率和在?轴上的截距

回归任务的卷积网络 回归任务和分类任务_代价函数_04

这条直线明显拟合的不好,最好的效果应该是这条直线穿过所有的点,需要对模型进行优化,这里我们要引入一个概念:

代价函数:是用来估量你模型的预测值ℎ?(?)与真实值?的不一致程度,损失函数越小,模型的效果就越好。

我们选择的参数决定了我们得到的直线相对于我们的训练集的准确程度,模型所预测的 值与训练集中实际值之间的差距(下图中蓝线所指)就是建模误差(modeling error)

回归任务的卷积网络 回归任务和分类任务_机器学习线性回归_05

我们的目标便是选择出可以使得建模误差的平方和能够最小的模型参数, 即使得代价函数

回归任务的卷积网络 回归任务和分类任务_代价函数_06

最小

代价函数也被称作平方误差函数,有时也被称为平方误差代价函数。还有其他的代价函数也能很好地发挥作用,但是平方误差代价函数是解决回归问题最常用的手段

回归任务的卷积网络 回归任务和分类任务_机器学习线性回归_07

在上图中,我们可以明显的看到,对于不同的?₀和?₁,存在一个使得?(?₀, ?₁)最小的点,我们需要一种有效的算法,能够自动地找出这些使代价函数?取最小值的参数

梯度下降是一个用来求函数最小值的算法,我们将使用梯度下降算法来求出代价函数 ?(?₀, ?₁) 的最小值

梯度下降背后的思想是:开始时我们随机选择一个参数的组合(?0, ?1, . . . . . . , ??),计算代价函数,然后我们寻找下一个能让代价函数值下降最多的参数组合。我们持续这么做直到到到一个局部最小值(local minimum),因为我们并没有尝试完所有的参数组合,所以不能确定我们得到的局部最小值是否便是全局最小值(global minimum),选择不同的初始参数组合,可能会找到不同的局部最小值

回归任务的卷积网络 回归任务和分类任务_机器学习线性回归算法实验报告_08

批量梯度下降(batch gradient descent)算法的公式为:

回归任务的卷积网络 回归任务和分类任务_机器学习线性回归算法实验报告_09

即:

回归任务的卷积网络 回归任务和分类任务_机器学习线性回归_10

需要注意的一点是,我们需要同步更新?₀ 和 ?₁的值,如果先更新了?₀,在计算?₁时会使用已经更新过的?₀

此外,?是指学习率(learning rate),它决定了我们沿着能让代价函数下降程度最大的方向迈出的步子有多大,在批量梯度下降中,我们每一次都同时让所有的参数减去学习速率乘以代价函数的导数

为了将问题简化,令?₀ = 0,则预测函数是一条过原点的直线,斜率为?₀,代价函数变为关于?₁的二次曲线,当?₁ = 1时,代价函数取最小值

回归任务的卷积网络 回归任务和分类任务_机器学习线性回归算法实验报告_11

回归任务的卷积网络 回归任务和分类任务_线性回归_12

首先观察对代价函数求导的部分,当前点的取值在最低点右侧时,所求导数为正数,且越接近最低点,图像越平缓,导数值越小

此时,?₁取值太大,减去一个正数是合理的,并且越靠近最低点,我们越需要小心的移动,而导数值会自动的变小,我们就不需要再另外减小?

当前点取值在最低点左侧时同理

再来观察学习率,如果?太小了,结果就只能一点点地挪动, 去努力接近最低点,这样就需要很多步才能到达最低点,所以如果?太小的话,可能会很慢。

如果?太大,那么梯度下降法可能会越过最低点,甚至可能无法收敛,下一次迭代又移动了一大步,越过最低点,下一次又越过最低点(导数的绝对值越来越大),直到离最低点越来越远,所以,如果?太大,它会导致无法收敛,甚至发散

将梯度下降运用到具体的拟合直线的线性回归算法里,则有:

回归任务的卷积网络 回归任务和分类任务_线性回归_13

多变量线性回归:

上述的例子中,我们的假设只有一个特征x,即房屋的尺寸大小,价格? = ℎ(?),现在对房价模型增加更多的特征, 例如房间数楼层等,构成一个含有多个变量的模型,模型中的特征为(?1, ?1, . . . , ??)

回归任务的卷积网络 回归任务和分类任务_机器学习线性回归_14

增添更多特征后,我们引入一系列新的注释:

? 代表特征的数量

?⁽ⁱ⁾代表第 ? 个训练实例,是特征矩阵中的第?行,是一个向量(vector)

比方说,上图的 ?⁽²⁾ = [ 1416,3,2,40]ᵀ

?ⱼ⁽ⁱ⁾代表特征矩阵中第 ? 行的第 ? 个特征,也就是第 ? 个训练实例的第 ? 个特征。如上图的?₂⁽²⁾  = 3

支持多变量的假设 ℎ 表示为:ℎ?(?) = ?0 + ?1?1 + ?2?2+. . . +????, 这个公式中有? + 1个参数和?个变量,为了使得公式能够简化一些,引入?0 = 1,则公式转化为:ℎ?(?) = ?0?0 + ?1?1 + ?2?2+. . . +????

此时模型中的参数是一个? + 1维的向量,任何一个训练实例也都是? + 1维的向量,特征矩阵?的维度是 ? ∗ (? + 1)

因此公式可以简化为:ℎ?(?) = ?ᵀ?,其中上标ᵀ代表矩阵转置

与单变量线性回归类似,在多变量线性回归中,我们也构建一个代价函数,则这个代价函数是所有建模误差的平方和,即:


回归任务的卷积网络 回归任务和分类任务_代价函数_15

其中:

回归任务的卷积网络 回归任务和分类任务_线性回归_16

我们的目标和单变量线性回归问题中一样,是要找出使得代价函数最小的一系列参数。多变量线性回归的批量梯度下降算法为:

回归任务的卷积网络 回归任务和分类任务_代价函数_17

我们开始随机选择一系列的参数值,计算所有的预测结果后,再给所有的参数一个新的值,如此循环直到收敛

一些技巧:

特征缩放:

在我们面对多维特征问题的时候,我们要保证这些特征都具有相近的尺度,这将帮助梯度下降算法更快地收敛

以房价问题为例,假设我们使用两个特征,房屋的尺寸和房间的数量,尺寸的值为 0-2000 平方英尺,而房间数量的值则是 0-5,以两个参数分别为横纵坐标,绘制代价函数的等高线图,能看出图像会显得很扁,梯度下降算法需要非常多次的迭代才能收敛

回归任务的卷积网络 回归任务和分类任务_机器学习线性回归算法实验报告_18

解决的方法是尝试将所有特征的尺度都尽量缩放到-1 到 1 之间,如图:

回归任务的卷积网络 回归任务和分类任务_机器学习线性回归_19

学习率:

梯度下降算法的每次迭代受到学习率的影响,如果学习率?过小,则达到收敛所需的迭代次数会非常高

如果学习率?过大,每次迭代可能不会减小代价函数,可能会越过局部最 小值导致无法收敛

通常可以考虑尝试些学习率:? = 0.01,0.03,0.1,0.3,1,3,10

特征和多项式回归:

回归任务的卷积网络 回归任务和分类任务_机器学习线性回归_20

正规方程:

到目前为止,我们都在使用梯度下降算法,但是对于某些线性回归问题,正规方程方法是更好的解决方案,如:

回归任务的卷积网络 回归任务和分类任务_机器学习线性回归算法实验报告_21

回归任务的卷积网络 回归任务和分类任务_机器学习线性回归算法实验报告_22

如果两个特征值相关,矩阵?′?是不可逆的(当有一些多余的特征时,可以删除这两个重复特征里的其中一个,无须两个特征同时保留)

如果有大量的特征值,即特征值数量远远大于样本数,可能会导致矩阵?′?的结果是不可逆的(如果特征数量实在太多,删除一些特征值,用较少的特征来反映尽可能多内容)