深入机器学习

Dive into Machine Learning Creative Commons License Awesome

嗨,您好! 本指南适合您:

我通过首先进行黑客学习来学习Python,后来变得越来越认真.*我想通过机器学习来做到这一点. 如果这是您的风格,请和我一起领先一步.


Does your employer support your growth?

如果您正在阅读本指南,则喜欢边做边学. 您的雇主应根据您的优势和兴趣为您提供项目. 如果没有,您应该继续前进!

Triplebyte参加三字节编码测验,然后让工作来找您. 您可以使用我的链接来支持 .


Let's get started

我建议你先弄湿脚. 您会增强信心.

Tools you'll need

您只需点击几下即可安装Python 3和所有这些软件包 Anaconda Python distribution . Anaconda在数据科学和机器学习社区中很受欢迎.

如果您使用的是Python 2.7,请不要担心. 您不必仅为本指南而迁移到Python 3. 另外,如果您使用的是pip / virtualenv而不是Anaconda,那也没关系! 并重新:安装软件包,这是一个有用的文档: conda vs. pip vs. virtualenv

Let's go!

Learn how to use IPython Notebook (5-10分钟).(您可以 learn by screencast 代替.)

现在,遵循此简短练习(10分钟):An introduction to machine learning with scikit-learn . 在ipython或IPython Notebook中进行. 它将真正增强您的信心.

I'll wait.

What just happened?

您刚刚使用[scikit-learn]对一些手写数字进行了分类. 整洁吧?

[scikit-learn] is the go-to library for machine learning in Python. It's used widely. Machine learning is hard. You'll be glad your tools are easy to work with.

[scikit-learn]:http://scikit-learn.org/stable/index.html

我鼓励您查看[scikit-learn]主页,并花费大约5分钟的时间查看策略的名称(分类,回归等)及其应用. 暂时不要点击! 只需看一下词汇表即可.

Dive in

A Visual Introduction to Machine Learning

让我们进一步了解机器学习,以及一些常见的想法和问题. 读 "A Visual Introduction to Machine Learning, Part 1" 通过 Stephanie YeeTony Chu.

A Visual Introduction to Machine Learning, Part 1

不会花很长时间. 这是一个美丽的介绍...尽量不要流口水!

A Few Useful Things to Know about Machine Learning

好. 让我们更深入.

阅读"A Few Useful Things to Know about Machine Learning"Prof. Pedro Domingos . 它挤满了有价值的信息,但并非不透明. 作者了解到,有很多“黑人艺术”和民间智慧,他们邀请您加入.

慢慢来吧. 做笔记. 如果您还不了解所有内容,请不要担心.

整篇论文都充满了价值,但我想指出两点:

-仅靠数据是不够的.这是科学与机器学习相遇的地方. 引用多明戈斯的话:“ ...学习中对知识的需求应该不足为奇.机器学习不是魔术;它不可能从无到有得到某些东西.它所做的就是从更少得到更多.像所有工程学一样,编程是一种大量工作:我们必须从头开始构建一切.学习更像是农业,这让自然完成了大部分工作.农民将种子与营养物结合起来种植农作物.学习者将知识与数据结合起来制定计划.” -更多数据胜过更聪明的算法.程序员,请注意. 我们喜欢很棒的工具. 抵制重新发明轮子或过度设计解决方案的诱惑. 您的起点是 Do the Simplest Thing that Could Possibly Work . 引用多明戈斯的话:“假设您已经构建了最好的功能集,但是获得的分类器仍然不够准确.现在可以做什么?有两个主要选择:设计更好的学习算法,或者收集经验丰富的经验法则是,拥有大量数据的愚蠢算法要击败数量适中的聪明算法(毕竟,机器学习只不过是让数据承担繁重的工作.) ”

当您处理真正的机器学习问题时,应在优化算法选择之前将精力集中在“领域知识”和“数据”上. 在增加复杂性之前,最好先参考[做简单的事情]. 您不应急于进入神经网络,因为您认为它们很酷. 要改善模型,获取更多数据.然后使用对问题的了解来 explore and process 数据. 只有在收集到足够的数据并且处理好之后,才应该优化算法的选择.

What has the most impact in Machine Learning

