1.2线性模型
什么是线性模型?
初始模型:,
其中y表示观看人数,x1表示前一天的观看人数,这个模型就是在用前一天的观看人数来预测当前的观看人数。
模型改进:
然而真实的数据是有周期性的,每隔7天,一个循环。这样只使用前一天的数据来预测就显得不准确,我们应该考虑7天的数据。
这样我们便有了第二个模型:
这个模型考虑了前七天的数据,做了一个参数的加权求和,再加上偏置项。
如果我们使用28天的数据来预测呢?
这就有了第3个模型:
如果我们使用更多的数据,56天的数据呢?这就有了第4个模型:
总结:以上4个模型都是线性模型,且随着我们使用的数据越多,模型预测的越准确,
损失比较:
模型 | 训练损失 | 未见过数据上的损失 |
初始模型1 | 480 | 580 |
模型2(7天) | 380 | 490 |
模型3(28天) | 330 | 460 |
模型4(56天) | 320 | 460 |
随着我们使用数据的增加,训练损失和验证损失都在减少,到一定程度后,验证损失不在减小,表明仅靠增加数据,模型已达到上限。
这4个模型都是线性模型,我们就此给出线性模型的定义:
“这些模型都是把输入的特征x乘上一个权重,再加上一个偏置就得到预测的结果,这样的模型称为线性模型(linear model)。”
分段线性曲线
线性模型是最简单的模型之一。这种模型存在局限性。线性模型只能模拟简单的线性关系,无法模拟复杂的非线性关系,然后现实中的问题通常是复杂的。是非线性的,这就需要一个更复杂、更有灵活性的模型。
所以我们需要对线性模型进行改进。一个非线性函数可以用多段线性曲线来逼近。
我们先举一个割圆术的例子,使用正切多边形逼近圆形是一个非常好的类比,可以帮助我们理解如何使用分段线性曲线来逼近非线性关系。理论上来说,只有多边形取得足够多,那么就可以无限接近圆,我们需要建立这种思想。
回到我们非线性曲线。下面两张图是书本中的原图。
图1的这条红色曲线,我们可以把它看作是由下面几段蓝色曲线叠加得到的,如果不理解的话,那么换个说法,这们可以把红色曲线看到是由自身的三段折线叠加组合而成。推广开来,对于右图中的黑色曲线,我们同样可以把他看作是由无数多的折线叠加而成的。这个思想可以参考割圆术。
那么使用分段曲线,理论上我们可以叠加得到任何形式的曲线,只要我们每一段折线取得够短。
这样我们就可以使用分段线性曲线叠加来表示一个非线性曲线了。随着线性段数量的增加,分段线性曲线能够更好地逼近非线性关系。类似于多边形逼近圆形的过程,分段线性曲线最终可以逼近任意连续曲线。
这里进一步,我们可以用Sigmoid函数来代替Hard Sigmoid(也就是图中的蓝色折线段),那么我们连续曲线可以是有多段Sigmoid函数叠加得到的。
模型变形
这里我们还可以进一步对模型进行变形,前面我们已经尝试了Hard Sigmoid和Sigmoid函数,我们可以替换成ReLU函数。
ReLU函数:
ReLU(x)=max(0,x),如果 x<0,输出为 0;否则输出为 x。
同样一段非线性曲线可以是由多个ReLU函数叠加得到。
接下来是书中提到的一些概念。
激活函数:在机器学习里面,Sigmoid 或 ReLU 称为激活函数(activation function)。
神经网络:Sigmoid 或 ReLU 称为神经元(neuron),很多的神经元称为神经网络 (neural network)。
隐藏层:每一排称为一层,称为隐藏层(hidden layer),很多的隐藏层就“深”,这套技术称为深度学习。
过拟合:在训练数据和测试数据上的结果是不一致的,训练数据上效果很好,在测试数据(没看过的数据)上,效果变差,这种情况称为过拟合(overfitting)。
机器学习框架
首先划分训练集和测试集。
训练步骤如下:
- 定义一个含未知数的函数
- 定义损失函数
- 解优化问题,得到使损失函数最小的参数
喜欢的小伙伴收藏点赞关注吧。