# 4 个自学机器学习项目

> 原文： [https://machinelearningmastery.com/self-study-machine-learning-projects/](https://machinelearningmastery.com/self-study-machine-learning-projects/)

机器学习领域有很多途径，大部分都是从理论开始的。

如果您是程序员，那么[您已经拥有](http://machinelearningmastery.com/programmers-should-get-into-machine-learning/ "Programmers Should Get Into Machine Learning")技能，可以将问题分解为组成部分，并为小型项目制作原型，以便学习新技术，库和方法。这些是任何专业程序员的重要技能，今天这些技能可用于开始机器学习。

这些是任何专业程序员的重要技能，今天这些技能可用于开始机器学习。

![Self Study](img/329b9a368e9286765d1e32303c743fc1.jpg)

自学
摄影： [gfairchild](http://www.flickr.com/photos/gcfairch/4183435647/sizes/l/) ，保留一些权利

你必须学会​​理论才能在机器学习中发挥作用，但你可以利用自己的兴趣和对知识的渴求来激励你从工作实例到算法的数学理解。

在这篇文章中，您将学习程序员可以遵循的四种策略来开始机器学习。这是技术人员的路径，这是实用和经验性的，需要您进行研究和完成实验，以建立自己的直觉。

四种策略是：

1.  学习机器学习工具
2.  研究机器学习数据集
3.  研究机器学习算法
4.  实现机器学习算法

仔细阅读这些策略并选择一个最适合您的策略，然后放弃执行。

## 1.学习机器学习工具

选择您喜欢的工具或库，并学习如何使用它。

我建议您从一个提供数据准备工具，机器学习算法和结果表示的环境开始。学习这样的环境可以让您熟悉端到端的机器学习过程，这对您来说比学习特定的数据准备技术或机器学习算法更有价值。

或者，也许您对一系列技术的特定技术感兴趣。您可以将此作为深入了解提供这些方法的库或工具的机会，并通过掌握提供该技术访问权限的库来掌握该技术。

![Study a Machine Learning Tool](img/9058e5eabfd29763c4c5d5d536cf43b7.jpg)

学习机器学习工具
摄影： [zzpza](http://www.flickr.com/photos/zzpza/3269784239/sizes/o/) ，保留一些权利

您可以遵循此策略的一些策略是：

*   比较和对比您可以选择的候选工具。
*   总结所选工具的功能。
*   阅读并总结该工具的文档。
*   该工具的完整文本或视频教程，并总结了您完成的每个教程的关键学习要点。
*   为该工具的功能或功能创建教程。选择您不太了解的内容并创建编写获取结果的过程或录制有关如何使用该功能的 5 分钟截屏视频。

您应该考虑的一些环境包括： [R](http://www.r-project.org/) ， [Weka](http://www.cs.waikato.ac.nz/ml/weka/) ， [scikit-learn](http://scikit-learn.org/stable/) ，[华夫饼](http://waffles.sourceforge.net/)和[橙](http://orange.biolab.si/)。

## 2.研究机器学习数据集

选择一个数据集并密切了解它，并发现哪个算法类或类型最适合它。

我建议你选择适合内存的适度大小的数据集，以前可能已经进行了很好的研究。有很多优秀的数据源库供您浏览和选择。您的目标是了解数据源所代表的基本问题，数据集中的结构以及最适合该问题的解决方案类型。

使用机器学习或统计环境来研究数据集。这将使您能够专注于您想要回答的有关数据集的问题，而不是分心学习给定技术并学习如何在代码中实现它。

![Study a Machine Learning Dataset](img/104877baa065bb0120bed1b46d66b505.jpg)

研究机器学习数据集
照 [abhidg](http://www.flickr.com/photos/abhidg/6452694851/sizes/l/) ，保留一些权利

一些可以帮助您研究实验机器学习数据集的策略是：

*   清楚地描述数据集所代表的问题。
*   使用描述性统计量汇总数据。
*   描述您在数据中观察到的结构，并假设数据中的关系。
*   现场测试数据集上的一些流行的机器学习算法，并发现哪个通用类比其他类更好
*   调整运行良好的算法并发现在问题上表现良好的算法和算法配置

您可能要考虑的一些高质量数据集存储库是： [UCI ML 存储库](http://archive.ics.uci.edu/ml/datasets.html)， [Kaggle](http://www.kaggle.com/) 和 [data.gov](http://www.data.gov/) 。

## 3.研究机器学习算法

选择一种算法并密切理解它，并发现在不同数据集中稳定的参数配置。

我建议你从一个适度复杂的算法开始。选择一个很好理解的算法，有许多开源实现供您选择，并且您可以使用很少的参数进行探索。您的目标是建立算法如何在一系列问题和参数配置中执行的直觉。

使用机器学习环境或库。这将使您能够专注于算法的行为作为“系统”，而不是关注自己的规范数学描述和参考文献。

![Study a Machine Learning Algorithm](img/367571bf5c55f01934c752658afd6744.jpg)

学习机器学习算法
照片由[不受人才阻碍](http://www.flickr.com/photos/nicmcphee/474509989/sizes/l/)，保留一些权利

在研究您选择的机器学习算法时，您可以使用的一些策略是：

*   总结系统的参数及其对算法的预期影响。
*   选择适合算法的一系列可能引发不同行为的数据集。
*   选择您认为会从系统中获取不同行为的算法参数配置，并列出您可能期望从系统中获得的行为。
*   考虑算法的行为，当算法在算法更新过程的迭代或其他时间间隔上运行时，可以监视该算法的行为。
*   使用数据集，算法配置和行为度量的一个或多个组合设计小型实验，以回答特定问题并报告结果。

您的学习可以像您一样简单或复杂。在高端，您可以探索所谓的启发式或经验法则，以应用算法并凭经验证明它们是否具有优点，如果是，在什么情况下它们与成功结果相关联。

您可能考虑开始的一些算法包括：最小二乘线性回归，逻辑回归，k-最近邻分类，感知机

## 4.实现机器学习算法

选择算法并将现有实现实现或移植到您选择的语言。

选择要实现的适度复杂度的算法。我建议对要实现的算法进行一些详细的研究，或者选择您喜欢的实现并将其移植到您选择的目标编程语言。

从零开始实现算法是了解在将算法描述转换为功能系统时必须做出的无数微决策的好方法。通过使用多种算法重复此过程，您将很快获得如何阅读研究论文和书籍中算法的数学描述的直觉。

![Implement a Machine Leaning Algorithm](img/4346aca8b34bc122f0f2b4e3caa907f4.jpg)

实现机器学习算法
照 [Nic 的事件](http://www.flickr.com/photos/nics_events/2227330536/sizes/l/)，保留一些权利

从零开始实现机器学习算法可能有助于您的五种策略是：

*   从移植开始。将开源算法实现从一种语言移植到另一种语言将教会您如何实现算法并使其成为您自己的算法。这是最快的入门方式，强烈推荐。
*   选择一个算法描述来处理并收集其他算法描述以支持您消除主要参考资料的歧义
*   不要害怕与算法作者，论文作者甚至算法实现作者联系，提出问题以帮助您消除对算法描述的理解。
*   阅读目标算法的大量实现。了解不同的程序员如何解释算法描述并将其转换为代码。
*   不要陷入先进的方法。许多机器学习算法在其核心中使用高级优化方法。除非这是项目的重点，否则不要尝试重新实现这些方法。使用提供优化算法的库或使用易于实现的简单优化算法（如梯度下降）或在库中可用。

## 小项目方法论

四种策略是我称之为“小项目”的方法。这是一种可以用来快速建立技术学习领域的实用技能的方法，如机器学习。一般的想法是，您可以针对要回答的特定问题的小项目进行设计和执行。

小项目在一些方面很小，以确保它们完成，并提取学习优势并进入下一个项目。以下是您应考虑对项目施加的限制：

*   **时间不多**：项目从开始到结果呈现时间不应超过 5-15 小时。这将允许您在一周的夜晚和周末时间完成一个小项目，远离您的 9-5 工作。
*   **范围小**：一个项目应该解决你感兴趣的问题的最窄版本，并且仍然有意义。例如，在一般情况下，不是解决问题“写一个会告诉我推文是否会被转发的程序”，而是针对给定时间段内的特定 Twitter 帐户解决问题。
*   **资源不足**：项目应该可以在桌面或笔记本电脑上通过互联网连接完成。您不应该需要异国情调的软件，Web 基础结构或第三方数据或服务。收集您需要提交的数据，将其加载到内存中并使用开源工具攻击您的狭隘问题。

## 其他项目提示

这些策略的原则是采取行动并利用您的程序员技能。以下三个提示可帮助您调整思路以采取行动：

*   **写下你学到的东西**。我建议您为每一步采取切实的工作成果。这可能是期刊，推文，博客文章或开源项目中的注释。每个工作产品都充当锚点和里程碑。
*   **除非这是项目**的目的，否则不要编写代码。这个提示并不明显，但在加速您对机器学习的理解方面可能是最大的。
*   **目标是让你学习一些不创造独特资源的东西**。没有人会阅读您的算法或教程或算法注释，暂时忽略它。它们是您的观点和您的工作产品，以证明您现在知道某些事情。

## 摘要

这里是尺寸策​​略，每个都有一个明确的单行，以帮助您选择适合您的。

1.  **研究机器学习工具**：选择您喜欢的工具或库，并学习如何使用它。
2.  **研究机器学习数据集**：选择一个数据集并密切了解它，并发现哪个算法类或类型最适合它。
3.  **研究机器学习算法**：选择一种算法并对其进行密切理解，并发现在不同数据集中稳定的参数配置。
4.  **实现机器学习算法**：选择算法并将现有实现实现或移植到您选择的语言。

**选一个！**

您会选择哪种策略以及您的第一步是什么？选择一个并在下面的评论中声明您的意图。