# 程序员应该入门机器学习

> 原文： [https://machinelearningmastery.com/programmers-should-get-into-machine-learning/](https://machinelearningmastery.com/programmers-should-get-into-machine-learning/)

程序员应该参与机器学习领域，因为他们具有独特的技能，可以做出巨大的贡献。

在这篇文章中，您将了解到作为一名程序员，您很容易忽视您的技能并高估您不了解的内容。您将了解程序员几乎立即开始在机器学习领域产生影响的四个机会。

## 专业发展实践

专业软件开发（或软件工程，如果你喜欢这个术语）的学科是关于如何设计，实现和维护解决问题的可靠软件系统。您作为开发人员的技能很有价值，您可以将它们应用到机器学习领域。

这里有些例子：

*   **结构**：开发软件时，可以构建项目。例如，有一个源代码目录，一个用于资产，一个用于文档，如果您使用的是编译语言，则您有一个二进制文件目录。为软件开发项目使用定义良好的结构是一种最佳实践，它引入了支持协作的分离和一致性。项目中的任何人都知道在哪里为项目做出贡献，并且当跨项目采用相同的约定时，组织中的任何人都可以快速浏览项目。
*   **自动化**：在软件项目中，您使用构建系统来自动执行项目的常见任务。无论您使用的是 Make，Ant，Rake 还是任何类似的构建系统，都可以自然地将常见的开发任务放在一起，将它们作为可以重复突发的目标，并组织成具有越来越大的杠杆作用的层次结构。
*   **可重复性**：应用于项目的基于约定的结构以及使用构建系统实现的自动化允许给定项目中的任务 100％可重复。任何人都可以检查项目并构建它。任何人都可以关注发布过程并构建二进制文件或部署网站更新。在开发软件系统时，可重复性是默认设置。
*   **可测试性**：一个类有一个责任，一个函数做一件事。简化系统可以创建可以测试的小型模块化代码。您编写自动化测试作为质量控制的衡量标准，以明确地证明代码执行其设计目的并检测您在进行更改时引入的任何回归。
*   **可维护性**：上述行为导致了专业软件开发中可维护性最重要的因素之一。一个成功完成的软件项目将花费大部分时间用于维护。开发只是软件整体寿命的一小部分，维护是常态。我们通过使软件结构化，自动化，可重复和可测试来使软件可维护。

[![software development](img/fbcade3d36a1ebc0f9e40380c0e7a2d8.jpg)](https://3qeqpr26caki16dnhd19sv6by6v-wpengine.netdna-ssl.com/wp-content/uploads/2013/12/software-development.jpg)

照片归 [xJason.Rogersx](http://www.flickr.com/photos/restlessglobetrotter/128345994/sizes/o/) ，保留一些权利

这些专业软件开发实践可以带到机器学习领域。它们可以在机器学习项目的早期阶段发挥最大作用。三个例子包括：

*   当数据从原始源导出为适合给定学习方法的形式时。该过程可以是自动化和可重复的，并且导出的数据存储在与原始源分开的目录结构中。
*   当测试不同的机器学习方法时，看哪个是最适合该问题的。方法的测试可以是自动化的，因此结果是可重复的，并且如果在测试协议中发现（何时）错误，则可以重复。
*   选择并实现方法以解决复杂问题时。它可以根据问题进行定制，并实现为可测试和记录良好，以确保其满足项目的更广泛要求，包括非功能性要求，如表现验收标准和算法准确率。

## 生产水平实现

一种新颖的机器学习方法通​​常由机器学习研究人员或研究人员团队提出。新颖方法通常用算法的原型或演示实现来呈现。

问题是代码是由研究人员编写的，他们可能会或可能不会接受软件开发学科的训练。然而，实现的目标是提供该方法的工作原型。

如果企业或其他组织希望利用其中一种电动工具，他们的选择是有限的。他们可能决定在他们的生产系统中调整和运行原型代码。研究代码通常在没有明显许可的情况下发布，或者有时是许可的开源许可。为了演示目的，代码将被编写以解决玩具问题，并且系统的编程质量可能是变化的，尽管在某些情况下可能仅足以证明概念证明。

唯一真正的选择是使用良好的软件工程实践重新实现该方法。开发人员有机会实现需求强大的机器学习方法的生产级实现。除了获得这方面的工作之外，您还可以开发生产质量的软件工具，库和 API，组织可以使用它们来解决他们的问题。

## 得到消息

机器学习方法以研究语言呈现，例如干研究论文，学术报告，专着，讲座和教科书。有些电动工具可以远离主流软件开发，甚至主流应用机器学习。这是事实。从研究到运营的有用方法的迁移可能需要数十年的时间。

对于了解某些机器学习的程序员来说，有机会了解哪些方法有效，并有助于宣传。您必须学习足够的知识才能识别这些宝石，并有想象力来考虑这些方法在商业或在线应用的位置，并且能够沟通甚至实现这些想法。你甚至不需要成为开发人员来接受这个。

## 将机器学习应用于应用程序

作为程序员，您已经知道如何为用户创建应用程序。它们可能是网络，移动或桌面上的应用程序，甚至是更具异国情调的东西。也许像你这样的程序员最大的机会是将机器学习方法放在你正在开发的应用程序中。

这并不像你最初认为的那么大和可怕。请记住，机器学习方法可以解决特定的决策问题。结合机器学习意味着识别应用程序中的复杂问题，可以通过机器学习适当地解决，或者更有可能围绕合适的问题构建应用程序。这也意味着您需要学习足够的机器学习才能实现这一目标，但您已经开始了这一过程。

在这篇文章中，您了解到程序员应该进入机器学习，因为程序员具有独特的技能，可以做出巨大的贡献。程序员可以对机器学习领域做出的贡献包括：

*   将专业软件开发实践引入机器学习项目。
*   构建机器学习方法的生产级实现。
*   了解新颖的机器学习方法
*   将机器学习方法应用于应用程序

在实验和测试机器学习算法时，您认为哪些软件开发实践可以产生重大影响？发表评论。