# 程序员可以入门机器学习

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

在这篇文章中，我想向您展示程序员可以进入机器学习。

我将向您展示学习机器学习就像学习任何其他高科技一样。

我们首先将学习机器学习与学习编程进行比较，这可能是一个更大的挑战。

[![Equation](img/a56b97e87d9d82c2bdbf5c3f8d9e34f6.jpg)](https://3qeqpr26caki16dnhd19sv6by6v-wpengine.netdna-ssl.com/wp-content/uploads/2013/11/equation.jpg)

图像许可 [iwannt](http://www.flickr.com/photos/iwannt/) 保留一些权利

## 设计师想要编码

一位年轻的网页设计师说，假装你是一名设计师。你可以在 Photoshop 或其他东西中进行网页设计，也可以剪掉设计并将它们变成 CSS。你徘徊在程序员身边，也许你有一点编码嫉妒。您认为您可能想学习如何编码。无论是对还是错，你认为 CSS 和 HTML 都是“实际编码”，它都是创造性的表达，编程只是你创造力的另一种媒介或出路。

你跳过 Quora 或 StackOverflow 并问一个类似“_ 我是设计师的问题，我怎样才能学习如何编码？_ “

你会得到遍布地图的答案。你看似经验丰富，专家程序员给你免费的建议，如“学习 ANSI C 和指针”，“学习二进制”，“买一本关于 ASM 的书”，“从 LISP 开始”。也许一位有说服力的沟通者会写下一篇长篇且令人信服的答复，你真的应该购买并阅读 Knuth 的[计算机编程艺术，Vols。 1-3（第 1-3 卷）](http://www.amazon.com/dp/0201485419?tag=inspiredalgor-20)（友情链接）。你接受他的建议，在亚马逊上购买书籍，然后在介绍购买之前获得介绍，讨厌自己不够聪明，放弃学习编码的兴趣，只在 3 个月内重复相同的循环。

发生了什么？建议似乎是一个很好的建议。

问题是建议是回顾性的。建议来自程序员思考他们的技巧以及已经是程序员的人如何能够成为更好的程序员。建议不考虑绝对的初学者，一个感兴趣的业余爱好者想要趾高气扬地看看他们是否想去游泳。

现在我同意，现在世界有点不同了。这个问题已经确定，并且有很好的服务可以解决这个问题，即教人们如何编码。

当然，也许我们学习指针，二进制，ASM 和 LISP，甚至读取 Knuth 的部分（没有人真正读到封面以覆盖正确吗？），但后来才出现。但是你是怎么开始的？我开始一起黑客攻击，尝试，尝试，创造和学习。我后来深入研究技术细节，因为我想创建更大，更好，更强大的程序。我没有从技术细节入手。我认为这种体验对于很多程序员来说可能是相似的，对你来说这样吗？发表评论。

## 程序员想要做机器学习

现在，如果您正在阅读本文，那么您可能是程序员或某种开发人员。想想您对机器学习的兴趣。您是否看过经验丰富的专业机器学习器的一些回复，为您提供有关如何入门的免费建议？

我一直在寻找和阅读这个建议，有些是好的，其中很多都没有。我在下面收集了一些样本：

[学习机器学习需要什么数学技能？](http://programmers.stackexchange.com/questions/178004/what-math-skills-are-required-to-learn-machine-learning)

*   _ 你绝对需要熟悉基本线性代数（操纵向量和矩阵）以及使用对数和指数函数。_
*   _ 如果你想让事情变得“容易”，你需要通过特征向量来了解线性代数。_

[数学的强大背景是 ML 的必备条件吗？](http://stats.stackexchange.com/questions/40808/is-a-strong-background-in-maths-a-total-requisite-for-ml)

*   _ 你确实想要熟悉概率，线性代数，线性规划和多变量微积分。_

[机器学习工作需要哪些技能？](http://programmers.stackexchange.com/questions/79476/what-skills-are-needed-for-machine-learning-jobs)

*   _ 首先，你需要一个体面的 CS /数学背景。 ML 是一个高级主题，因此大多数教科书都假设您具有该背景。_
*   _ 统计，概率，分布式计算和统计。_

那里有一些非常好的建议，但这个建议是否适合绝对的初学者？程序员是否适合将他们的脚趾浸入水中测试温度？

也许人们会问错误的问题。此外，我已经挑选了一些答案，这些答案表明在开始机器学习之前需要数学。我想说的是，初学者将专注于他们没有的东西以及他们不能做的事情。他们甚至可能在尝试之前就放弃了。

我完全同意，对线性代数和概率的强烈掌握将为进入机器学习提供良好的基础。我完全同意[统计学习要素](http://www.amazon.com/dp/0387848576?tag=inspiredalgor-20)（友情链接）是一本关于多层次的大书。我只是不认为对机器学习感兴趣的程序员应该做的第一步是参加数学课程或阅读该领域的密集理论处理。我实际上强烈建议反对它。

## 两个机器学习领域

机器学习有两个方面：

*   **实用机器学习：**这是关于查询数据库，清理数据，编写脚本以转换数据以及将算法和库粘合在一起以及编写自定义代码以从数据中压缩可靠答案以满足困难和错误定义的问题。这是现实的混乱。
*   **理论机器学习**：这是关于数学和抽象和理想化的场景，限制和美观，并告知可能的。这是一个整洁，整洁，从现实的混乱中删除。

没有理论方面，实际方面不能有框架和严谨。没有实践方面，理论方面没有意义或动机。这种二分法是错误的，它确实是一个工具和方程式的海洋，但留在我身边。

作为一名程序员，你可能对实际方面有所偏爱，但你将作为“技术人员”达到极限，并且需要理解理论方面才能有效地即兴创作。你必须阅读算法的数学处理，你必须通过密集的教科书。这就是在该领域做得好的原因。问题是，这是从业者向初学者自由提出的建议，这是理想化的，适合中间人，对初学者不合适。

## 程序员喜欢 Power Tools

我认为对于有经验的程序员来说，将机器学习视为高级编程主题（如线程）（现在留在我身边）是很有用的。

如果你想进入线程，你只需编写一些多线程程序，并了解它可以释放的功能。你犯了各种各样的错误，但是你制作原型的一些东西可以让你看到可能的东西。如果您认为这适合您，您可以阅读书籍并深入了解。

您可以使用现有多线程构造的库，您可以自己编写，您可以深入了解各种线程构造背后的一些更多数学主题。您让您的兴趣驱动您学习，最终您可以可靠地构建和部署生产多线程代码。这是一个过程，而不是一个步骤变化。

显而易见，机器学习是一个更大，更多样化的领域，但是我提倡的一般步骤策略将在未来的帖子中详细说明。

你不是从初学者到运营团队，而是将机器学习系统投入生产。危险区域是真实的。你可以而且将会学到足够的危险。但是，通过掌握编程机器（也是代码审查，同行和导师以及常识）的过程中学到的自律能够限制那些非常真实的危险。

就像学习编程一样，学习机器学习是一个学习不会结束的旅程，掌握真正意味着持续教育。如果你感兴趣的话，学会阅读方程式，将它们变成代码，并编写自己的方法以构建你的问题可能是一路上的休息。

## 资源

如果您想深入思考这个问题，我已经列出了一些资源。它有点深，我相信我们可以产生一些很好的讨论。

*   向上滚动并阅读上面列出的 StackOverflow 问题的一些答案。有些答案会阻止程序员，除非他们知道数学，但还有其他非常令人鼓舞的答案会真正让你振作起来。
*   [为什么成为一名数据科学家可能比你想象的更容易](http://gigaom.com/2012/10/14/why-becoming-a-data-scientist-might-be-easier-than-you-think/)一篇 Gigaom 帖子指的是分析性倾向（如程序员）在数据科学中从零开始并迅速成为具有国际竞争力的一般机会的案例研究。
*   [编程需要数学吗？](http://stackoverflow.com/questions/157354/is-mathematics-necessary-for-programming) 有趣的是，我认为支持和反对的论据是非常相关的，也是一个有用的观点。

这是一篇非常有用的帖子，我对你的想法非常感兴趣。与朋友讨论这个问题，我确实听到了很多关于“技术员”机器学习学徒的危险区域和进展选项。我将在以后的帖子中跟进这两个主题。

你怎么看？在学习编程和程序员学习机器学习之间，我提出的相似性是否有实质内容？