(图表的灵感来自于 Alex Pinto's talk, "Secure Because Math: A Deep-Dive on ML-Based Monitoring".)

[做简单的事情]:http://wiki.c2.com/?DoSimpleThings

Jargon note

Just about time for a break...

在您休息之前,请获取一些播客.

一,下载 an interview with Prof. Domingos on the Data Skeptic podcast (2018). 教授 周日写道 the paper we read earlier . 您可能还开始阅读他的书, The Master Algorithm by Prof. Pedro Domingos,这是一个清晰易懂的机器学习概述.

Next, subscribe to more machine learning and data science podcasts! These are great, low-effort resources that you can casually learn more from. To learn effectively,随着时间的流逝,留有足够的顶部空间. Do not speed up your podcasts!

订阅_ Talking Machines_.

我建议以下收听顺序:

  • 下载 "Starting Simple" 剧集,并尽快收听.它支持我们从多明戈斯那里读到的内容. Ryan Adams 如上所述,我们讨论了从简单开始. Adams还强调了特征工程的重要性. 功能工程是Domingos编写的“知识”的练习. 在以后的一集中 they share many concrete tips for feature engineering. *然后,随着时间的流逝,您可以收听整个播客系列(从头开始).

想订阅更多播客吗? 这是 a good listicle 建议, and another.

好! 休息片刻,再回来刷新.


Play to learn

接下来,选择这些IPython笔记本中的“一两个”并一起玩.

还有更多找到出色的IPython Notebook的地方:

知道另一个很棒的笔记本吗? 请提交PR!


Immerse yourself

现在,您应该着迷了,并渴望了解更多信息. 选择以下课程之一,然后开始前进.

如果您决定随身携带一个宠物项目,这将很有帮助,因此您可以运用自己的知识. 您可以使用其中之一 Awesome Public Datasets . 记住,IPython Notebook是您的朋友.

另外,您还应该阅读一本深入的教科书以用作参考. 最好的两个选择是 Underst和ing Machine Learning Elements of Statistical Learning. You'll see these recommended as reference textbooks. You only need to use one of the two options as your main reference; here's some context/comparison to help you pick which one is right for you. 您可以在这些链接处免费以PDF格式下载每本书-因此,快来抓取它们吧!

Tips for studying

繁忙的时间表? 读 Ray Li's review of Prof. Andrew Ng's course 一些有用的提示. 查看一些 "Learning How to Learn" 视频. 这只是关于一般学习的方法. 在课程中,他们 advocate the learn-by-doing approach ,就像我们在这里所做的那样. 您将获得其他易于使用的技巧,但要使您的时间投入更有效,还有很长的路要走.

Other courses

这是我推荐的其他一些免费在线课程. (机器学习,数据科学和相关主题.)

Getting Help: Questions, Answers, Chats

从支持论坛和与您正在学习的课程相关的聊天开始.

查看 datascience.stackexchange.comstats.stackexchange.com – such as the tag, machine-learning. 有些像 /r/machinelearning.

关于Quora的讨论也很多,例如: What is the difference between Data Analytics, Data Analysis, Data Mining, Data Science, Machine Learning, and Big Data?

在肉空间中寻求帮助和社区,请参加聚会. 数据科学周刊 Big List of Data Science Resources 可能会帮助您.

Supplement: Learning Pandas well

您将要更加熟悉熊猫.

Supplement: Cheat Sheets

我遇到过一些很好的备忘单. (请 submit a Pull Request 添加其他有用的备忘单.)

Assorted Opinions and Other Resources

More Data Science materials

我不再重复上面提到的材料,但是这里有一些其他数据科学资源:

Bayesian Statistics and Machine Learning

From the "Bayesian Machine Learning" overview on Metacademy:

> ...在过去的20年左右的时间里,贝叶斯思想在机器学习中产生了巨大影响,因为它们在构建现实世界现象的结构化模型中提供了灵活性. 算法的进步和不断增长的计算资源使人们有可能拟合以前认为难处理的丰富,高度结构化的模型.

您可以通过研究以下资源之一来了解更多信息. 两种资源都使用Python, PyMC和Jupyter笔记本. * 免费书籍 Probabilistic Programming and Bayesian Methods for Hackers. Made with a "computation/understanding-first, mathematics-second point of view." It's available in print too! * Bayesian Modelling in Python

Risks

“机器学习系统会自动从 日期.“ Pedro Domingos,在 "A Few Useful Things to Know about Machine Learning." 您生成的程序将需要维护. 与以更快的速度创建程序的任何方式一样,您可以 technical debt.

这是摘要 Machine Learning: The High-Interest Credit Card of Technical Debt:

>机器学习提供了功能强大的工具包,可快速构建复杂的系统. 本文认为,将这些快速胜利视为免费是危险的. 使用技术债务框架,我们注意到,应用机器学习时,在系统级别上产生大量持续的维护成本非常容易. 本文的目的是强调在可能的情况下应避免或重构的几种机器学习特定的风险因素和设计模式. 其中包括边界侵蚀,纠缠,隐藏的反馈循环,未声明的使用者,数据依存关系,外部世界的变化以及各种系统级的反模式.

如果您遵循本指南,则应阅读该论文. 你也可以 listen to a podcast episode interviewing one of the authors of this paper.

关于在生产环境中运行以ML为动力的系统所面临的挑战的更多文章:

- [Martin Zinkevich撰写的[“机器学习规则:[可靠] ML工程的最佳实践,”](http://martin.zinkevich.org/rules_of_ml/rules_of_ml.pdf关于ML工程实践和模式在Google生产中. 可选的: accompanying video. - "What’s your ML Test Score? A rubric for ML production systems" 埃里克·布雷克(Eric Breck),蔡善清(Chanqing Cai),埃里克·尼尔森(Eric Nielsen),迈克尔·萨利布(Michael Salib),斯卡利D. - Surviving Data Science "at the Speed of Hype" MailChimp的数据科学家John Foreman - The High Cost of Maintaining Machine Learning Systems - 11 Clever Methods of Overfitting and How to Avoid Them - The Perilous World of Machine Learning for Fun and Profit: Pipeline Jungles and Hidden Feedback Loops

Welcome to the Danger Zone

因此,您正在学习机器学习. 您具有黑客技巧. 也许您在多明戈斯的意义上有一些“知识”(一些“实质专长”或“领域知识”). 该图是从Drew Conway的“数据科学维恩图”中稍作修改的. 这不是适合我们的_perfect_,但它可能会说明问题:

Drew Conway's Data Science Venn Diagram, modified slightly

当您仍处于危险区域时,请勿以机器学习专家的身份推销自己. 不要制造不良产品或发布垃圾科学. (也请 don't be evil .)本指南无法告诉您如何将自己“融入”机器学习能力中,更不用说专业知识了. 没有学校或其他机构,很难评估熟练程度. 对于自学成才的人来说,这是一个普遍的问题.

Towards Expertise

您需要练习. On Hacker News, user olympus commented to say you could use competitions to practice 和 evaluate yourself. KaggleChaLearn 是机器学习竞赛的中心. 你可以找到一些 examples of code for popular Kaggle competitions here . 对于较小的练习, try HackerRank.

您还需要了解.**您应该查看Kaggle竞赛获胜者对他们的解决方案的评价, for example, the "No Free Hunch" blog . 这些一开始可能会让人感到头疼,但是一旦您开始理解和欣赏这些内容,就知道自己已经步入正轨.

竞争和挑战只是实践的一种方式. 不过,您不应该限制自己-并且还应该了解 Machine Learning isn't all about Kaggle competitions.

这是一种练习的补充方法:进行练习研究.

  1. 问一个问题. 开始自己的学习. "most important thing in data science is the question" (Dr. Jeff T. Leek ). 因此,从一个问题开始. 然后找到 real data . 分析一下. 然后 ...
  2. 交流结果.当您发现新发现时,请与他人进行同行评审.
  3. 修复问题.学习. 分享您所学.

重复一遍. 重新措辞,它适合 scientific method :制定问题(或问题陈述),创建假设,收集数据,分析数据并传达结果. (你应该 watch this video about the scientific method in data science和/或 read this article.)

您如何提出有趣的问题? 这是一种方法. 每个星期天, browse datasets 并写下一些问题. 另外,注册 Data is Plural ,一个有趣的数据集通讯; 查看这些数据集并写下问题. 保持好奇心. 当有问题启发您时,请开始研究.

该建议用于进行实践研究并向同行评审学习,基于 a conversationDr. Randal S. Olson . 这是奥尔森的更多建议, quoted 与 permission:

>我认为最好的建议是告诉人们始终清楚地展示其方法,并避免过度解释其结果. 成为专家的一部分是知道很少有一个明确的答案,尤其是当您使用真实数据时.

当您重复此过程时,您的实践研究将变得更加科学,有趣和专注. 此过程中最重要的部分是同行评审.

Ask for Peer Review

您可以在以下社区中进行同行评审:

发布到任何一个,并寻求反馈. 您会得到反馈. 您会学到很多. 当专家审阅您的工作时,您将学到很多有关该领域的知识. 您还将练习一项关键技能:接受关键反馈.

当我阅读有关“拉取请求”的反馈时,首先我对自己重复:“我不会防御,我不会防御,我也不会防御.” 在阅读有关机器学习工作的评论之前,您可能需要这样做.


Collaborate with Domain Experts!

机器学习可以强大,但不是魔术.

每当您应用机器学习来解决问题时,您都将在特定的问题领域中工作. 为了获得良好的结果,您或您的团队将需要“大量专业知识”,也就是“领域知识”. 学习自己可以做的...但是您也应该合作.如果您与域名专家合作,将会获得更好的结果. (什么是域名专家?请参阅 Wikipedia entry, 要么 c2 wiki's rather subjective but useful blurb.)

🙇 A note about Machine Learning and User Experience (UX)

我无法说得更好:

> 机器学习无法解决要解决的问题.如果您不符合人类的需求,那么您将建立一个非常强大的系统来解决非常小的(甚至可能根本不存在的)问题. .

报价来自 "The UX of AI" by Josh Lovejoy,整篇文章很棒!

换一种说法, You Are Not The User.

今天我们是 surrounded 通过利用机器学习的软件. 通常,结果直接面向用户,旨在增强用户体验.

在开始将ML应用于_your_软件之前,您应该更好地了解UX,以及ML和UX之间的关系. 作为进入该主题的非正式方法,请从以下开始:

然后,如果您认识在UX中工作的同事或朋友,请带他们出去喝咖啡或吃午餐,然后动动脑筋. 我认为他们会有鼓励和谨慎的话. 您绝不会成为专家,但也许会在/何时寻求帮助,评论或指导来帮助您确定.

剧透:您应该尽可能与UX专家合作!

🙇 A note about Machine Learning and Security (InfoSec, AppSec)

有关此主题的BlackHat直播非常棒, Secure Because Math: Understanding Machine Learning-Based Security Products. 幻灯片是 here, video recording is here. 如果您使用ML推荐某些介质,则过度安装可能是无害的. 如果您依靠ML保护免受威胁,那么过度拟合可能会带来彻底的危险. 如果您对此空间感兴趣,请查看完整的演示文稿.

如果您想更深入地探索这个空间,下面的链接中有很多阅读材料:


Deep Learning

在本指南的早期版本中,没有特定的“深度学习”部分. 我故意省略了它. 我认为前进太远对我们没有效果. 我也知道,如果您成为传统机器学习的专家,无论我是否已将其纳入本指南中,您都将能够进入诸如深度学习之类的高级学科. 我们只是想让您开始!

也许这是一种检查进度的方法:问问自己,深度学习看起来像魔术吗? 如果是这样,请以此为标志,表明您尚未准备好专业地使用它. 让迷恋激发您学习更多的知识. 我已经读到一些论点,您可以孤立地学习深度学习. 我读过其他人的建议,最好是首先掌握传统的机器学习. 为什么不从传统的机器学习开始,然后在那里发展您的推理和直觉? 之后,您将只有更轻松的时间学习深度学习. 毕竟,您将能够解决各种有趣的问题.

无论如何,当您决定准备好学习深度学习时,这里有一些有用的资源.

"Big" Data?

如果您完全使用数据密集型应用程序,我将推荐这本书:

  • Designing Data-Intensive Applications 马丁·克莱普曼(Martin Kleppman). (您可以开始免费通过Safari图书在线阅读它.)它不是特定于机器学习的,但是您可以自己弥补这一差距.

最后,这是有关大数据和机器学习的其他有用链接.


Finding Open-Source Libraries


Alternative ways to "Dive into Machine Learning"

这是机器学习的其他指南. 它们可以替代或补充本指南.

  • "How would your curriculum for a machine learning beginner look like?" by Sebastian Raschka. A selection of the core online courses and books for getting started with machine learning and gaining expert knowledge. It contextualizes Raschka's own book, Python Machine Learning (无论如何我都会链接到它!)另请参见 pattern_classification GitHub repository 由作者维护,其中包含有关各种机器学习算法和各种与数据科学相关的资源的IPython笔记本.
  • Materials for Learning Machine Learning 杰克·辛普森(Jack Simpson) *云供应商提供的课程(可能特定于他们的工具/平台)
    • Machine Learning Crash Course from Google 使用TensorFlow API 这是Google对机器学习的快节奏,实用的介绍,其中包括一系列课程,包括视频讲座,实际案例研究和动手实践练习.
    • Amazon AWS 亚马逊已向公众开放其内部培训,并提供认证. 30门课程-45个小时以上的内容.
  • Machine Learning for Developers 是另一个很好的介绍,如果您更熟悉Java或Scala,可能会更好. 它使用Smile(一个可以在Java和Scala中同时使用的机器学习库)为开发人员受众介绍机器学习.
  • Example Machine Learning notebook, exercise, and guide 由Randal S. Olson博士撰写. 在“笔记本”部分中也提到过,但是它的目标与本指南类似(向您介绍并向您展示下一步的方向). 丰富的“进一步阅读”部分.
  • Machine Learning for Software Engineers 由Nam Vu. 这是专为软件工程师设计的自上而下,结果优先的方法. *有关后续新闻消息,请查看 Sam DeBrule's list 这里.
  • Distill 是一本致力于对机器学习最新研究进行清晰且交互式解释的期刊. 它们提供了传统学术出版的替代方法,可以提高该领域的可访问性和透明度.
  • [您的指南在这里]