机器学习的最直白讲解,就看这篇
作者头像
  • 钟丽丹
  • 2019-10-29 17:48:52 1

如果你想深入了解机器学习及其背后的数学原理,你会发现几乎所有问题都可以归结为一个优化问题。例如,训练神经网络就是一个参数优化的问题。因此,要真正理解机器学习算法,你需要首先掌握数学优化的基本概念及其实用性。

在这篇文章中,你将看到一步步演示如何解决一个简单的机器学习问题。在这个过程中,你将了解到为什么这个问题最终归结为一个优化问题,参数如何被优化以及如何找到最优解。


机器学习求解步骤

步骤1:定义问题

假设我们有一个包含11个已知点的数据集,每个点的坐标为(x1, x2)。例如,x1可以表示电脑的使用年限,而x2表示训练神经网络所需的时长。如果我们只知道电脑的使用年限x,却不知道训练神经网络的确切时间x2,那么我们就需要一个更好的算法来解决这个问题。

步骤2:简单猜测

我们随意选取一个数据点来预测x对应的x2值,这样会产生一个误差。然而,如果数据集中没有与预测点使用年限相近的点,那么误差就会很大。

因此,我们需要一种更有效的算法来解决问题。

步骤3:改进猜测:机器学习方法

a. 数据拟合

现在我们进入机器学习领域。观察红色数据点后,可以看出一个线性趋势:电脑使用时间越长,训练所需的时间也越长。一个更好的算法可以根据数据识别这种趋势,从而做出更准确的预测,减少误差。

我们需要找到一条函数曲线来拟合数据。

b. 找到拟合线

我们如何找到这条线?利用高中知识,只需找到最佳的a和b值: [图像]

对于给定的数据,最优值为a=0.8和b=20。但如何找到这些最优值?

c. 最优a和b:最小化均方误差

我们希望找到a和b,使直线y=ax+b尽可能好地拟合数据。换句话说,数据点与直线之间的误差(或距离)应尽量小。如图所示,黄色虚线应该尽量短。 [图像]

以点(x1,x2)=(100,120)为例,已知最优参数a=0.8和b=20,该点的误差为:

误差 = f(x) - y

误差 = f(100) - 120

误差 = a*100 + b - 120

误差 = 0.8*100 + 20 - 120

误差 = -12

为了评估整个拟合线的表现,我们需要计算所有点的误差。为此,我们首先计算每个点误差的平方。原因有两个: 1. 通过平方误差,我们可以得到一个绝对值,(-12)^2 = 144,平方放大了误差,如果某些点离拟合线较远,误差会变得更大。 2. 用公式表示:

[图像]

更一般的写法:

这个公式称为均方误差和(sum of square error),在统计学和机器学习中十分常见。

d. 优化函数

为什么优化函数如此重要?我们希望找到a和b,使y=ax+b更好地拟合数据集。也就是说,我们要找到a和b,使均方误差最小,即:

[图像]

如果我们找到函数f(a, b)的最小值,就能找到a和b的最优值:

[图像]

在实际计算之前,我们先画出优化函数f(a, b)的图形:

[图像]

左图的高度代表均方误差的大小,山峰越高,误差越大。最小均方误差位于绿色箭头所指处,此处对应的a和b就是最优值。

当沿着a轴改变a的取值时(对应左图斜率变大),相应的误差也会变大。 [图像]

同样,当沿着b轴改变b的取值时(即拟合线上下移动),误差也会增大。 [图像]

e. 计算最优值

如何计算均方误差最小值对应的a和b?我们知道,要获得全局最小点必须满足两个条件: 1. 一阶偏导f'(a, b) = 0 2. 二阶偏导f''(a, b) > 0

由于目标函数是二维的,我们可以简单地计算每个维度上的偏导数。根据条件1,我们得到以下方程:

f(a, b) Δa = 0

f(a, b) Δb = 0

已知f(a, b) = SUM(axi + b - yi)²,进一步化简:

f(a, b) = SUM(yi² + b² + a²xi + 2abxi - 2byi - 2axiyi)

综合可得:

SUM(yi² + b² + a²xi + 2abxi - 2byi - 2axiyi) Δa = 0

SUM(yi² + b² + a²xi + 2abxi - 2byi - 2axiyi) Δb = 0

很容易计算出偏导数:

f(a, b) = SUM(2axi + 2bxi - 2xiyi) = 0

f(a, b) = SUM(2b + 2axi - 2yi) = 0

记住,在下面两个方程中,有两个SUM,和许多已知点xi和yi。就算只有10个点,代入后方程也会变得很长,因此手算也变得不容易,只能借助计算机。

恭喜你!你已经知道了线性回归的工作原理,以及如何通过已知样本学习到两个参数a和b。

但是,还有更多的知识需要了解。

逼近多项式

如果数据没有展现出线性趋势,而是像一个二次函数的趋势:

在这种情况下,线性函数拟合的效果不佳,多项式拟合可能更好。这意味着我们需要处理平方函数、三次函数,甚至更高阶的多项式逼近。

但是,计算这些函数的方法是通用的。首先,我们再次定义问题,希望找到一个平方函数y = ax² + bx + c,以更好地拟合数据:

[图像]

现在,我们需要确定三个参数:a、b和c。由于最小化问题稍有不同,但均方误差和目标函数不变。

过拟合

最后,我们仍然有一个问题需要解答。一开始提到的那个具有线性趋势的问题,难道不能用二次函数拟合吗?当然可以!我们用更高阶的函数y = ax² + bx + c去拟合不好吗?如果只从训练集上的表现来看,高阶函数确实会减少误差。

实际上,当目标函数的阶次比总样本点少1时,我们的目标函数将拟合每一个点,均方误差为0。这听起来很完美,但并非如此。看下面两幅图:

[图像]

在左图中,我们用二次函数近似拟合数据;在右图中,我们用10阶函数拟合,因此它可以近似拟合几乎所有14个样本点。

但是,右图的线条运动显得异常复杂,它试图拟合所有的点,但失去了数据的整体趋势。高阶函数对数据的变化更加敏感,预测结果更加不可靠。

因此,我们应该首先观察数据,决定使用几阶多项式拟合效果最好,然后选择合适的阶数进行拟合。

    本文来源:图灵汇
责任编辑: : 钟丽丹
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
直白讲解机器学习
    下一篇