这篇博文写起来非常困难,因为我希望它非常有价值。
我坐下来,面对一张白纸,提出了一个非常棘手的问题:对于机器学习领域的绝对初学者,我会推荐哪些最好的库、课程、论文和书籍。
我非常纠结于包含什么以及排除什么。我必须努力设身处地为一名程序员和机器学习初学者着想,并思考哪些资源能让他们受益最大。
我为每种资源选择了最好的。如果你是一名真正的初学者,并且热衷于开始机器学习领域,我希望你能找到有用的东西。我的建议是选择一样,一本具体的书或一个具体的库,然后从头到尾阅读它,或者完成所有的教程。选择一个,坚持下去,然后一旦你掌握了它,再选择另一个,重复这个过程。让我们开始吧。
编程库
我提倡“学到足够多的知识,然后开始尝试”。
我就是这样学会编程的,而且我相信很多人也是这样学的。了解你的局限性,发挥你的优势。如果你知道如何编程,就利用它来快速深入机器学习。然后要有纪律性地在你实现它之前去学习该技术的数学。
找到一个库,阅读文档,遵循教程,然后开始尝试。以下是目前最好的开源机器学习编程库。我认为它们并非都适合用于你的生产系统,但它们是学习、探索和原型设计的理想选择。
从你熟悉的语言的一个库开始,然后再转向其他更强大的库。如果你是一名优秀的程序员,你知道你可以相对容易地从一种语言切换到另一种语言。它们都是相同的逻辑,只是语法和 API 不同。
- R 统计计算项目:这是一个环境和一个类似 Lisp 的脚本语言。你想要做的所有统计工作都可以在 R 中完成,包括惊人的绘图功能。CRAN 上的机器学习类别(可以理解为:第三方机器学习包)包含由该领域领导者编写的最新方法代码,以及你可以想到的任何其他内容。如果你想快速进行原型设计和探索,学习 R 是必须的。只是它可能不是你的起点。
- WEKA:这是一个数据挖掘工作台,提供 API,以及用于整个数据挖掘生命周期的许多命令行和图形用户界面。你可以准备数据,可视化探索,构建分类、回归和聚类模型,并且内置了许多算法,也有第三方插件提供。与 WEKA 无关,但如果你更喜欢在 Hadoop 基础设施上进行机器学习,Mahout 是一个很好的 Java 框架。如果你是大数据和机器学习新手,请坚持使用 WEKA,一次学习一件事。
- Scikit Learn:基于 NumPy 和 SciPy 构建的 Python 机器学习库。如果你是 Python 或 Ruby 程序员,这就是为你准备的库。它友好、强大,并附有出色的文档。如果你想尝试其他东西,Orange 是一个不错的选择。
- Octave:如果你熟悉 MatLab 或者你是想尝试新东西的 NumPy 程序员,可以考虑 Octave。它就像 Matlab 一样是用于数值计算的环境,可以轻松地编写程序来解决线性与非线性问题,就像大多数机器学习算法的基础一样。如果你有工程背景,这可能是你开始的好地方。
- BigML:也许你不想进行任何编程。你可以完全不通过编程来操作 WEKA 等工具。你可以更进一步,使用 BigML 等服务,它们在网上提供机器学习接口,你可以在浏览器中构建模型。
选择一个平台,并用它来完成你的机器学习实践教育。不要只是阅读,要动手做。
视频课程
视频是开始学习机器学习的非常流行的方式。
我在 YouTube 和 VideoLectures.Net 上观看大量机器学习视频。风险在于你只会消费而不会采取行动。我建议你在观看视频时始终做笔记,即使你稍后会丢弃这些笔记。我也建议尝试你在讲座中学到的任何东西。
坦白说,我所见过的所有视频课程,对于初学者来说,真的都不太合适。它们都预设了至少线性代数和概率论的实际知识,甚至更多。
Andrew Ng 的斯坦福讲座可能是开始学习课程的最佳地点,否则我推荐一些单集的视频。
- 斯坦福机器学习:通过 Coursera 提供,由 Andrew Ng 教授。除了注册,你还可以随时观看所有讲座,并从实际的斯坦福 CS229 课程中获取讲义和讲座笔记。该课程包括作业和测验,侧重于线性代数和使用 Octave。
- 加州理工学院数据学习:通过 edX 提供,由 Yaser Abu-Mostafa 教授。所有讲座和材料均可在加州理工学院网站上找到。同样,与斯坦福课程一样,你可以按照自己的节奏学习,并完成作业。它涵盖了类似的主题,并更深入地讨论了一些细节,数学性也更强。作业对于初学者来说可能太具挑战性了。
- VideoLectures.Net 机器学习分类:这是一个很容易让你在海量内容中迷失的地方。寻找看起来有趣并且尝试一下的视频。如果级别不对就放弃,如果喜欢就记笔记。我发现我经常回来刷新主题和学习全新的主题。而且,看到该领域大师们的真实面貌也很好。
- “让数据科学运动更具竞争力” - Jeremy Howard 的演讲:这是一个面向当地 R 用户群的演讲,讨论了在机器学习竞赛中表现出色的实际过程。这非常有价值,因为很少有人谈论在实际问题上工作是什么样的以及如何去做。我毫不秘密地幻想资助一档网络真人秀节目,跟踪机器学习竞赛的参与者。我对此有多着迷!
概览性论文
如果你不习惯阅读研究论文,你会发现语言非常生硬。论文就像教科书的一个片段,但它描述了一个实验或该领域的某个前沿。不过,如果你想开始学习机器学习,可能会发现一些有趣的论文。
- 机器学习的纪律:Tom Mitchell 关于机器学习学科定义的一篇白皮书。这是 Mitchell 用来说服 CMU 校长为一项仍将存在 100 年的学科(也可以看这篇与 Tom Mitchell 的简短访谈)设立独立机器学习系的论证的一部分。
- 关于机器学习的几件有用之事:这是一篇很棒的论文,因为它超越了具体的算法,并阐述了许多重要的问题,如特征选择、泛化能力和模型简洁性。从一开始就掌握这些并清晰地思考它们是非常好的。
我只列出了两篇重要的论文,因为阅读论文很容易让你陷入困境。
初学者机器学习书籍
有很多机器学习书籍,但很少有为初学者编写的。
初学者到底是什么?
你很可能从另一个领域来到机器学习,最可能是计算机科学、编程或统计学。即便如此,大多数书籍也期望你至少具备线性代数和概率论的基础。
尽管如此,市面上还是有一些书籍鼓励有抱负的程序员通过教授算法的基本直观理解来入门,并指向工具和库,以便你可以立刻去尝试。
最值得注意的是《集体智能编程》、《黑客机器学习》和《数据挖掘:Python、R 和 Java 的实用机器学习工具和技术》。如果犹豫不决,就选这三本书中的一本!
- 集体智能编程:构建智能 Web 2.0 应用:这本书是为你这位程序员写的。它对理论的描述较少,但包含大量的代码示例以及实际的 Web 问题和解决方案。买它,读它,做练习。
- 黑客机器学习:我会在你读完《集体智能编程》(上面)之后推荐这本书。它同样提供了实用的示例,但它更侧重于数据分析,并使用 R。我非常喜欢这本书!
- 机器学习:算法视角:这本书比《集体智能编程》(上面)更进阶。它有类似的目标(让程序员开始接触机器学习),但它包含了数学和参考资料,以及 Python 中的示例和代码片段。如果你仍然感兴趣,我建议在阅读《集体智能编程》之后再读这本书。
- 数据挖掘:Python、R 和 Java 的实用机器学习工具和技术:我实际上是以这本书开始的,实际上是第一版,大约是 2000 年。我当时是一名 Java 程序员,这本书以及配套的 WEKA 库为我提供了一个理想的环境来尝试事物,实现我自己的插件算法,并普遍练习机器学习和更广泛的数据挖掘过程。我强烈推荐这本书和这个途径。
- 机器学习:这是一本老书,包含公式和大量参考文献。它是一本教科书,但也很容易理解,并对每个算法都有扎实的动机。
很多人都在吹捧一些很棒的机器学习教科书。我也一样,它们确实很棒。但我认为它们不是初学者开始的好地方。
进一步阅读
我认真思考了这篇博文,我还查阅了其他人的资源列表,以确保我没有错过任何重要的内容。
为了完整起见,这里还有一些其他很棒的关于入门机器学习的在线资源列表。
- 数据科学和机器学习资源列表:一个精心整理的列表。花点时间阅读他的建议并点击链接。非常值得。
- “学习机器学习有哪些好的资源?为什么?”:这个 Quora 问题的第一条回答非常棒。每次阅读我都会做笔记和添加书签。这个回答中最有价值的部分是机器学习课程列表(附带讲座笔记)以及问答网站上相关帖子的列表。
- “被机器学习淹没:有 ML101 的书吗?”:一个 StackOverflow 问题。实际上是一个推荐机器学习书籍的列表。Jeff Moser 的第一个回答很有用,因为它指向了讲座视频和演讲。
你是否阅读或使用了这里列出的任何资源?
您怎么看?
我是否遗漏了任何对有兴趣开始机器学习的程序员至关重要的有用资源?
请在评论中告诉我!
谢谢 Jason,看起来很有用。不过说实话,我原则上会避开大多数由学者撰写的书籍/课程。所以目前我将继续关注你的博客。🙂
一个问题:在你推荐的语言中,你推荐了 R 和 Octave。它们不是统计/信号处理的吗?机器学习是像信号处理一样吗?
感谢支持,Shantnu!
教科书是不错的选择,它们是为本科生或更典型的研究生课程编写的。如果你是一个感兴趣的程序员,它们不是一个好的起点。
我建议你从你熟悉的语言开始,然后为该语言找到一个机器学习库。或者,也有像 WEKA 这样的多平台工具,它们提供了一个用户界面,可以开始玩。
Octave,像 Matlab 一样,用于 DSP 和相关的工程学科。R 是一种统计语言和环境。在正确的人手中,两者都非常强大。只有当你已经熟悉它们时,我才建议用这些语言/环境来探索机器学习。否则,你将同时学习两件事(语言和机器学习),让你的生活变得不必要地困难。
你可以将机器学习任务表述为 DSP 问题,我在神经网络领域看到过很多这样的做法。如果这个角度对你有帮助,那么就试试吧。
希望这有帮助!
很有帮助,谢谢。
期待更多博文……
感谢分享你的经验,Jason。
过去一年多我一直在通过试错学习/研究 ML。在尝试了很多课程/视频/书籍之后,我可以总结我的经验如下:
我精选的课程如下:
1. Andrew Ng 在 Coursera 的 ML 课程
2. Yaser 的数据学习。
连续学习这两门课程真的帮助了我很多。当然,我会在斯坦福 CS229 材料的帮助下反复回顾它们。
书籍:我觉得你提到的前两本书并没有真正地以建设性的方式提供帮助。但它们确实帮助我认识到,机器学习不能通过盲目遵循这些算法方法来学习。看到输出很棒,但那个一直萦绕在心的“为什么”真的让我很沮丧。然后,汗水(Khan Academy)的线性代数、概率论和统计学以及 edx 的 Ani Adhikari 的统计三部曲课程,在构建基础方面给了我很大的帮助。
这是一个迭代的过程,而且很可能还会继续下去。
再次感谢。
评论得很好,@niket。
你能完成这两门课程真是太棒了,Yaser 的课程难度明显更大。
我同意,在你不理解算法的“为什么”之前,它们是不会奏效的。算法是通过数学来解释的,所以我们采用数学作为直观理解。我认为初学者可以通过空间隐喻和类比走得很远,然后再深入研究数学。我也认为有很多方法(基于实例、树等)你可以很好地仅凭这些直观理解就走下去。
我很想听听你对这个的看法,@niket。
嘿 Niket,你能不能回复并链接 Ani Adhikari 的统计三部曲课程?
谢谢你
你忘了加上 http://www.youtube.com/playlist?list=PLD0F06AA0D2E8FFBA 到视频讲座分类。
Mathematical monk 有最简单、最直接的机器学习视频教程之一。
订阅下载资源指南的链接无效。请帮忙。
我已经直接发送给你了。
非常感谢 Jason。我是这个领域的新手,但非常渴望深入了解,所以我一直在寻找从哪里开始。你关于书籍、视频讲座和其他资源的建议激励我继续前进。我希望在我遇到困难时能得到你的帮助。再次感谢。
你好,Jasonb
你的网站对初学者和专家来说都是最好的。
我正在从事机器学习,特别是强化学习。我想要关于 RL 的编程以及它的实现基础。我希望你能探讨这个领域??
我还没有涵盖强化学习,但未来可以考虑。
嗨
不要在较低级别和一些 MATLAB 项目上开始编码,要逐步难度加大,以定义要走的领域路径。
谢谢。
感谢这篇博文。太棒了!我非常感谢你花时间将其整理出来。我刚开始 Andrew 的课程几周。我一直在想接下来该去哪里。这太棒了。
嘿!很棒的博文。我一直在寻找这样的列表。我已经开始 Coursera 的数据科学专业下的《实用机器学习》课程,而且他们使用的术语有点难跟上。
再次感谢,很棒的博文!
谢谢 Joef。祝你的课程顺利。
嗨 JasonB,我学习了 Andrew Ng 的 Coursera 课程和斯坦福的统计学习,但我仍然因为数学原因难以阅读研究论文,所以你能否推荐一些数学资源来帮助我快速入门理解论文?谢谢。
很棒的文章
很棒的资源列表,谢谢!
我最喜欢的机器学习书籍之一是 Richard Duda 的《模式分类》。
这是我读的第一本该领域的书,我认为它为初学者提供了理论背景和实践思维之间的完美结合。
我的机器学习书籍前四名是 http://www.visiondummy.com/machine-learning-books/
非常感谢您,先生。🙂
嗨,Jason,
不错的博文。我喜欢“从头读到尾,或完成所有的教程。”
非常感谢这些建议和资源。
在过去的 8 年里,我一直积极地从事机器学习、数据挖掘和自然语言处理的研究。我处理过不同类型的 ML/DM/NLP 问题,例如:人类移动预测、在线广告、欺诈检测、选举预测等。
我早期遇到的问题之一是,是学习一本高质量的 ML/DM 书籍,它能涵盖 ML/DM 的基本概念/理论。当然,这个领域很广,而且很多时候你需要阅读论文来保持更新并了解最新结果。
因此,为了生成顶级 ML/DM 书籍,我们爬取了网络并收集了数百本 ML/DM 书籍的数据和信号。接下来,我们实现了一个排名算法,通过它可以对顶级 ML/DM 书籍进行排名。
我们的目标是客观地对书籍进行排名,以便买家能够获得一份数据驱动、客观且公平的顶级书籍列表。这是一个正在进行的項目,我们将继续改进我们的排名算法的质量。
你可以在这里找到 16 本顶级机器学习、数据挖掘和自然语言处理书籍:
http://www.aioptify.com/topmldmbooks.php?utm_source=machinelearningmastery&utm_medium=cpm&utm_campaign=contentpromotion
如果您对排名有任何建议或疑问,请告知我们。
你好,
感谢您的这篇文章。
我无法下载“机器学习资源指南”。
谢谢
嗨 Guy。
这太棒了——谢谢!这里是另一个机器学习教程:https://www.praetorian.com/blog/machine-learning-tutorial
这篇博文给出了一个二元数据机器学习的例子。如果你熟悉的话,作者还在https://mlb.praetorian.com 上发布了一个技术挑战。
很棒的博客!
我是 ML 领域的新手。在学习了 Andrew 的课程后,我开始阅读这些书籍,并发现它们非常有帮助。
1) 统计学习导论
2) 统计学习要素
3) 应用预测建模
我认真对待每一本书,逐字阅读,做笔记,并研究我不理解的每一个概念。这段旅程引导我深入研究了概率与统计以及时间序列分析。
ML 真是太令人上瘾了,我永远学不够。我学得越多,就越想学。
我的计划是在几个月后开始参加 Kaggle 竞赛。我一直将这个博客作为灵感和信息的来源。谢谢 Jason!!
机器学习入门
https://www.youtube.com/watch?v=gj4GsbkyndY
谢谢 Jason 贡献的这个精彩的网站……
我是一名机器学习爱好者,发现这个博客非常有资源且有帮助。我将尽我最大的努力遵循你的建议,开始学习这个庞大的机器学习和人工智能领域。
希望将来也能得到你的帮助和有价值的信息……
不客气,很高兴你觉得有用,Bimal。
谢谢 Jason 的分享。我是一名 ML 初学者,对你列出的所有语言都不太熟悉。你能推荐一些基于 C/C++ 的书籍吗?我的英语不太好。希望我表达清楚了。
抱歉,limin,我不知道 C/CPP 程序员的好书。
你可以仔细研究一下底层的库,如 LINPACK 或 LAPACK 和 LIBSVM。
谢谢!
很高兴你觉得这篇博文有用,sim。
分享得很好,我六个月前也开始学习 Ng Andrew 的课程。
太好了,hapham!
嗨,Jason,
我是一名研究网络流量的研究员,我发现你关于 R 精通的书对我的流量分析任务帮助很大。请问我能否进一步研究 WEKA 中的 LIBSVM/LINEARSVM/SMO 以及其他有趣的功能……
很高兴听到这个消息,Sharmi。
我非常喜欢 LIBSVM。抱歉,我没有通过 Weak 使用它。
你好,
我是一名医疗保健顾问,可以看到预测分析/基因组分析在不同的医疗保健 IT 解决方案中有很大的发展空间。我曾有微软技术的背景,但在过去的3年里,我更专注于事物的职能方面。我阅读了一些关于机器学习的文章和博客,越来越有兴趣参加一个课程。我想从“Coursera 上 Andrew Ng 的机器学习课程”开始。
我最大的担忧是我从未接触过 Matlab 或 Octave 等编程语言,也没有 R 或 Python 的背景。
您能建议我是否应该参加这门课程并开始学习吗?我对线性代数和微积分还比较熟悉。
谢谢,
Krishna
我最好的建议就在这里
https://machinelearning.org.cn/start-here/#getstarted
感谢您分享数据科学学习的优质资源。我正在寻找数据科学培训,有人建议我加入 https://www.janbasktraining.com/data-science 进行数据科学培训。请问这是否最适合数据科学学习?
我对此一无所知,抱歉。
您说写这篇文章对您来说很难,但我想向您保证,您的努力和时间是值得的。非常感谢您提供如此有用的信息。我确实觉得它很有帮助。我的专业不是机器学习,而是写不同类型的论文,比如廉价简历之类的,但我几个月前对这个主题产生了兴趣。我有一个问题想问您:对于一个完全新手来说,学习至少基础知识需要多长时间?时间对我来说真的很重要。如果我想学东西,我希望尽快成为专家。
我的许多读者通过几周的练习就能变得非常有效——也就是说,他们可以开始为他们的业务增加价值。
内容很棒!Experfy 还有一个机器学习学习路线,包含从入门到高级的课程,还有一个分享数据科学和机器学习想法和信息的博客。欢迎您查看:)
https://www.experfy.com/training/tracks/machine-learning-training-certification
感谢分享。
嗨,Jason,
我发现此网站上的免费机器学习教程系列很容易理解和学习:https://greatlearningforlife.com/?s=machine+learning
感谢分享。
你好,
我需要您对这本书的看法
“Hands On Machine Learning with Scikit-Learn and TensorFlow”
我正在阅读这本书,我想知道您如何评价这本书。
提前感谢。
此致,
Varun
我没有读过,抱歉。
您好,文章很棒!写得很好——这篇文章对每个人都非常有帮助。我希望能阅读更多您的文章!感谢分享这些宝贵的信息!
谢谢!
您好,文章很棒!写得很好——这篇文章对每个人都非常有帮助。我希望能阅读更多您的文章!感谢分享这些宝贵的信息!
感谢您的反馈和支持 M K Singh!
感谢您分享这些信息。这真的很有帮助。
不客气 Mahesh!我们感谢您的支持和反馈!