这篇文章由居住在芝加哥的 Metis 高级数据科学家 Zachariah Miller 撰写。您可以在公司博客上看到该帖子 这里

几天前,我在 Quora 上看到一个问题,归结起来就是:“我怎样才能在六个月内学会机器学习?”我开始写一个简短的答案,但它很快就滚雪球般变成了一场关于我使用的教学方法的大规模讨论,以及我如何从物理书呆子过渡到用机器学习工具带学习数据的物理书呆子科学家。这是一个路线图,突出显示了沿途的要点。

有点不幸的事实

机器学习是一个非常庞大且快速发展的领域。刚开始就会感到不知所措。你很可能已经在你想要的地方加入了 使用 机器学习来构建模型——你知道自己想做什么;但当在互联网上搜索可能的算法时,却发现有太多的选择。我就是这样开始的,并且挣扎了很长一段时间。事后看来,我认为关键是从更上游的地方开始。您需要了解所有各种机器学习算法的“幕后”正在发生什么,然后才能准备好将它们真正应用于“真实”数据。那么让我们深入探讨一下。

数据科学有 3 个总体主题技能集(实际上还有更多,但其中 3 个是根本主题):

  • “纯”数学(微积分、线性代数)
  • 统计(技术上是数学,但它是一个更实用的版本)
  • 编程(通常使用Python/R)

实际上,在机器学习变得有意义之前,你必须准备好思考数学。例如,如果您不熟悉向量空间的思考和矩阵的使用,那么思考特征空间、决策边界等将是一场真正的斗争。这些概念是机器学习分类算法背后的全部思想——所以如果你没有正确思考,这些算法将会显得异常复杂。除此之外,机器学习中的一切都是代码驱动的。要获取数据,您需要代码。要处理数据,您需要代码。要与机器学习算法交互,您需要代码(即使使用其他人编写的算法)。

首先是学习线性代数。麻省理工学院有一门关于线性代数的公开课程。这应该向您介绍线性代数的所有核心概念,您应该特别注意向量、矩阵乘法、行列式和特征向量分解——所有这些都作为机器学习算法运行的齿轮发挥着重要作用。此外,确保您了解欧几里得距离等内容也将是一个重大的积极因素。

之后,微积分应该是你的下一个重点。在这里,我们最感兴趣的是学习和理解导数的含义,以及如何使用它们进行优化。那里有大量很棒的微积分资源,但至少,您应该确保完成单变量微积分中的所有主题以及至少多变量微积分的第 1 节和第 2 节。这是研究梯度下降的好地方——它是许多用于机器学习的算法的好工具,它只是偏导数的应用。

最后,您可以深入了解编程方面。我强烈推荐 Python,因为它受到许多出色的预构建机器学习算法的广泛支持。有大量关于学习 Python 的最佳方法的文章,因此我建议您进行一些谷歌搜索并找到适合您的方法。确保还了解绘图库(对于 Python,从 MatPlotLib 和 Seaborn 开始)。另一个常见的选择是 R 语言。它也得到了广泛的支持,很多人都使用它——我只是更喜欢 Python。如果使用 Python,请首先安装 Anaconda,它是 Python 数据科学/机器学习工具的一个非常好的概要,包括 scikit-learn,这是一个在 Python 可访问的包装器中优化/预构建的机器学习算法的优秀库。

这就是乐趣的开始。此时,您将具备开始查看一些数据所需的背景知识。大多数机器学习项目都有非常相似的工作流程:

  1. 获取数据(网络抓取、API 调用、图像库):编码背景。
  2. 清理/整理数据。这有各种形式。也许您的数据不完整,您该如何处理?也许你有一个日期,但它的形式很奇怪,你需要将其转换为日、月、年。这只需要一些编码背景的练习。
  3. 选择算法。将数据放在合适的位置后,您就可以开始尝试不同的算法。下图是一个 粗糙的 指导。然而,更重要的是,这为您提供了大量的信息供您阅读。你可以查看所有可能的算法的名称(例如 Lasso),然后说:“伙计,根据流程图,这似乎符合我想要做的事情......但我不确定它是什么”,然后跳过到谷歌并了解它:数学背景。
  4. 调整你的算法。这是你的背景数学工作获得最大回报的地方——所有这些算法都有大量的按钮和旋钮可供使用。示例:如果我使用梯度下降,我希望我的学习率是多少?然后你可以回想一下你的微积分,并意识到学习率只是步长,太糟糕了,我知道我需要根据我对损失函数的理解来调整它。因此,然后你调整模型上的所有花哨功能,以尝试获得一个良好的整体模型(用准确度、召回率、精确度、f1 分数等来衡量 - 你应该查看这些)。然后使用交叉验证方法检查过度拟合/欠拟合等(再次查找此方法):数学背景。
  5. 想象一下!这是您的编码背景获得更多回报的地方,因为您现在知道如何绘制绘图以及哪些绘图函数可以做什么。

对于您旅程的这个阶段,我强烈推荐 Joel Grus 所著的《从头开始的数据科学》一书。如果您想单独进行(不使用 MOOC 或训练营),这为大多数算法提供了一个很好的、可读的介绍,并且还教您如何对它们进行编码。他并没有过多地讨论数学方面的问题……只是触及了主题的表面,所以我强烈建议学习数学,然后深入研究这本书。它还应该让您对所有不同类型的算法有一个很好的概述。例如,分类与回归。什么类型的分类器?他的书涉及所有这些内容,并向您展示了 Python 算法的核心。

总体路线图

关键是将其分解为易于消化的部分,并制定实现目标的时间表。我承认这不是最有趣的看待它的方式,因为坐下来学习线性代数并不像计算机视觉那么性感……但这确实可以让你走上正轨。

  • 从学习数学开始(2-3 个月)
  • 纯粹根据您正在使用的语言进入编程教程……除非您有信心编写“常规”代码(1 个月),否则不要陷入编码的机器学习方面
  • 按照教程开始学习机器学习代码。 Kaggle 是一些优秀教程的优秀资源(请参阅泰坦尼克号数据集)。选择您在教程中看到的算法并查找如何从头开始编写它。真正深入其中。按照使用预制数据集的教程进行操作,如下所示:从头开始使用 Python 实现 k 最近邻的教程(1-2 个月)
  • 真正投入到一个(或几个)你热衷的短期项目中,但这并不是超级复杂。不要试图用数据来治愈癌症(还)……也许可以尝试根据他们雇用的演员和预算来预测一部电影的成功程度。也许尝试根据您最喜欢的运动的全明星的统计数据(以及之前所有全明星的统计数据)来预测全明星。 (1+个月)

边注: 不要害怕失败。你在机器学习中的大部分时间将花在试图弄清楚为什么算法没有达到你的预期,或者为什么我得到错误 XYZ……这很正常。坚韧是关键。就去做吧。如果您认为逻辑回归可能有效……请用一小组数据尝试一下,看看效果如何。这些早期项目是一个通过失败来学习方法的沙箱——所以利用它并尝试一切有意义的事情。

然后,如果您热衷于以机器学习为生——博客。创建一个网站,突出显示您从事过的所有项目。展示你是如何做到的。显示最终结果。让它变得漂亮。有很好的视觉效果。使其易于消化。做出一个别人可以学习的产品,然后希望雇主能够看到你所付出的所有努力。

Metis 教授兼职专业发展课程,涵盖机器学习等主题。在这里查看所有课程和地点: https://www.thisismetis.com/professional-development-courses