程序员初学机器学习的四种方式学习机器学习的路径多种多样，大多数人倾向于从理论开始。如果你是一名程序员，那么你已经掌握了将问题拆解为组成部分以及设计小型项目原型的能力。这些技能不仅能帮助你学习新技术、类库和方法，也是职业程序员的核心素养。现在，你可以将这些能力迁移到机器学习的初学阶段。要想有效地学习机器学习，理论固然重要，但你可以利用对技术的兴趣及对知识的渴望，激励自己从实际案例入手，然后再深入算法背后的数学原理。通过本文，你可以了解到程序员初学机器学习的四种方式。这是专为技术人员设计的实用方法，以实验为依据。你需要进行调研并完成实验，才能建立起自己的感性知识。这四种方法分别是：学习一个机器学习工具学习一个机器学习数据集学习一个机器学习算法实现一个机器学习算法建议你通读这些方法的策略，然后选择最适合自己的一种，并有选择性地执行。1. 学习一个机器学习工具选择一个你喜欢的工具或类库，然后深入学习如何使用它。我建议从一个自带数据预处理工具、机器学习算法并且能呈现结果的工作平台开始学习。熟悉这样一个工作平台能让你更掌握机器学习从头到尾的整个过程，这比单纯学习一个特定的数据处理技术或算法更有价值。或者，如果你感兴趣的是特定技术或某一类技术，可以利用这个机会深入学习提供这些方法的类库或工具。掌握提供这些技术的类库，能帮助你更好地掌握相应的技术。一些你可以采取的策略包括：比较一些可选的工具。总结你选定的那个工具的能力。阅读并总结这个工具的文档。完成学习这个工具的文字或视频教程，并且总结每个教程中的重点收获。制作关于这个工具的功能或特性的教程。选一些你不太了解的功能，写下得到结果的过程，或者录制一个五分钟左右的截屏视频演示如何使用。一些值得考虑的工作平台有：R、Weka、scikit-learn、waffles 和 orange。2. 学习一个机器学习数据集选择一个数据集，然后深入地理解它，发掘究竟哪类算法最适合处理它。我建议选择一个中等大小的、内存能放下的、可能被很多人研究过的数据集。现在有很多非常好的包含数据的类库，你可以浏览它们并从中选择。你的目的是尝试理解这个数据集背后的问题、它的结构，以及哪些种类的解决方法最适合这个问题。使用一个机器学习或统计的工作平台来研究这个数据集。这样你能专心解答关于这个数据集你要研究的问题，而不是分心去学习某个特定的技术或如何写代码来实现它。一些可以帮助你学习实验性的机器学习数据集的策略有：清晰地描述这个数据集所呈现的问题。用描述性的统计数据来总结数据。描述你从数据中观察到的结构，并且提出对数据间关系的假设。简单地在这个数据集上测试一些常用的机器学习算法，然后发掘哪些类别的算法比其他的表现好。调整表现好的算法的参数，然后发掘什么算法及算法参数设置在这个问题上表现得好。你可以从这些包含高质量数据集的库中选择：UCI ML Repository、Kaggle 和 data.gov。3. 学习一个机器学习算法选择一个算法，深入理解它，发掘什么样的参数设置在不同数据集上都稳定。我建议从一个中等复杂度的算法开始学起。选一个已经被人充分理解了的、有许多可选的开源实现、并且需要你探索的参数数目较少的算法。你的目的是建立有关这个算法在不同问题和不同参数设定下表现如何的直觉。使用一个机器学习平台或类库。这样能让你把这个算法当成一个“系统”，专心研究它的表现，而不是分心研究数学公式描述或相关论文。一些学习你选定的机器学习算法时可采取的策略有：总结系统的参数，及它们对算法可能有什么影响。选一系列适合这个算法、可能导致不同表现的数据集。选择一些你认为能导致不同结果的算法的参数设置，然后列出你认为系统可能的表现。考虑在迭代过程或不同时间段内能被监察到的算法表现。用一个或多个数据集、算法设置和结果衡量方式来设计解决特定问题的小实验，并且汇报结果。你可以学简单点，也可以学复杂点。想多学一点的话，你可以探索所谓的启发式规则或经验法则来使用算法，并且以实验为依据来展示它们好不好用，及如果好用的话在什么条件下它们与成功的结果有关联。一些你可以考虑学习的算法有：最小平方线性回归、逻辑回归、K 最近邻分类算法、感知器算法。4. 实现一个机器学习算法选一个算法，然后选一个编程语言来实现它，或者把一个已有的实现移植到你选定的编程语言上。你应选择一个中等复杂度的算法来实现。我建议仔细研究你想要实现的算法，或选择一个你喜欢的已有实现然后把它移植到你选定的编程语言。从头开始实现一个算法，是学习那些关于把算法描述转换成一个可行的系统的过程中必须要做的无数的小决定的好方法。在不同算法上重复这个过程，很快你就能对读懂论文和书里面算法的数学描述有感觉了。五个能帮助你从头开始实现机器学习算法的策略有：从代码移植开始。 把开源的算法实现从一种语言移植到另外一种语言能教会你算法是如何实现的，并且你能拥有并掌握它。这是开始学习的最快的途径，非常值得推荐。从一个算法描述开始。 然后采集一些其他的描述来帮助你排除歧义并且理解主要的那个参考材料。多读该算法的不同实现。 学习不同程序员是如何理解算法描述并且如何把它转换成代码的。不要陷入过炫的方法太深。 许多机器学习算法的内核用的都是高级优化算法。不要尝试重新实现这些方法，除非这就是你做这个项目的本意。你应该用一个提供优化算法的类库，或者用一个更容易实现的或者类库里就有的简单点的优化算法（如梯度下降算法）。小型项目方法论以上四个策略属于我称为“小型项目”的方法论。你用这个方法可以很快建立在技术领域（比如机器学习）方面的实用技能。大意就是你设计并且亲手完成解决特定问题的小项目。小型项目在几个方面应该足够小，才能保证你能完成它们并且从中学习，然后好步入到下一个项目中去。下面是一些你应该考虑加在项目上的一些限制：时间短： 一个项目从头到最后能有可展现的结果不应超过 5-15 小时。这样利用一周中不上班的晚上和周末时间你就能完成一个小项目。范围小： 一个项目应该有意义，但同时应该是你感兴趣的问题的范围最小的版本。举个例子，与其解决广义的“写一个能告诉我微博是否会被转发的程序”，还不如去研究这个问题在一个特定的账号在一个特定的时间段内的表现。所需资源少： 一个项目应该能用你的可联网的台式或者笔记本电脑完成。你不应该需要奇葩的软件、网络架构，或者第三方数据或者服务。你应搜集需要的数据，读入内存，用开源工具来解决你那个小问题。额外有关项目的小贴士这些策略的原则是让你利用你的程序员技能开始行动。下面是三条帮助你调整思维模式、有助你开始行动的小贴士：写下你学到的东西。 我建议每个步骤都产生一个有形的劳动成果。它可以是本子里的笔记、微博、博客文章或者是开源项目。每个劳动成果都可以作为一个里程碑或锚。除非项目的目的是写代码，否则不要写。 这条不是那么显而易见，但却是最能帮助你加快理解机器学习的速度的建议。目的是学到东西，而不是产生独一无二的资源。 不要管是否有人读你关于一个算法的研究、教程或是笔记。这些都是你的观点，是你的劳动成果，它们证明你现在掌握到了知识。总结下面是这些策略的一句话清晰总结，可以帮助你选择适合自己的那个。学习一个机器学习工具： 选择一个你喜欢的工具或类库，学习如何很好地使用它。学习一个机器学习数据集： 选择一个数据集，深入地理解它，发掘哪类算法处理它最有效。学习一个机器学习算法： 选择一个算法，深入理解它，发掘什么样的参数设置在不同数据集上都稳定。实现一个机器学习算法： 选择一个算法，用你选定的语言实现它或者是把已有的实现移植到你选定的语言上。选一个吧！相关资源如果你喜欢这篇自学策略文章，作者创建了一个 32 页的有关学习并实践应用机器学习的 PDF 指导手册。看这里：小项目方法论：学习并实践应用机器学习作者还创建了一个包含 90 个项目想法的清单，作为附加福利加在这个指导里面了。原文链接：Jason Brownlee说明： 本文内容源自经典机器学习自学指南，核心方法论依然适用。文中提及的部分工具链接或资源页面可能随时间有所更新，建议访问时以官方最新文档为准。