1. 首页
  2. TensorFlowNews

只需6步,从头开始编写机器学习算法

点击上方“磐创AI”,选择“置顶公众号”

精品文章,第一时间送达

只需6步,从头开始编写机器学习算法

源:kdnuggets

编译:肖琴

转载自:新智元,未经允许不得二次转载


从头开始编写算法是一种有益的体验,当你最终点击运行的那一刻,你会了解算法背后真正发生了什么。


如果你以前用scikit-learn实现过这个算法,从头开始编写就会很容易?不是这样。


有些算法只是比其他算法更复杂,所以可以从简单的开始,比如单层感知器(Perceptron)。


本文将以感知器为案例,引导你完成从头开始编写算法的6个步骤。这种方法可以很容易地用于编写其他机器学习算法。


1. 对算法有一个基本的了解


这又回到了我最初所说的。如果你不了解基础知识,请不要从头开始处理算法。至少,你应该能够回答以下问题:

  • 它是什么?

  • 它通常用于做什么?

  • 什么时候不能使用它?


对于感知器,上面三个问题的答案是:


  • 单层感知器是最基本的神经网络,通常用于二进制分类问题(1或0,“是”或“否”)。


  • 它是一个线性分类器,因此只有在存在线性决策边界的情况下才能有效使用。一些简单的用途可以是情绪分析(正面或负面反应)或贷款违约预测(“会违约”,“不会违约”)。对于这两种情况,决策边界都必须是线性的。


  • 如果决策边界是非线性的,那么你实际上无法使用感知器。对于这些问题,需要使用其他算法。


只需6步,从头开始编写机器学习算法


2. 找到各种类型的学习资源


在对模型有了基本的了解之后,是时候开始进行研究了。我建议使用大量资源。有些人用教科书学得更好,有些人用视频学得更好。就我个人而言,我喜欢使用各种类型的资源。对于数学细节,教科书的解释很好,但对于更实际的例子,我更喜欢看博客文章和YouTube视频。


对于感知器,这里有一些很棒的资源。


教材:

  • 《统计学习基础》,第4.5.1节

  • 《深入理解机器学习:从原理到算法》,第21.4节


博客:

  • JasonBrownlee的Machine Learning Mastery系列文章,其中一篇是《如何用Python从头开始实现感知器算法》:

https://machinelearningmastery.com/implement-perceptron-algorithm-scratch-python/

  • SebastianRaschka的博客,Single-Layer Neural Networks and Gradient Descent

https://sebastianraschka.com/Articles/2015_singlelayer_neurons.html


视频:

  • 感知器训练:

https://www.youtube.com/watch?v=5g0TPrxKK6o

  • Perceptron算法的工作原理:

https://www.youtube.com/watch?v=1XkjVl-j8MM


只需6步,从头开始编写机器学习算法


3. 将算法分解为块


现在,我们已经收集了需要的资料,是时候开始学习了。与其从头到尾阅读书本或博客文章,不如先浏览一下章节标题和其他重要信息。写下要点,并尝试概述算法。


在浏览完这些资料后,我们可以将Perceptron算法分解为以下几个块(chunks):

  • 初始化权重

  • 将输入乘以权重,并求和

  • 将结果与阈值进行比较,并计算输出(1或0)

  • 更新权重

  • 重复这个过程


将算法分解成这样的块,可以使得学习更容易。基本上,我已经使用伪代码概述了这个算法,现在可以回过头来填写细节了。 下面这张图是第二步的笔记,即权重和输入的点积:


只需6步,从头开始编写机器学习算法


4. 从一个简单的例子开始


在整理好算法相关的笔记后,是时候开始在代码中实现它了。


在深入研究一个复杂的问题之前,我想先从一个简单的例子开始。对于感知器,NAND gate(与非门)是一个完美的简单数据集。如果两个输入都为真(1),则输出为假(0),否则输出为真。下面是数据集的一个示例:


只需6步,从头开始编写机器学习算法

现在,有了一个简单的数据集,我将开始实现我在步骤3中概述的算法。最好将这个算法分成块编写并进行测试,而不是试图一次性写完。这样在刚开始时更容易调试。


下面是我在步骤3中概述的算法点积部分的Python代码示例:


只需6步,从头开始编写机器学习算法


5. 使用可信的实现进行验证


我们已经编写了代码,并针对一个小数据集进行了测试,现在是时候扩展到更大的数据集了。为了确保我们的代码在这个更复杂的数据集上正确工作,最好在一个可信的实现上对其进行测试。对于感知器,我们可以使用scikit-learn中的实现。


只需6步,从头开始编写机器学习算法


为了测试代码,我将检查权重。如果正确地实现了算法,我的权重应该与scikit-learn中感知器的权重相匹配。


只需6步,从头开始编写机器学习算法


一开始,我没有得到相同的权重,这是因为我不得不调整scikit-learn Perceptron中的默认设置。我并不是每次都实现一个新的随机状态,而只是一个fixed seed,所以不得不关闭它。shuffling也是这样,也需要关闭它。为了匹配学习率,我将eta0改为0.1。最后,我关闭了fit_intercept选项。我在特征数据集中包含了一个1的虚拟列,所以已经自动拟合了偏差项。


这引出了另一个重要的问题。在验证模型的现有实现时,你需要非常清楚模型的输入。你不应盲目地使用模型,而要总是质疑你的假设,以及每个输入的确切含义。


6. 写下你的过程


这个过程的最后一步可能是最重要的。 你已经完成所有的学习工作,做了笔记,从头开始编写了算法,并将它与可信的实现进行了比较。那么不要让所有这些工作白白浪费掉。编写流程非常重要,原因是:


你会得到更深刻的理解,因为这样做相当于在教别人你刚学到的东西。你可以向潜在的雇主展示它。证明你可以利用机器学习库实现算法是一回事,但如果你可以从头开始实现一个算法,那就更令人印象深刻了。


只需6步,从头开始编写机器学习算法


结论


从头开始编写算法是一种非常有益的体验。这是深入了解模型、构建一个令人印象深刻的项目组合的好方法。


记得要慢慢来,从简单的事情开始吧。最重要的是,一定要记录和分享你的工作。


你也许还想


 PyTorch 中使用深度学习(CNN和LSTM)的自动图像描述

   用卷积神经网络和自注意力机制实现QANet(问答网络)

   【ECCV 2018】谷歌AI超大规模图像竞赛,中国团队获目标检测冠军

欢迎扫码关注:


只需6步,从头开始编写机器学习算法


只需6步,从头开始编写机器学习算法 点击下方 |  | 了解更多

磐创AI:http://www.panchuangai.com/ 智能客服:http://www.panchuangai.com/ TensorFlow:http://panchuang.net 推荐关注公众号:磐创AI

原创文章,作者:fendouai,如若转载,请注明出处:http://panchuang.net/2018/10/04/413c4144b5/

发表评论

电子邮件地址不会被公开。

联系我们

400-800-8888

在线咨询:点击这里给我发消息

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息