前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何实现机器学习算法

如何实现机器学习算法

作者头像
xixigiggling
发布2018-02-08 10:19:22
6300
发布2018-02-08 10:19:22
举报
文章被收录于专栏:文章翻译文章翻译

在代码中实现一个机器学习算法可以教你很多关于算法和它的工作原理。

在这篇文章中,您将学习如何有效地实现机器学习算法,以及如何最大限度地从这些项目中学习。

AdaBoost机器学习算法教程
AdaBoost机器学习算法教程

实现机器学习算法的好处

您可以使用机器学习算法的实现作为学习应用机器学习的策略。你也可以就此走进机器学习的大门和掌握实现机器学习算法的技能。

算法理解

实现一个机器学习算法将给你一个关于算法如何工作的深刻和实际的理解。这些知识还可以帮助您对算法的数学描述深化理解,即将向量和矩阵看作是数组,以及对这些结构进行转换的计算直觉。

在实现机器学习算法时需要许多微观决策,并且正式算法描述经常缺少这些决策。对这些决策进行学习和参数化能快速的拔升你对一个给定的方法的理解,以至达到中上层次,因为相对较少的人会花时间来实施一些更复杂的算法作为学习练习。

实用技巧

你在动手实现机器学习算法时也正在提升相当重要的技能。诸如掌握算法的技能,掌握可以帮助开发生产系统的技能以及掌握可用于该领域的经典研究手段的技能。

您可以开发的三个技能示例包括:

  • 掌握:实现算法是掌握算法的第一步。当你实现它的时候,你不得不透彻的理解这个算法。您也在创建自己的实验工具,不断的调整以帮助您理解计算的执行,例如通过调试和增加评估运行过程的措施。
  • 生产系统:由于效率和效能的原因需要对算法进行修改,生产系统通常需要定制算法。更好,更快,更少的资源密集型结果最终可以降低成本,增加业务收入,并且手工实现算法可以帮助您提升提供这些解决方案的技能。
  • 文献综述:当你正在进行研究去执行一个算法时。您不得不查找和读取算法的多个规范和形式描述。您也可能找到并编写代码来检查算法的其他实现,以确认您的理解。您正在进行有针对性的研究,并学习如何阅读和实际使用学术出版物。

流程

你能跟着一个流程走,这个流程可以来加速你的学习能力和从零开始手动实现机器学习算法的能力。您实施的算法越多,您掌握算法越快,效率越高,您将开发和定制自己的流程的次数也越多。

实现机器学习算法
实现机器学习算法

您可以使用下面概述的流程。

  1. 选择编程语言:选择要用于实现的编程语言。这个决定可能会影响您可以在实现中使用的API和标准库。
  2. 选择算法:选择要从头开始实现的算法。要尽可能具体。这不仅意味着类和算法的类型,而且还意味着要选择要实现的特定描述或实现。
  3. 选择问题:选择一个规范问题或一组可用于测试和验证算法实现的问题。机器学习算法不是孤立存在的。
  4. 研究算法:找到您可以阅读和学习的算法的论文,书籍,网站,库和任何其他描述。虽然,理想情况下,您希望对算法从哪儿开始有一个关键性的描述,但您将会想要对算法有多个视角。这是很有用的,因为多个视角将帮助您更快速地内化算法描述,克服描述中出现的任何歧义或假设(在算法描述中总是含糊不清)的障碍。
  5. 单元测试:为每个函数编写单元测试,甚至考虑从项目开始的测试驱动开发,以便在实现它们之前,您必须了解每个代码单元的目的和期望。

我强烈建议将算法从一种语言移植到另一种语言,以此作为沿着这条道路快速前进的一种方式。你可以找到很多开源的算法实现,你可以用另一种语言编写评论,图表化,内化和重新实现。

可以考虑在开发时和在开发之后开源源代码,对其进行说明并确保提供了有关如何构建和使用它的说明。该项目将为您正在培养的技能提供展示机会,并可能为希望从机器学习开始的其他人提供灵感和帮助。你甚至可能有幸找到一位对你的工作很感兴趣的程序员来执行审计或代码审查。你所得到的任何反馈将是无价的(即使作为动机),积极寻求它。

扩展

一旦你实现了一个算法,你可以探索改进的实现。您可以探索的一些改进示例包括:

  • 实验:您可以将您在算法实现中做出的许多微观决策公开为参数,并对这些参数的变化进行研究。这可能会产生算法实现的新见解和更少的歧义,您能把这些分享和推广
  • 优化:通过使用工具,库,不同的语言,不同的数据结构,模式和内部算法,您可以探索使实现更高效的机会。传统计算机科学的算法和数据结构知识对于这类工作是非常有益的。
  • 专业化:您可以探索使算法更具针对性的方法。这在创建生产系统时可能是必需的,并且是一项宝贵的技能。使算法更具体的问题也可以导致效率(如运行时间)和功效(如准确性或其他性能指标)的提高。
  • 泛化:可以通过使一个特定的算法更一般化来创建机会。程序员(比如数学家)在抽象方面有着独特的技能,你可以看到算法是如何被应用到更一般的一类问题或其他问题的。

限制

你可以通过动手实现机器学习算法学到很多东西,但是也要记住一些缺点。

  • 冗余:许多算法已经有了实现,一些非常强大的实现已经被全世界成百上千的研究人员和实践者使用。您的实施可能被认为是多余的,这是社区已经投入的重复工作。
  • 错误:用户少的新代码更容易出错,即使是熟练的程序员和单元测试也是如此。使用标准库可以减少算法实现中存在错误的可能性。
  • 非直观的飞跃:由于涉及复杂的数学,一些算法依赖于推理或逻辑中非直观的跳转。不理解这些跳跃的实现是有限的,甚至是不正确的。

很容易评论机器学习算法的开源实现,并在代码审查中引发许多问题。理解实现中编码的非直观效率要困难得多。这可能是思考的陷阱。

在考虑如何将其改变为编程不够优雅,但在计算上更高效之前,您可能会发现从较慢直观的复杂算法实现开始是有益的。

示例项目

一些算法比其他算法更容易理解。在这篇文章中,我想为您提供一些直观的算法建议,您可以从中选择您的第一个机器学习算法从头开始实施。

  • 普通最小二乘线性回归:使用y的二维数据集和模型x。打印每个迭代算法的错误。考虑绘制算法的每次迭代的最佳拟合和预测线,以查看更新如何影响模型。
  • k-最近的邻居:考虑使用二维数据集,甚至可以使用方格纸创建的数据集,以便绘制它们。一旦你可以绘制和预测,你可以绘制为模型所做的每个预测决策创建的关系。
  • 感知器:考虑最简单的人工神经网络模型,非常类似于回归模型。在学习数据集时,您可以跟踪和绘制模型的性能。

概要

在这篇文章中,您了解了手动实现机器学习算法的好处。你了解到你可以通过遵循这种方法理解一个算法,来改进和提升重要的技能。

您学习了一个简单的流程,当你从头开始实施多个算法时,您可以跟着这个流程来并且定制你自己的流程,你学习了三种算法,您可以选择这三种算法作为第一个从头开始实现。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实现机器学习算法的好处
    • 算法理解
    • 实用技巧
    • 流程
    • 扩展
    • 限制
    • 示例项目
    • 概要
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档