# 你这样做是错的。为什么机器学习不必如此困难？

> 原文： [https://machinelearningmastery.com/youre-wrong-machine-learning-not-hard/](https://machinelearningmastery.com/youre-wrong-machine-learning-not-hard/)

使用自下而上的方法教授数学，物理学甚至计算机科学等技术主题。

这种方法涉及以合理的方式在研究领域中列出主题，其复杂性和能力自然发展。

问题是，人类不是执行学习计划的机器人。我们需要动力，兴奋，最重要的是，需要将主题与实际结果联系起来。

我们每天使用的有用技巧，如阅读，驾驶和编程，都不是通过这种方式学习的，实际上是使用倒置自上而下的方法学习的。这种自上而下的方法可以直接用于学习技术科目，例如机器学习，这可以使你的工作效率提高很多，并且很有趣。

在这篇文章中，您将发现自上而下和自下而上学习技术材料的方法之间的具体差异，以及为什么这是从业者应该用来学习机器学习甚至相关数学的方法。

阅读这篇文章后，你会知道：

*   自下而上的方法用于大学教授技术科目及其问题。
*   人们如何以自上而下的方式学习阅读，驾驶和编程，以及自上而下的方法如何运作。
*   机器学习甚至数学的框架使用自上而下的学习方法以及如何开始作为从业者快速进步。

让我们开始吧。

![You're Doing it Wrong. Why Machine Learning Does Not Have to Be So Hard](img/5dcaecc7008e239d07ee0699460e60ca.jpg)

你这样做是错的。为什么机器学习不必如此困难
[popofatticus](https://www.flickr.com/photos/barretthall/2482752319/) 的照片，保留一些权利。

## 概观

这是一篇重要的博文，因为我认为它可以帮助你摆脱自下而上的大学式学习机器学习的方式。

这篇文章分为七个部分;他们是：

1.  自下而上学习
2.  学习阅读
3.  学开车
4.  学习编码
5.  自上而下的学习
6.  学习机器学习
7.  学习数学

## 自下而上学习

参加一个研究领域，如数学。

有一种合理的方式可以在数学中列出相互建立的主题，并通过技能，能力和理解的自然进展来引导。

问题是，这种合乎逻辑的进展可能只对那些已经在另一方并且能够直观了解主题之间关系的人有意义。

大多数学校都是围绕这种自下而上的自然进步而建立的。这种方式教授了许多技术和科学研究领域。

回想一下高中或本科学习以及您可能已经完成的基本领域：例如：

*   数学，如上所述。
*   生物学。
*   化学。
*   物理。
*   计算机科学。

考虑材料是如何布局的，逐周，逐学期，逐年。自下而上，合乎逻辑的进展。

问题是，通过材料的逻辑进展可能不是学习材料以提高生产率的最佳方式。

我们不是执行学习计划的机器人。我们是情绪化的人类，需要动力，兴趣，关注，鼓励和结果。

您可以自下而上地学习技术科目，并且一小部分人确实喜欢这种方式，但这不是唯一的方法。

现在，如果您已完成技术主题，请回想一下您如何实际学习它。我打赌它不是自下而上的。

## 学习阅读

回想起;你是怎么学习阅读的？

我儿子开始读书了。没有考虑太多，这里是他使用的一般技术（真的是学校和我们作为父母）：

*   从阅读开始，以产生兴趣和显示好处。
*   获取字母表并发出正确的声音。
*   记住最频繁的单词，他们的声音，以及如何拼写它们。
*   学习“拼出单词”启发式来处理未知单词。
*   在监督下阅读书籍。
*   无需监督即可阅读书籍。

重要的是，他不断地知道为什么阅读很重要，与他想要做的非常有形的事情有关，例如：

*   阅读电视节目的字幕。
*   阅读他喜欢的主题的故事，如星球大战。
*   我们外出时阅读标志和菜单。
*   所以......

同样重要的是，他得到他可以跟踪的结果，并且他可以看到改进。

*   更大的词汇量。
*   更流畅的阅读风格
*   书籍越来越复杂。

以下是他没有学会阅读的内容：

*   词类型的定义（动词，名词，副词等）
*   语法规则。
*   标点规则。
*   人类语言理论。

## 学开车

你开车吗？

如果你不这样做很酷，但大多数成年人都是出于必要。社会和城市设计围绕个人移动性而建。

你是怎么学会开车的？

我记得有些书面测试，也许还有计算机上的测试。虽然我很有可能，但我没有为他们学习的记忆。这就是我记得的。

我记得雇用一名驾驶教练并开始上课。每节课都很实用，在车上练习我需要掌握的技能，驾驶车辆进行交通。

这是我没有和我的驾驶教练一起学习或讨论的内容：

*   汽车的历史。
*   内燃机理论。
*   汽车常见的机械故障。
*   汽车的电气系统。
*   交通流量理论。

直到今天，我还是设法在没有任何关于这些主题的知识的情况下安全驾驶。

事实上，我从未期望学习这些主题。我没有必要或兴趣，他们不会帮助我实现我想要和需要的东西，这是安全和轻松的个人移动性。

如果汽车坏了，我会打电话给专家。

## 学习编码

我开始编程时不知道编码或软件工程的含义。

在家里，我搞乱了 Basic 中的命令。我在 Excel 中乱用命令。我修改了电脑游戏。等等。好玩。

当我开始学习编程和软件工程时，它在大学里，而且是自下而上的。

我们开始：

*   语言理论
*   数据类型
*   控制流程结构
*   数据结构
*   等等

当我们开始编写代码时，它就在命令行上，并且存在编译器问题，路径问题以及与实际学习编程无关的一系列问题。

_**我讨厌编程。**_

快进几年。不知何故，我最终开始在一些受用户重视的复杂系统上担任专业软件工程师。我真的很擅长，我喜欢它。

最后，我做了一个课程，展示了如何创建图形用户界面。另一个展示了如何使用套接字编程让计算机相互通信。另一个是关于如何使用线程同时运行多个事物。

我把枯燥的东西与我真正喜欢的东西联系起来：制作可以解决问题的软件，其他人可以使用。我把它连接到重要的东西上。它不再是抽象和深奥的。

至少对我来说，像我这样的许多开发人员，他们都教错了。他们真的做到了。而且浪费了多年的时间，精力和结果/成果，像我这样热情，无时间的学生可以投入他们真正热爱的事情。

## 自上而下的学习

自下而上的方法不仅仅是教授技术主题的常用方法;它看起来是唯一的方式。

至少在你考虑如何实际学习之前。

大学课程的设计者，他们学科领域的大师，正在努力提供帮助。他们正在铺设所有东西，通过他们认为可以帮助您获得所需技能和能力的材料（希望）为您提供合理的进展。

正如我所提到的，它可以为一些人工作。

它对我不起作用，我希望它对你不起作用。事实上，我见过的很少有程序员通过计算机科学课程非常擅长他们的工艺，或者如果他们这样做，他们在家里学习，单独学习，攻击侧面项目。

另一种选择是自上而下的方法。

**翻转传统方法。**

不要从定义和理论开始。相反，首先将主题与您想要的结果相关联，然后展示如何立即获得结果。

制定一个专注于实现获得结果的过程的程序，根据需要深入到某些领域，但总是在他们需要的结果的上下文中。

### 那不一样

这不是传统的道路。

如果采取这种方式，请注意不要使用传统的思维方式或比较方法。

责任在你身上。没有系统可以归咎于。你停下来时才会失败。

*   **迭代**。通过更深入的理解，多次重新讨论主题。
*   **不完美**。结果可能在开始时很差，但随着实践的改善。
*   **需要发现**。学习器必须对持续学习和发现持开放态度。
*   **需要所有权**。学习器负责改进。
*   **需要好奇心**。学习器必须注意他们感兴趣的内容并遵循它。

### 有危险

说真的，我听说过“_ 专家 _”多次说这句话，说：

> 在使用此技术之前，您必须首先了解该理论，否则您无法正确使用它。

我同意结果在开始时是不完美的，但改进甚至专业知识不仅要来自理论和基础。

如果您认为初学者程序员不应该将更改推向生产并进行部署，那么您肯定必须相信初学者机器学习从业者会受到同样的限制。

必须证明技能。

必须赢得信任。

无论如何获得技能，都是如此。

### 你是技术员

真！？

这是另一个“_ 批评 _”我已经看到了这种学习方法。

究竟。我们希望成为技术人员，在实践中使用工具来帮助人而不是研究人员。

您不需要涵盖所有相同的理由，因为您有不同的学习目标。虽然你有一个可以整合抽象知识的环境，但你可以稍后回过头来学习任何你喜欢的东西。

工业界的开发人员不是计算机科学家;他们是工程师。他们是该工艺的骄傲技术人员。

### 高效，有效，有趣的学习方式

这些好处远远超过了学习这种方式的挑战：

*   你直接去想要的东西并开始练习。
*   你有一个连接更深层知识甚至理论的背景。
*   您可以根据您在主题中的目标有效地筛选和过滤主题。

它更快。

这更有趣。

而且，我打赌它会让你变得更好。

你怎么会更好？

因为主题在情感上与你联系在一起。您已将其与对您重要的结果或结果联系起来。你被投资了。你有明显的能力。我们都喜欢我们擅长的东西（即使我们对我们有多好有一点色盲），这会激发动力，热情和激情。

单热情的学习器将直接吹过原教旨主义者。

## 学习机器学习

那么，你是如何找到机器学习的主题的呢？

说真的，请在下面的评论中告诉我你的方法。

*   你正在自学大学课程吗？
*   你在这样的课程上模拟你的学习吗？

或者更糟：

您是否遵循自上而下的方式，但充满了内疚，数学嫉妒和不安全感？

你不是一个人;我每天都会在这个网站上帮助初学者看到这一点。

为了连接点，我强烈建议您使用自上而下的方法学习机器学习。

*   不要从前体数学开始。
*   不要从机器学习理论开始。
*   不要从头编写每个算法。

一旦你有了这种抽象知识的联系，这一切都可以在以后进一步完善和加深你的理解。

1.  首先，学习如何通过使用免费且易于使用的开源工具的固定框架来解决非常简单的预测性建模问题。
2.  在许多小项目上练习并慢慢增加其复杂性。
3.  通过建立公共投资组合来展示您的工作。

我已多次写过这种方法;请参阅帖子末尾的“_ 进一步阅读 _”部分，了解如何开始使用自上而下的机器学习方法。

在大学中根深蒂固的“专家”会说这很危险。别理他们。

世界级的从业者会告诉你，这是他们学习和继续学习的方式。为他们建模。

记得：

*   你通过练习阅读而不是通过学习语言理论来学习阅读。
*   你学会了驾驶练习，而不是研究内燃机。
*   你通过练习编码而不是通过研究可计算性理论来学习编码。

您可以通过练习预测性建模来学习机器学习，而不是通过学习数学和理论。

这不仅是我学习和继续练习机器学习的方式，而且它已经帮助了成千上万的学生（以及这个博客的数百万读者）。

## 学习数学

不要止步不前。

当你想要或需要在机器学习的数学支柱上拉开帷幕时，如线性代数，微积分，统计，概率等等，可能会到来。

您可以使用完全相同的自上而下方法。

选择一个对您而言重要的目标或结果，并将其用作镜头，过滤或筛选主题，以学习和学习获得结果所需的深度。

例如，假设您选择线性代数。

目标可能是修改 SVD 或 PCA。这些是用于数据投影，数据缩减和特征选择类型任务的机器学习的方法。

自上而下的方法可能是：

1.  在高级库中实现该方法，例如 scikit-learn 并获得结果。
2.  在较低级别的库（如 NumPy / SciPy）中实现该方法并重现结果。
3.  在 NumPy 或 Octave 中使用矩阵和矩阵运算直接实现该方法。
4.  研究和探索所涉及的矩阵算术运算。
5.  研究和探索所涉及的矩阵分解操作。
6.  用于近似矩阵的特征分解的研究方法。
7.  等等…

目标提供了背景，您可以让您的好奇心定义学习的深度。

以这种方式绘制，学习数学与编写编程，机器学习或其他技术主题中的任何其他主题没有什么不同。

它非常高效，而且非常有趣！

## 进一步阅读

如果您希望深入了解，本节将提供有关该主题的更多资源。

*   [我如何开始？](https://machinelearningmastery.com/start-here/#getstarted)
*   [程序员机器学习](https://machinelearningmastery.com/machine-learning-for-programmers/)
*   [机器学习掌握方法](https://machinelearningmastery.com/machine-learning-mastery-method/)

## 摘要

在这篇文章中，您发现了自上而下和自下而上学习技术材料的方法之间的具体区别，以及为什么这是从业者应该和确实用来学习机器学习甚至相关数学的方法。

具体来说，你学到了：

*   自下而上的方法用于大学教授技术科目及其问题。
*   人们如何以自上而下的方式学习阅读，驾驶和编程，以及自上而下的方法如何运作。
*   机器学习甚至数学的框架使用自上而下的学习方法以及如何开始作为从业者快速进步。

你有任何问题吗？
在下面的评论中提出您的问题，我会尽力回答。