上一篇笔记从较大的视角了解了机器学习的流程,本文则简单记录对线性模型的其中一种改进。
回顾与思考
同样是以上案例,此前我们使用的线性模型
y
=
w
x
1
+
b
y=wx_1+b
y=wx1+b(下称模型1)来预测当前时刻的浏览量,其中
x
1
x_1
x1为前一天的浏览量。显而易见的是,只考虑前一天的浏览量并没有能很好的利用数据,因为当前时刻的浏览量很可能与此前部分时刻的浏览量存在或大或小的联系。
基于这一假设,我们进一步对数据进行更加细致的观察。下图是对模型预测和真实数据的可视化图。
我们发现,蓝色的线几乎就是红色的线往右平移一天而已也就是说,机器几乎就是拿前一天的观看人次来预测隔天的观看人次,这符合模型1的特点。进一步观察,我们发现真实数据具备一定的周期性,如果以7天为周期,会发现后两天数据往往较低(周六和周天)。据此,我们可以合理的进行猜测:如果模型参考前7天的数据来作为预测的信息输入,大概率会比目前的只考虑前一天的做法得到更好的性能表现。
模型改进
简单的,可以将前7天的数据都作为模型的输入,并且为每一个输入分配一组权重,再加上最终的偏置得到模型2,公式如下。
y
=
b
+
∑
i
=
1
7
w
i
x
i
y=b+\sum_{i=1}^{7}w_ix_i
y=b+i=1∑7wixi
使用模型2进行预测,在训练数据上的损失是380,而模型1的训练损失是480。这一定程度上验证了我们的假设,模型2考虑了前7天的数据,获得了更好的表现。使用梯度下降进行学习,得到
w
w
w和
b
b
b的最优值如下表所示。
这时我们不禁要想,那不如考虑更多的天数?毕竟我们只是发现了以7天为周期这一个规律,也许继续拉大输入,模型能够学习到数据中更多潜在的规律呢?比如,这次我们考虑28天,即1个月的数据,如下。
y
=
b
+
∑
i
=
1
28
w
i
x
i
y=b+\sum_{i=1}^{28}w_ix_i
y=b+i=1∑28wixi
训练损失是330,在2021年的数据上,损失是460,看起来又更好一点。进一步,如果考虑 56 天,即:
y
=
b
+
∑
i
=
1
56
w
i
x
i
y=b+\sum_{i=1}^{56}w_ix_i
y=b+i=1∑56wixi
在训练数据上损失是320,在没看过的数据上损失还是 460。由此可见,考虑更多天没有办法再更降低损失了。看来在考虑天数这件事,这类模型也许已经到了一个极限。
以上所有模型都是把输入 x x x乘上一个权重,再加上一个偏置就得到预测的结果,这样的模型称为线性模型(linear model)。接下来的笔记将进一步对线性模型进行优化。