在数字化时代,数据无处不在,如何从海量数据中提取有价值的信息成为了一个重要课题。机器学习作为一种强大的数据分析工具,能够帮助我们从数据中学习并做出预测。机器学习是人工智能的一个分支,它使计算机系统能够利用数据来不断改进性能,而无需明确编程。相对的是,深度学习作为机器学习的一个子集,通过模拟人脑的神经网络来处理复杂的数据模式。
本文通过一个具体案例——“视频的点击次数预测”,来介绍机器学习的运作过程。
视频点击次数预测案例
案例介绍:“假设有人想要通过视频平台赚钱,他会在意频道有没有流量,这样他才会知道他的获利。假设后台可以看到很多相关的信息,比如:每天点赞的人数、订阅人数、观看次数。根据一个频道过往所有的信息可以预测明天的观看次数。找一个函数,该函数的输入是后台的信息,输出是隔天这个频道会有的总观看的次数。”
这个案例将帮助我们理解机器学习的三个关键步骤:模型定义、损失函数和优化。
Step1. 定义模型
模型是机器学习中的一个核心概念,它是一个带有参数的数学函数,用于预测或决策。
在实际问题中,需要根据问题本身进行模型的选择和细节设计,例如:当数据关系近似线性时,可以选择线性回归或逻辑回归;问题具备明显的决策边界时,采用决策树和随机森林;对于复杂的非线性关系,使用深度神经网络;
在本案例中,我们假设前一天的点击次数与后一天的点击次数之间存在线性关系,选择线性模型,定义如下:
y
=
w
x
1
+
b
y=wx_1+b
y=wx1+b
在这里,
x
1
x_1
x1代表前一天的观看次数(输入),
y
y
y代表今天的观看次数(输出)。
w
w
w和
b
b
b分别是组成一个线性关系的权重和偏置,也是在学习过程中需要被优化的部分。
Step2. 定义损失
损失函数即优化的目标,用于评估模型的表现并由此做出惩罚。假设本案例中观看次数和日期的关系如下:
设某一时刻的
w
=
1
,
b
=
500
w=1,b=500
w=1,b=500,这时代入一个数据点到
y
=
w
x
1
+
b
y=wx_1+b
y=wx1+b,比如2017/01/01,会发现预测值
y
^
=
4800
+
500
=
5300
\hat y=4800+500=5300
y^=4800+500=5300,而真实值是4900,显然,模型预测有所偏差,需要被优化。那么如何衡量这一偏差也就是损失函数需要做的事情了,我们需要选择合适的损失函数来更好地表达这种偏差,为模型优化提供目标。
简单的,我们可以取预测值和真实值之间差的绝对值,即:
ϵ
1
=
∣
y
1
−
y
^
1
∣
=
400
\epsilon_1 = |y_1-\hat y_1|=400
ϵ1=∣y1−y^1∣=400
带入更多的数据点同样可以得到损失值:
ϵ
2
=
∣
y
2
−
y
^
2
∣
=
∣
7500
−
(
4900
+
500
)
∣
=
2100
ϵ
3
=
∣
y
2
−
y
^
2
∣
=
.
.
.
\begin{split} &\epsilon_2 = |y_2-\hat y_2|=|7500-(4900+500)|=2100 \\ &\epsilon_3 = |y_2-\hat y_2|=... \end{split}
ϵ2=∣y2−y^2∣=∣7500−(4900+500)∣=2100ϵ3=∣y2−y^2∣=...
由此可以计算这三年来每一天的损失值,并将它们求和平均:
L
=
1
N
∑
i
=
1
N
ϵ
i
L=\frac{1}{N}\sum_{i=1}^N\epsilon _i
L=N1i=1∑Nϵi
上述的其实就是常用的损失之一,平均绝对误差(Mean Absolute Error,MAE)。值得注意的是,损失函数的设计是机器学习任务中的一个重点,需要根据具体场景、任务、问题等进行针对性选择。
Step3. 优化
优化就是找到一组合适的参数 w w w和 b b b,使得我们的模型 y = w x 1 + b y=wx_1+b y=wx1+b可以满足预测任务的需求。在此,我们采用梯度下降算法进行求解。
简要起见,假设 b b b已知,只需要求解 w w w。 w w w代入不同数值时能得到一系列损失值,共同构成误差表面(原本为2维, b b b确定后变为1维)。
那么如何找一个
w
w
w让损失的值最小呢?
简单来说,如上图所示,首先要随机选取一个初始的点
w
0
w_0
w0。接下来计算在
w
=
w
0
w=w_0
w=w0的时候,参数
w
w
w对损失的微分。计算在这一个点,在 w0 这个位置的误差表面的切线斜率,也就是这一条蓝色的虚线,它的斜率,如果这一条虚线的斜率是负的,代表说左边比较高,右边比较低。在这个位置附近,左边比较高,右边比较低。如果左边比较高右边比较低的话,就把
w
w
w的值变大,就可以让损失变小。如果算出来的斜率是正的,就代表左边比较低右边比较高。左边比较低右边比较高,如果左边比较低右边比较高的话,就代表把 w 变小了,
w
w
w往左边移,可以让损失的值变小。这个时候就应该把
w
w
w的值变小。我们可以想像说有一个人站在这个地方,他左右环视一下,算微分就是左右环视,它会知道左边比较高还是右边比较高,看哪边比较低,它就往比较低的地方跨出一步。