前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >机器学习的最直白讲解,就看这篇!

机器学习的最直白讲解,就看这篇!

作者头像
石晓文
发布2019-11-12 20:57:25
4830
发布2019-11-12 20:57:25
举报
文章被收录于专栏:小小挖掘机小小挖掘机

假如你想深入机器学习和它背后的数学,你将会很快意识到一切都可归结为一个优化问题。就连训练神经网络都是一个参数优化的问题。因此要想理解机器学习算法,你需要首先理解数学优化的基本概念,以及它为什么这么有用。

这篇文章,你将会看到一步一步的演示如何求解一个简单的机器学习问题。在这个过程中,你将会看到为什么以及它怎样归结为一个机器学习问题,参数如何被优化以及如何计算最优值。

机器学习求解步骤

Step 1: 问题定义

如下所示一个简单的数据集,一共包括11个已知点,点的坐标为:(x1, x2):

x1,x2的含义可以任意假定,比如x1 表示计算机的使用年限,x2表示训练神经网络所需要的时间。

如果你的电脑使用年限为下图中的x, 显然你不知道训练神经网络所需要的准确时间x2

Step 2: 仅凭猜测

我们随便找一个电脑使用年限与x 最接近的点,如下图所示,来预测x对应的x2值,产生的误差为err.

但是,如果我们运气不好,下图所示,已知的11个点中,没有与预测点的使用年限x值相近的,此时误差就会很大。

因此,我们需要一个更好的算法来求解。

Step 3: 让猜测更准确:机器学习方法

a. 数据拟合

现在我们进入机器学习领域。在观察红色数据点后,你会很容易看出一种线性趋势,你的电脑使用越长(x1 越大),训练时间就会越长(x2 越大)。一个更好的算法将会依据数据,识别出这个趋势,做出更好的预测,误差自然会更小。

函数应该近似拟合我们的数据

b. 拟合线

我们怎样发现这条线?利用高中知识:

我们只需要找到更好的a和b:

对于此处的数据,最优值分别为 a=0.8 and b=20. 但是,我们应该怎么发现这些最优值 a and b

c. 发现最优a和b,最小化均方误差

就像我们前面说的,我们想要发现ab,以便使得 y=ax+b这条线尽可能好的拟合我们的数据。用数学的术语来表述,在我们数据集中的点与这条线的误差(或称距离)应该是最小的,如下图所示,这些黄色的虚线尽可能地短。

绿色箭头指向的点,其误差(或称距离)距离等于:

如果此点的坐标为(x1, x2) = (100, 120), 还记得最优参数a=0.8 and b=20,所以此点的误差:

Error = f(x) — yi Error = f(100) — 120 Error = a*100+b — 120 Error = 0.8*100+20–120 Error = -12

图中我们也可看出这个点比拟合线高12个单元。为了评估拟合线整体的表现,需要计算所有点的误差。怎么做?首先计算每个点的误差的平方。有两个原因:

  • 通过平方误差,我们会得到一个绝对值,(-12)^2 = 144,
  • 平方放大了误差,如果某些点离拟合线比较远,结果误差将会变得非常大

用公式表达为:

更一般的写法:

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

d. 优化函数

优化函数为什么这么有用?初始问题的定义:我们想要发现a和b以便 y=ax+b更好的拟合数据集。也可以表述为,我们想要发现 ab以便均方误差最小,即:

假如找到函数 f(a, b)的最小值,我们将会发现a和b的最优值:

进入实际计算前,先让我们图形绘制下优化函数 f(a, b)

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

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

沿着轴b,改变b的取值,也就是叫线上下移动,我们同样也会得到更大的均方误差。

e. 计算最优值

怎样计算均方误差最小值对应的a和b呢?我们知道取得全局最小点必须满足两个条件:

  • 一阶偏导 f’(a,b) = 0
  • 二阶偏导 f’’(a,b) >0

因为目标函数是2个维度的函数,我们可以简单的计算每一个维度上的偏导数,根据必须满足的条件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²x + 2abxi — 2byi — 2bxiyi], 综合可得:

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, bc. 因为,我们的最小化问题需要稍作改变,不过均方误差和最小的目标函数不会改变:

需要优化的三个参数 a,bc:

过拟合

我们仍然有一个问题需要去解释,文章一开始提到的具有线性走势的那个问题,难道就不能用二次函数拟合吗?肯定可以!我们用更高阶的函数y = ax² + bx + c 去拟合不好吗?如果单从训练集上的表现来看,高阶函数肯定会让误差更小的。

事实上,目标函数的阶次比总的样本点个数小于1的时候,我们的目标函数将会拟合到每一个点,均方误差将会是0. 非常完美,不是吗?

并不是那样好,用下面两幅图来解释:

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

但是,右图的线条运动看起来很奇怪,它试图去拟合所有点,但是它丢失了样本数据的整体走势。得到的高阶函数对值得变化更加敏感,预测结果更加不可靠。

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小小挖掘机 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Step 1: 问题定义
  • Step 2: 仅凭猜测
  • Step 3: 让猜测更准确:机器学习方法
  • a. 数据拟合
  • b. 拟合线
  • c. 发现最优a和b,最小化均方误差
  • d. 优化函数
  • e. 计算最优值
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档