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

如何实现机器学习算法

作者头像
CJ
发布2018-02-02 16:21:02
8070
发布2018-02-02 16:21:02

在代码中实现一个机器学习的算法能够使你更加了解该算法以及其工作机理。

在这篇文章中,你将学习如何有效地实现机器学习方面的算法,以及最大限度地从中有所收获。

Maura McDonnell摄,保留部分权利。
Maura McDonnell摄,保留部分权利。

实现机器学习算法的好处

对于如何运用机器学习这一问题,你可以将实现机器学习算法作为一种解决方案。而且你还能够挖掘算法实现方面的相关基础知识以及技能。

算法的理解

实现一个机器学习算法后,你将会对算法是如何工作有一个深刻且实际的印象。通过思考如何将向量和矩阵转化为数组以及这些转化背后的计算直觉,这些知识还能够帮助你理解算法数学描述的内在。

在实现一个机器学习算法时,经常需要许多微观的决策,而这些决策通常会缺少正式的算法描述。对于一个给定的方法,学习以及参数化对应的这些决策能够将你对其的理解上升到中级或者更高级的阶段,因为相对来说,很少有人会花时间将实现一个更复杂的算法作为一种学习方式。

实用技巧

你可以在动手实现机器学习算法时,发展有价值的技能。比如说,掌握算法的技能,帮助开发生产系统的技能,以及学习领域经典研究的技能。

上面三个示例的发展技能如下列出:

  • 掌握:算法的实现是掌握算法的第一步。当你要去实现它的时候,你必须得深刻地理解这个算法。你还得搭建自己的实验环境以帮助你理解持续计算的内在,例如通过调试和添加评估运行过程的措施。
  • 生产系统:由于考虑到效率和效果,生产系统通常需要定制算法,所以需要对算法进行一定的修改。更好,更快,更少的资源密集型结果最终可以降低成本,增加业务收入,并且亲手实现算法可以帮助你获得提供这些解决方案的技能。
  • 文献综述:当你实现一个算法时,你需要搜索。你不得不查找以及阅读算法的多个规范和正式描述。你也可能找到并编写代码来检查算法的其他实现,以验证你的理解。你正在进行有针对性的研究,并学习如何阅读和实际运用上关于该研究的出版物。

处理

你可以按照以下的流程,从头开始强化以及实现一个机器学习算法。你实现的算法越多,你习得一个算法的速度会越快且越有效率,而且你将对开发以及定制自己流程更加得心应手。

Nic摄,保留部分权益
Nic摄,保留部分权益

你可以使用下面概述的过程:

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

我强烈建议将算法从一种编程语言移植到另一种编程语言,以此作为在这条道路上快速前进的一种方式。你可以找到很多算法的开源实现代码,然后你就可以用另一种语言来重温这些代码、画图、内部化和重新实现。

考虑在编写代码的同时,或者在编写完成后,进行开源。对代码进行良好注释并确保提供有关如何构建和使用它的说明。这个项目能够为你正在学习的技能提供市场,甚至可以会为其他正准备进入机器学习领域的人提供灵感和帮助。如果你够幸运的话,你还可能找一个对该项目感兴趣的同行程序员来帮你做代码的审查。任何反馈都是无价的,你应该积极地去寻求它。

扩展

一旦你已经实现了一个算法,你可以开始探索如何去改善这个实现。一些你可以探索的改进包括:

  • 实验:你可以将你在算法实现中做出的许多微观决策公开为参数,并对这些参数的变化进行研究。这可能会让你在分享和推广的算法实现的同时,获得新见解和消除一些歧义。
  • 优化:通过使用工具,库,不同的语言,不同的数据结构,模式和内部算法,你将有机会使你的算法实现变得更高效。你在经典计算机科学学科中的算法以及数据结构的相关基础知识将能在这里帮助你。
  • 特殊化:你可以探索如何使得算法对于一个问题更具有针对性。这在创建生产系统时可能是必需的,并且是一项宝贵的技能。使算法能够解决更具体的问题可以提升效率(如运行时间)和功效(如准确性或其他性能指标)。
  • 通用化:将一个特定的算法变得一般化通常可以创造很多机会。程序员(比如数学家)在抽象方面有着独特的技能,你完全可以看到一个算法是如何被应用到更一般的一类问题或其他问题的。

限制

你可以通过亲手实现机器学习算法学到很多东西,但是也要记住这不是一种完美的方式,它也有一些缺点。

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

对机器学习算法的开源实现进行一些评论是很容易,在代码审查中也可能发现许多问题。但是理解已经实现的代码是不直观的,且效率很低。甚至可能让你误入歧途。

你可能会发现从一个复杂算法较慢但是直观的实现来入手对你自己更有帮助,在那之后你才应该考虑如何使得实现更加优雅且更加有效。

示例项目

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

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

总结

在这篇文章中,你了解了亲手实现机器学习算法的好处。你可以理解一个算法,并且通过遵循这个学习路径,改进和发展有价值的技能。

你学习了一个简单的过程,按照它,你可以从头开始实现多个算法。并且你可以在三个推荐的算法中选择一个作为你的机器学习的起点,然后考虑从头开始实现它。

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