仅需六步,从零实现机器学习算法

作者:媒体转发 时间:2018-11-14 21:02

字号

从头开始写机器学习算法能够获得很多经验。当你最终完成时,你会惊喜万分,而且你明白这背后究竟发生了什么。

有些算法比较复杂,我们不从简单的算法开始,而是要从非常简单的算法开始,比如单层感知器。

机器学习算法

本文以感知器为例,通过以下 6 个步骤引导你从头开始写算法:

对算法有基本的了解

找到不同的学习资源

将算法分解成块

从简单的例子开始

用可信的实现进行验证

写下你的过程

一、基本了解

不了解基础知识,就无法从头开始处理算法。至少,你要能回答下列问题:

它是什么?

它一般用在什么地方?

什么时候不能用它?

就感知器而言,这些问题的答案如下:

单层感知器是最基础的神经网络,一般用于二分类问题(1 或 0,「是」或「否」)。

它可以应用在一些简单的地方,比如情感分析(积极反应或消极反应)、贷款违约预测(「会违约」,「不会违约」)。在这两种情况中,决策边界都是线性的。

当决策边界是非线性的时候不能使用感知器,要用不同的方法。

机器学习算法

二、借助不同的学习资源

在对模型有了基本了解之后,就可以开始研究了。有人用教科书学得更好,而有人用视频学得更好。就我而言,我喜欢到处转转,用各种各样的资源学习。

如果是学数学细节的话,书的效果很好(参见:

https://www.dataoptimal.com/data-science-books-2018/),但对于更实际的例子,我更推荐博客和 YouTube 视频。

以下列举了一些关于感知器不错的资源:

书:

《统计学习基础》(The Elements of Statistical Learning),第 4.5.1 节(https://web.stanford.edu/~hastie/Papers/ESLII.pdf)

《深入理解机器学习:从原理到算法》,第 21.4 节(https://www.cs.huji.ac.il/~shais/UnderstandingMachineLearning/understanding-machine-learning-theory-algorithms.pdf)

博客:

Jason Brownlee 写的《如何用 Python 从零开始实现感知器算法》(https://machinelearningmastery.com/implement-perceptron-algorithm-scratch-python/)

Sebastian Raschka 写的《单层神经网络和梯度下降》(https://sebastianraschka.com/Articles/2015_singlelayer_neurons.html)

视频:

感知器训练(https://www.youtube.com/watch?v=5g0TPrxKK6o)

感知器算法的工作原理(https://www.youtube.com/watch?v=1XkjVl-j8MM)

三、将算法分解成块

现在我们已经收集好了资料,是时候开始学习了。与其从头读一个章节或者一篇博客,不如先浏览章节标题和其他重要信息。写下要点,并试着概述算法。

在看过这些资料之后,我将感知器分成下列 5 个模块:

初始化权重

将输入和权重相乘之后再求和

比较上述结果和阈值,计算输出(1 或 0)

更新权重

重复

接下来我们详细叙述每一个模块的内容。

1. 初始化权重

(1) 首先,我们要初始化权重向量。

权重数量要和特征数量相同。假设我们有三个特征,权重向量如下图所示。权重向量一般会初始化为 0,此例中将一直采用该初始化值。

仅需六步,从零实现机器学习算法

(2) 输入和权重相乘再求和

接下来,我们就要将输入和权重相乘,再对其求和。为了更易于理解,我给第一行中的权重及其对应特征涂上了颜色。

仅需六步,从零实现机器学习算法

在我们将特征和权重相乘之后,对乘积求和。一般将其称为点积。

仅需六步,从零实现机器学习算法

最终结果是 0,此时用「f」表示这个暂时的结果。

(3) 和阈值比较

计算出点积后,我们要将它和阈值进行比较。我将阈值定为 0,你可以用这个阈值,也可以试一下其他值。

仅需六步,从零实现机器学习算法

由于之前计算出的点积「f」为 0,不比阈值 0 大,因此估计值也等于 0。

将估计值标记为「y hat」,y hat 的下标 0 对应的是第一行。当然你也可以用 1 表示第一行,这无关紧要,我选择从 0 开始。

如果将这个结果和真值比较的话,可以看出我们当前的权重没有正确地预测出真实的输出。

仅需六步,从零实现机器学习算法

由于我们的预测错了,因此要更新权重,这就要进行下一步了。

(4) 更新权重

我们要用到下面的等式:

仅需六步,从零实现机器学习算法

基本思想是在迭代「n」时调整当前权重,这样我们将在下一次迭代「n+1」时得到新权重。

为了调整权重,我们需要设定「学习率」,用希腊字母「eta(η)」标记。我将学习率设为 0.1,当然就像阈值一样,你也可以用不同的数值。

目前本教程主要介绍了:

仅需六步,从零实现机器学习算法

现在我们要继续计算迭代 n=2 时的新权重了。

仅需六步,从零实现机器学习算法

我们成功完成了感知器算法的第一次迭代。

(5) 重复

由于我们的算法没能计算出正确的输出,因此还要继续。

一般需要进行大量的迭代。遍历数据集中的每一行,每一次迭代都要更新权重。一般将完整遍历一次数据集称为一个「epoch」。

责任编辑:CQITer新闻报料:400-888-8888   本站原创,未经授权不得转载
继续阅读
热新闻
推荐
关于我们联系我们免责声明隐私政策 友情链接