如何实现机器学习

如何实现机器学习,要开发ML应用程序,您必须决定用于开发的平台、IDE和语言。有几种选择。其中大部分都可以很容易地满足您的需求,因为它们都提供了到目前为止讨论的AI算法的实现。

如果您正在独自开发ML算法,则需要仔细理解以下方面:

  • 您选择的语言—这本质上是您对ML开发支持的语言之一的熟练程度。

  • 您使用的IDE——这将取决于您对现有IDE的熟悉程度和您的舒适度。

  • 开发平台——有几个平台可供开发和部署。其中大部分都是免费使用的。在某些情况下,您可能需要支付超出一定使用量的许可费。这里有一个简短的选择语言、ide和平台的列表,供您随时参考。

语言的选择

下面是支持ML开发的语言列表:

这个清单并不全面;然而,它涵盖了机器学习开发中使用的许多流行语言。根据您的舒适程度,为开发选择一种语言,开发您的模型和测试。

IDE

下面是支持ML开发的ide列表:

  • R工作室
  • Pycharm
  • iPython / Jupyter Notebook
  • Julia
  • Spyder
  • Anaconda
  • Rodeo
  • Google –Colab

上面的列表并不全面。每一个都有它自己的优点和缺点。鼓励读者在缩小到一个ide之前尝试这些不同的ide。

平台

下面是可以部署ML应用程序的平台列表:

  • IBM
  • 微软Azure
  • 谷歌云
  • 亚马逊
  • Mlflow

同样,这个列表也不是详尽的。我们鼓励读者注册上述服务,并亲自试用。

如何实现一个机器学习算法

在代码中实现机器学习算法可以教会您很多关于算法及其工作原理的知识。
在这节中,您将学习如何有效地实现机器学习算法,以及如何最大限度地从这些项目中学习。

实现机器学习算法的好处

您可以使用机器学习算法的实现作为学习应用机器学习的策略。您还可以在算法实现方面开拓出一个利基和技能。

算法的理解
实现机器学习算法将使您对算法的工作原理有一个深刻而实用的了解。这些知识还可以帮助您通过将向量和矩阵视为数组,以及这些结构上的转换的计算直觉,将算法的数学描述内在化。

在实现机器学习算法时,需要进行大量的微观决策,而这些决策常常在正式的算法描述中缺失。学习和参数化这些决策可以使您快速地达到对给定方法的中级和高级水平的理解,因为很少有人会花时间实现一些更复杂的算法作为学习练习。
如何实现机器学习

实用的技能
当您手工实现机器学习算法时,您正在开发有价值的技能。掌握算法等技能,有助于开发生产系统的技能,以及可用于该领域经典研究的技能。

你可以培养的三个技能例子如下:

  • 掌握:实现算法是掌握算法的第一步。当您实现算法时,您必须深入理解它。您还创建了自己的实验室进行修补,以帮助您内部化它随着时间的推移执行的计算,例如调试和添加评估运行过程的度量。

  • 生产系统:生产系统通常需要定制算法的实现,因为出于效率和有效性的原因,需要对算法进行更改。更好、更快、更少资源密集型的结果最终可以带来更低的成本和更大的商业收益,手工实现算法可以帮助您开发交付这些解决方案的技能。

  • 文献综述:在实现算法时,您正在执行研究。您必须定位并读取算法的多个规范和形式描述。您还可能查找并编写代码检查算法的其他实现,以确认您的理解。

了解过程
有一个过程,你可以遵循,以加快你的学习能力,并实现一个机器学习算法手工从零开始。你实现的算法越多,你得到它的速度就越快,效率就越高,你就会开发和定制你自己的过程越多。

您可以使用下面列出的流程。

  • 选择编程语言:选择要用于实现的编程语言。这个决定可能会影响您可以在实现中使用的api和标准库。
  • 选择算法:选择要从头实现的算法。尽可能具体。这不仅意味着类和算法的类型,还意味着选择要实现的特定描述或实现。
  • 选择问题:选择一个或一组可以用来测试和验证算法实现的规范问题。机器学习算法并不是孤立存在的。
  • 研究算法:定位论文,书籍,网站,图书馆和任何其他描述的算法,你可以阅读和学习。尽管理想情况下,您希望对算法有一个关键的描述,您希望对算法有多个视角。这是有用的,因为多角度将帮助您更快地内部化算法描述,并克服描述中产生的任何歧义或假设带来的障碍(在算法描述中总是存在歧义)。
  • 单元测试:为每个函数编写单元测试,甚至从项目开始就考虑测试驱动开发,这样您就必须在实现每个代码单元之前了解它们的目的和期望。

我强烈建议将算法从一种语言移植到另一种语言,作为沿着这条道路快速前进的一种方式。您可以找到许多算法的开源实现,您可以用另一种语言编写代码审查、图表、内部化和重新实现这些算法。

在开发代码和开发代码之后,考虑将代码开源。很好地注释它,并确保它提供了关于如何构建和使用它的说明。该项目将为您正在开发的技能提供市场营销,并可能为其他希望开始机器学习的人提供灵感和帮助。您甚至可能幸运地找到一位对执行审计或代码评审非常感兴趣的程序员同行。你得到的任何反馈都是无价的(即使是作为动力),积极地去寻找它。

扩展
一旦您实现了一个算法,您就可以研究如何对实现进行改进。你可以探索一些改进的例子包括:

  • 实验:您可以将算法实现中所做的许多微观决策公开为参数,并对这些参数的变化进行研究。这可以带来新的见解,并消除算法实现的歧义,您可以共享和促进。
  • 优化:通过使用工具、库、不同的语言、不同的数据结构、模式和内部算法,您可以探索提高实现效率的机会。在这类工作中,对经典计算机科学的算法和数据结构的知识非常有用。
  • 专门化:您可能会探索使算法更适合于某个问题的方法。在创建生产系统时可能需要这样做,这是一项宝贵的技能。使算法更具体地解决问题还可以提高效率(如运行时间)和效率(如精度或其他性能度量)。
  • 泛化:可以通过使特定算法更一般化来创造机会。程序员(如数学家)在抽象方面具有独特的技能,您可能能够看到如何将该算法应用于一类问题或其他问题的更一般的情况。

限制
通过手工实现机器学习算法,您可以学到很多东西,但是也有一些缺点需要记住。

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

很容易对机器学习算法的开源实现进行评论,并在代码评审中提出许多问题。要理解实现中编码的非直观效率要困难得多。这可能是一个思维陷阱。

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

示例项目
有些算法比其他算法更容易理解。在这篇文章中,我想对直观算法提出一些建议,您可以从中选择要从头实现的第一个机器学习算法。

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

总结
在这节中,您学习了手工实现机器学习算法的好处。您了解到您可以通过遵循这条路径来理解算法、进行改进并开发有价值的技能。

您学习了一个简单的过程,在从零开始实现多个算法时,您可以遵循它并自定义它。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程