刚开始学习机器学习时可能会觉得很难理解。有许多已规定和使用的算法和过程,其中许多算法的工作原理和原因的解释都难以理解。
这可能会让人感到不知所措。
一种可以用来掌握机器学习算法和实践的方法是:从零开始实现它们。这将使你对算法的工作原理以及方法中所有可以参数化或修改以针对特定问题进行调整的微观决策点有深入的理解。
在这篇文章中,你将了解从零开始实现机器学习算法的优点和局限性,以及如何通过完成算法教程来加速这一过程。
通过我的新书《掌握机器学习算法》来启动你的项目,其中包括所有示例的逐步教程和Excel电子表格文件。

按照教程实现机器学习算法
照片由ucdaviscoe拍摄,保留部分权利
实现机器学习算法
从零开始实现机器学习算法可以让你对算法有深入的理解,并获得仅通过应用该方法难以实现的自信和掌控感。
益处
从零开始实现算法的益处包括:
- 理解:你将对算法的工作原理有深刻的理解。你将理解方法的数学描述如何与你的代码操作的向量和数字矩阵相关联。你还将了解所有参数的使用方式、它们的影响,甚至可以深入了解如何进一步参数化以使其专门用于某个问题。
- 起点:你的实现将为更高级的扩展甚至使用该算法的操作系统提供基础。你对算法的深入了解和你的实现可以让你在了解自己代码的时空复杂性方面比使用不透明的现成库更具优势。
- 掌控:实现是你自己的,让你对该方法充满信心,并对它如何作为一个系统实现拥有掌控权。它不再仅仅是一个机器学习算法,而是一种现在在你工具箱中的方法。
获取您的免费算法思维导图

方便的机器学习算法思维导图样本。
我创建了一份方便的思维导图,其中包含60多种按类型组织的算法。
下载、打印并使用它。
还可以独家访问机器学习算法电子邮件迷你课程。
扩展
一旦你实现了一个算法,你就可以探索对实现进行改进。你可以探索的改进示例包括:
- 实验:你可以将算法实现中做出的许多微观决策作为参数公开,并对这些参数的变体进行研究。这可以带来新的见解和算法实现的消除歧义,你可以分享和推广这些见解和消除歧义。
- 优化:你可以通过使用工具、库、不同的语言、不同的数据结构、模式和内部算法来探索提高实现效率的机会。你拥有的关于经典计算机科学算法和数据结构的知识在这类工作中会非常有益。
- 专业化:你可能会探索使算法更特定于某个问题的方法。这在创建生产系统时可能需要,并且是一项宝贵的技能。使算法更具问题特异性还可以提高效率(例如运行时间)和有效性(例如准确性或其他性能度量)。
- 泛化:通过使特定算法更通用可以创造机会。程序员(像数学家一样)在抽象方面拥有独特的技能,你可能会看到该算法如何应用于一类问题的更一般情况或完全其他问题。
实现算法的局限性
从零开始实现算法是我们之前讨论过的一种方法。它是我的小型项目方法论中的项目类型之一。在这种项目类型中,我建议你首先进行自己的文献调查,并研究算法的工作原理,然后再实现它。
这进一步引出了算法描述模板,该模板为你提供了一个工具,说明如何有效地描述机器学习算法,以便你深入理解它。
所有这些问题在于它们非常耗时。研究一个算法涉及查找、阅读和总结大量的书籍、示例代码和研究论文,一个优秀的学术研究人员可能需要几天到几周的时间才能完成。
如果你考虑可能需要实现十几个机器学习算法,你可能需要投入半年以上的时间。
此外,你自己的代码实现可能存在难以发现的错误(这些算法即便有错误也能工作,但会降低性能)。你也可能被数学中必须理解的非直观跳跃所困扰,然后才能在代码中实现该方法。
通过教程缩短流程
你可以通过阅读和完成教程来缩短这个过程。
机器学习算法教程解释了方法,并逐步向你展示如何从零开始实现算法,以便最终你拥有一个可工作的实现。你无需研究和解读教科书和学术论文,即可获得从零开始实现算法的所有好处。
一个好的教程有以下几个原则:
- 循序渐进:指南离散地引导读者一步步地学习材料,并在进展过程中在前一步的基础上进行构建。
- 模块化:实现被分解为模块化部分,这些部分在独立展示和演示后,再组合成整个算法的最终工作演示。
- 缓慢:实现是缓慢的,在每个渐进的步骤中引入一个新事物,以便可以将整体理解为部分的总和。
- 代码:为每个步骤和整个教程提供完整的可运行示例。这很明显,但很容易忘记或因为不测试代码而出错。所有代码都必须解释并且必须能够执行。
- 参考文献:必须为希望深入研究材料的读者提供额外的资源和阅读材料。
- 扩展:完成教程后,必须提供额外的练习建议,如果读者有兴趣进一步实施,可以进行这些练习。必须建议如何集成额外的高级元素或如何解决所提供实现中的问题。
这是一种流行的学习编程中算法和数据结构的方法,但由于其简单性而容易被忽视。因此,好的机器学习算法教程很少。
对于Python程序员来说,一本很好的资源是:《集体智慧编程:构建智能Web 2.0应用程序》。这本书将引导你一步步地从零开始创建许多机器学习系统。
总结
在这篇文章中,你发现了从零开始实现机器学习算法的好处,以及它能为复杂的算法提供的信心和掌控感。
你发现了这种方法的局限性,以及在从教科书和研究论文中研究、提炼和总结算法之前可能需要花费多少时间才能实现它们。
最后,你发现了一种捷径,那就是遵循机器学习算法教程,这些教程会教你如何从零开始实现算法,让你获得益处并免去研究的麻烦。
我目前正在准备一系列关于如何从零开始实现算法的机器学习教程。如果你对此感兴趣,请留言告诉我。
谢谢Jason的这篇精彩文章。
我的问题是,你为什么不使用R或推荐使用R进行算法实现?为什么Python在这项任务中比R更好?
谢谢
Jason,我购买了《从零开始学习机器学习算法》。如何下载书中提到的电子表格。
谢谢
肯
它们包含在你下载的.zip文件中的pdf旁边。
我也是