[IT技术] 机器学习该怎么入门?

[复制链接]
ues6858 发表于 2023-12-28 13:22:22|来自:北京 | 显示全部楼层 |阅读模式
本人大学本科,对机器学习很感兴趣,想从事这方面的研究。在网上看到机器学习有一些经典书如Bishop的PRML, Tom Mitchell的machine learning,还有pattern classification,不知该如何入门?那本书比较容易理解?
全部回复5 显示全部楼层
88h8 发表于 2023-12-28 13:22:42|来自:北京 | 显示全部楼层
谈谈机器学习如何入门,主要分为原理入门,编程理解,实战应用,三个步骤。
首先三点比较重要:
第一、反对上来就给你推荐python,sklearn,pandas之类的,不是培训班广告就是忽悠人。这些东西不适合入门,只适合调包侠
第二、 不推荐任何国内的非知名大学的视频教程。大部分的东西不是抄就是质量太差,有吴恩达的公开课不看去买网课,留着钱买个大鸡腿吃不好吗。
第三、不推荐任何上来就是各种花里胡哨的实战项目,这也是培训班的套路,抓住人就想心急吃热豆腐的心理贪图你的钱包。

大家不要听说机器学习需要高深的数学基础吓跑了,并不是说数学不重要,而是机器学习百分之80的数学,你都在大一或者高中都了解过了,你会求导就会了一大半。培训班很机械地搬出一些机器学习数学基础,概率论,线代,微积分一通乱讲,毫无必要。
第一阶段,原理入门

目标是搞清楚机器学习的基本概念和基本的算法原理。这个阶段的正反馈来自于新知识的获取,原理的理解。不要好高骛远。下面介绍几种入门方法,分别对应看书入门党,看视频入门党,有一些精选的优质资源推荐给初学者。推荐的资源,周志华《机器学习》,李航《统计学习方法》 Peter Harrington 《机器学习实战》吴恩达 Coursra 机器学习公开课
coursera-machine-learning首先看书入门党,周志华和李航老师的西瓜书和统计学习方法都可以,可以快速地看完前几章,不要具体到算法,如果你愿意,看完逻辑回归就可以了,首先明白机器学习问题的定义,其次明白几个关键的名词,训练验证测试,偏差方差,样本,特征,标签。然后去看什么是监督学习什么是无监督学习,大概了解了这些之后,再到具体的算法。再推荐一本书《机器学习实战》绿皮书,这些书的特点就是原理讲的很明白,《机器学习实战》所有的算法都用代码实现了一遍,逻辑清晰很好理解,比那些用sklaern的书强一万倍。
<a data-draft-node="block" data-draft-type="mcn-link-card" data-mcn-id="1222193756365049856">看视频入门党,推荐吴恩达 Coursera 上的《机器学习》,吴恩达老师设计的课程已经非常适合入门了,侧重原理,逻辑清楚,机器学习的细节也面面俱到。

经过上述阶段,你大概对机器学习要解决的问题,使用的方法和适用场景都有所了解了,这时候,你大概对算法的原理也都八九不离十,但是学习原理总是枯燥的,不过一定要坚持下来,千万不要在这个阶段满足于调包。

第二阶段:在编程中理解原理
目标是能够自己动手实现算法的细节而不是用sklearn去调包。正反馈是自己动手从头正确实现机器学习算法。 推荐资源 Peter Harrington 《机器学习实战》吴恩达 Coursra 机器学习公开课编程作业。
这里推荐吴恩达老师机器学习课程的作业,不需要把每个算法都实现一遍,但是要在实践中去理解机器学习的基本算法套路,比如梯度下降是怎么做的,链式法则怎么用程序表达。还有就是《机器学习实战》的配套代码,这本书的最大好处是让你能够用最基本的python语法,从底层上让你构建代码,实现我们常说的比如邮件过滤,数据分类的应用。
很多时候你要写最基本的代码和结构去做这些工作,而不是像sklearn去调用fit 和predit,你能实现算法的底层原理,知道决策树的分割增益计算如何写代码,梯度下降如何写代码,知道机器学习是如何从0到1实现的。
不过这本书比较老旧了,重点也不是讲解理论方面的东西,可以当成第二个阶段的教材,和第一阶段互补。
另外一个是词向量GloVe的代码,为什么推荐GloVe的代码,他是一个用纯c语言写的机器学习做矩阵分解来求解词向量的程序,包含实现随机梯度下降,损失函数定义,数据并行处理等基本的要素,是麻雀虽小,五脏俱全,代码逻辑清晰,涉及到机器学习的方方面面,而且,毫无调包,代码量不大,很容易看懂。
stanfordnlp/GloVe第三阶段,实战应用
目标是把机器学习应用到实际问题中,加深对算法的理解。正反馈来自于使用机器学习工具来解决实际问题。推荐资源Kaggle。
这时候,你对机器学习的原理,实现都有了解了,但是机器学习毕竟是一门应用的科学,我们通过在实战中学习机器学习。所以这个阶段非常适合打比赛。这里比较推荐Kaggle平台,不推荐国内的竞赛平台,除非你想给自己添堵,被排行榜上各种骚操作吓呆。至于怎么玩kaggle,推荐kaggle kernel上的开源讨论,以及一些比较好的Grand Master的分享。如果能翻墙的话,可以看看这些:
youtube kaggle-day 分享第四阶段,精通和创新
这个阶段靠后期大家慢慢积累了,如果你是读硕博的话肯定有自己的研究方向。这个阶段应该也不需要什么推荐了,祝各位能够在自己专注的领域有所突破~

【其他精彩回答】
在文本分类任务中,有哪些论文中很少提及却对性能有重要影响的tricks?
机器学习该怎么入门?
如何向深度学习模型中加入先验知识?
请问深度学习中预训练模型是指什么?如何得到?
各种机器学习算法的应用场景分别是什么(比如朴素贝叶斯、决策树、K 近邻、SVM、逻辑回归最大熵模型)?
为什么在实际的kaggle比赛中,GBDT和Random Forest效果非常好?
如何衡量两个「任意数据集」间的相似度?
为什么 Bert 的三个 Embedding 可以进行相加?
BERT模型可以使用无监督的方法做文本相似度任务吗?
特征工程到底是什么?
Word Embedding 如何处理未登录词?
cyh123321 发表于 2023-12-28 13:23:00|来自:北京 | 显示全部楼层
写这篇文章的初衷是大部分私信我的朋友都想了解如何入门/转行机器学习,搭上人工智能这列二十一世纪的快车。再加上这个问题每隔一阵子就会在知乎时间线上出现一次,因此想写一篇文章来“一劳永逸”的分享我的观点。

  • 原作者: @阿萨姆
  • 原链接:https://zhuanlan.zhihu.com/p/29704017
  • 原出处:知乎
<hr/>文章的宗旨是:

  • 指出一些自学的误区
  • 不过多的推荐资料
  • 提供客观可行的学习表
  • 给出进阶学习的建议
这篇文章的目标读者是计划零基础自学的朋友,对数学/统计基础要求不高,比如:

  • 在读的学生朋友
  • 非计算机行业的读者
  • 已经工作但想将机器学习/数据分析和自己的本职工作相结合的朋友
因此,这篇文章对于已经身处机器学习领域可能帮助不大。同时再次声明这只是我的个人看法,请大家有选择的性阅读,探索适合自己的学习方法。


1. 自学机器学习的误区和陷阱

1.1. 不要试图掌握所有的相关数学知识再开始学习
在很多相关的回答中,我都一再强调不要试图补足数学知识再开始学习机器学习。一般来说,大部分机器学习课程/书籍都要求:

  • 线性代数:矩阵/张量乘法、求逆,奇异值分解/特征值分解,行列式,范数等
  • 统计与概率:概率分布,独立性与贝叶斯,最大似然(MLE)和最大后验估计(MAP)等
  • 优化:线性优化,非线性优化(凸优化/非凸优化)以及其衍生的求解方法如梯度下降、牛顿法、基因算法和模拟退火等
  • 微积分:偏微分,链式法则,矩阵求导等
  • 信息论、数值理论等
一般人如果想要把这些知识都补全再开始机器学习往往需要很长时间,容易半途而废。而且这些知识是工具不是目的,我们的目标又不是成为运筹学大师。建议在机器学习的过程中哪里不会补哪里,这样更有目的性且耗时更低。
1.2. 不要把深度学习作为入门的第一门课
虽然很多人都是冲着深度学习来的,但把深度学习作为机器学习第一课不是个好主意。原因如下:

  • 深度学习的黑箱性更加明显,很容易学得囫囵吞枣
  • 深度学习的理论/模型架构/技巧还在一直变化当中,并未尘埃落定
  • 深度学习实验对硬件要求高,不太适合自学或者使用个人电脑进行学习
更多讨论可以看我的回答:阿萨姆:深度学习的教学和课程,与传统 CS 的教学和课程有什么区别?
1.3. 不要收集过多的资料 & 分辨资料的时效性
机器学习的资料很多,动辄就有几个G的材料可以下载或者观看。而很多朋友都有“收集癖”,一下子购买十几本书的人我也常常能够看到。
机器学习的发展和变化速度很快。在入门期间,建议“小而精”的选择资料,选择近期出版的且口碑良好的书籍。我不止一次的提到这个例子:
在很多深度学习的教科书中,尤其是10年以前的教科书中都还依然把Sigmoid当作默认的激活函数。但事实上,整流函数(ReLu)以及其拓展变形函数,如Leaky
ReLu早就成为了主流的深度学习激活函数。但因为知识的滞后性,很多课程/书籍甚至都没有介绍ReLu的章节。
一般来说,我比较推荐近5年内出版的书籍,或者10年以后出版的书籍。有些书籍虽然是经典,比如Tom Mitchell的《机器学习》,但因为其出版已经超过20年,还是不建议大家购买。
在这篇文章中我所推荐的书籍和课程都相对比较经典,同时属于紧跟时代潮流的。入门阶段我推荐了1门课程和2本书,进阶阶段推荐了1本书,深度学习推荐了1门课程一本书,高级阶段推荐了2本额外书籍。
2. 机器学习的一些前期准备

2.1. 硬件选择
另一个大家常问的问题是:是否可以用自己的笔记本电脑进行机器学习。答案是肯定的,大部分市面上的数据集都可以放到你的内存中运行。在入门阶段,我们很少会用到非常大的数据集,一般最大也就是MNIST,完全可以使用个人笔记本电脑进行运行。
请不要打着学习的名义重新购买机器...
2.2. 软件选择
如果要做深度学习,Linux还是首选,因为其对很多学习模型支持比较好(主要是深度学习的Library)。但即使你使用的是Windows系统,也可以用虚拟机装Ubuntu来进行学习。小型的深度学习模型足够了,大型的深度学习我们很少在本地/个人计算机上运行。
至于编程语言,首推Python,因为其良好的拓展支持性,主流的工具包都有Python版本。在特定情况下,选择R作为编程语言也是可以的。其他可能的语言还包括C++、Java和Matlab,但我个人不大推荐。
此处也想额外提一句,因为编程属于机器学习基本要求之一,所以推荐大家可以自学一些基础编程的知识(如Python),在文中不再赘述。
2.3. 语言能力
学好英语,至少打下阅读和听力的基础。虽然人工智能领域中国现在已经做得很不错,但主流的书籍、期刊和会议,资料都是英文的。我们可以接受翻译版,但最好的方法还是自己有能力直接阅读。即使你将来不做机器学习,英文阅读能力还是会有很大的帮助。
3. 机器学习课程表

3.1. 第一阶段:基础入门(3-6个月)

入门的第一步是学习一些经典课程并配套经典书籍,一般来说这个过程在半年之内比较合适。在这个部分我介绍的课程和书籍都属于难度非常低的,对数学和编程都没什么太大的要求。
3.1.1. 吴恩达Cousera机器学习课程
Andrew Ng的机器学习课程(Machine Learning | Coursera)是很多人的启蒙课程,难度适中且完全免费。Coursera上总共有49285个人给出了评分,平均得分4.9分,满分5分。据我个人观察,大部分Coursera上的课程评分处于4-4.5分之间,能做到4.9分的课程寥寥无几。另一个值得关注的是,这门课有接近五万人给出评分,统计学知识告诉我们这个样本较大所以评分应该趋近于其真实值,比较可信。根据Freecodecamp的统计,这门课是所有在线Machine Learning课程中最受到大家好评的课程。另一个比较直接的观察是如果大家在知乎上搜索“机器学习如何入门?”,大部分答案都提到了Andrew的这门入门课程,所以这是一门绝对的口碑课程。
3.1.2. Python机器学习 & Introduction to Statistical Learning with R
在学习吴恩达的在线课程时,推荐同时阅读相关的机器学习书籍补充理论知识。我再次推荐这两本非常好的入门书籍,在我的专栏也有对于这两本书的介绍。

  • Python机器学习:这本书出版于2015年并多次再版,在亚马逊中国上我们可以找到影印版和翻译版。这本书去掉了大量的数学推导的部分,仅保留了机器学习的核心应用。阅读本书可以快速对如何使用Python机器学习框架Sklearn有一个基本的了解,可以很快上手开始工作。本书涉及的内容很广泛,虽然只有400多页,但内容涉及了数据预处理(Data
    Preprocessing), 维度压缩和核函数(Dimension Reduction &
    Kernel),评估方法如交叉验证,集成学习,情感分析,聚类,甚至还包括了神经网络和Theano。更多介绍:带你读机器学习经典(三): Python机器学习(Chapter 1&2)
  • Introduction to Statistical Learning with R(ISL):相信正在机器学习苦海中遨游的朋友们肯定都听过大名鼎鼎的The
    Element of Statistical Learning,
    这本频率学派的统计学习“圣经”被大家叫做ESL。而ISL正是基于满足更广大阅读人群的目的而推出的;ISL是ESL的入门版,不仅大量的去除了繁复的数学推导,还加入了R编程的部分,方便大家可以尽快上手。这本书是我推荐书单第一名:ISL的电子版是免费的:点击下载。更多介绍:带你读机器学习经典(一): An Introduction to Statistical Learning (Chapter 1&2)
3.1.3. 周志华《机器学习》
周志华老师的《机器学习》也被大家亲切的叫做“西瓜书”。虽然只有几百页,但内容涵盖比较广泛。然而和其他人的看法不同,我建议把西瓜书作为参考书而不是主力阅读书。西瓜书因为篇幅的限制,涵盖了很多的内容但无法详细的展看来讲,对于初学者自学来说实际阅读很大。这本书更适合作为学校的教材或者中阶读者自学使用,入门时学习这本书籍难度稍微偏高了一些。
我个人建议的用法是在学习网课和阅读ISL遇到疑惑时可以参考西瓜书的相关章节,但入门阶段没有必要一章一章的阅读,建议在这个阶段只阅读前十章即可。
3.2. 第二阶段:进阶学习(3-6个月)

在这个阶段,你已经对机器学习有了基本的了解。如果你认真的阅读了ISL并上完了吴恩达的课程,我相信你已经在理论上明白了什么是线性回归,什么是数据压缩,对特征工程以及简单的回归/预测问题有了理论上的基础。这个时候最重要的就是进行实践!
3.2.1. Kaggle挑战赛/练习
Kaggle(Your Home for Data Science)在数据分析领域早已大名鼎鼎,甚至可以说是数据分析第一社区,前一阵子刚刚被谷歌收购。Kaggle上有很多很好的数据集和挑战赛,你可以尝试这些挑战取得名次,甚至拿到奖金,对于将来找工作也非常有帮助。而且Kaggle的另一大优势是网友会分享他们的经验和看法,你也可以提出问题让大家来帮你提出一些修正方法。
国内也有类似的平台,比如天池大数据竞赛,其他类似的平台还包括DataCastle。
使用Kaggle的目的主要是将技能落在实处,防止练就一身屠龙之技。机器学习最大的幻觉就是觉得自己什么都懂了,但等到真的使用时发现并不奏效,而Kaggle是一个低成本的应用机器学习的机会。
3.2.2. Sklearn文档学习
Sklearn(scikit-learn: machine learning in Python)是Python上最流行的机器学习/数据科学工具包,上文介绍的Python
Machine
Learning书中就大量使用Sklearn的API。和使用Kaggle的目的一致,学习的Sklearn的文档也是一种实践过程。比较推荐的方法是把主流机器学习模型Sklearn中的例子都看一遍。
Sklearn的文档是少数写的跟教程一样的技术文档,很具有阅读价值。举个简单的例子,假设你想学习Python中使用逻辑回归,就可以参考: Logistic Regression 3-class Classifier


Sklearn的文档不仅提供了练习数据、sklearn的相关代码实例,还提供了可视化图。
3.2.2. 周志华机器学习
再次提到周老师是因为西瓜书是值得常常翻看的一本书,在kaggle挑战和阅读Sklearn文档的过程中你还会时不时的遇到一些新的名词,比如流形学习(manifold learning)等。这个时候你会发现西瓜书真的是一本中级阶段大而全的书籍:)
3.3. 第三阶段(可选*):深度学习(3-6个月)

因为深度学习是当下的热点,很多公司都在寻找深度学习人才。虽然深度学习只是机器学习的一个子集,但有兴趣朝这个方向发展的朋友可以在完成以上学习后单独学习一下深度学习。
3.3.1. 吴恩达深度学习课程
吴恩达在八月份的时候通过Deeplearning.ai和Coursera平台推出了最新系列的五门深度学习课程(deeplearning.ai)。有条件的朋友可以通过Coursera学习获得证书,最近网易云课堂也上线了这门课的翻译版。如果想要上其中的课程,需要先注册报名「深度学习工程师微专业」 深度学习工程师微专业 - 一线人工智能大师吴恩达亲研-网易云课堂 - 网易云课堂,之后就可以分别点开每门课单独进行学习。和Coursera上的DL同步,现在云课堂也上线了五门中的前三门课程,而卷积网络(CNN)和循环网络(RNN)还未开放。
更多关于网易云课堂上深度学习课程的介绍可以看:阿萨姆:如何评价网易云课堂上线的吴恩达Deep Learning课程?
3.3.2. Deep Learning -  by IanGoodFellow
深度学习这本书是由当下深度学习领域的几位领军人物所著,包含三大巨头之一的Bengio,还有教父Hinton来作序推荐。这本书的中文本翻译由张志华教授团队负责,在github上免费放出了翻译版本,印刷版也可以从亚马逊中国上买到。
英文版:Deep Learning
中文版:exacity/deeplearningbook-chinese
这本书的阅读建议:

  • 为了补充基础可以阅读第1-5章其中也包含了一些数学知识
  • 只关注主流神经网络知识可以阅读6-10章,介绍了DNN/CNN/RNN
  • 需要进一步了解一些调参和应用技巧,推荐阅读11和12章
第13-20章为进阶章节,在入门阶段没有必要阅读。其实比较实际的做法是吴恩达的课程讲到什么概念,你到这本书里面可以阅读一些深入的理论进行概念加深,按章节阅读还是比较耗时耗力的。
3.4. 第四阶段:深入研究

恭喜你!如果你已经完成了上面的计划表,代表你已经有了相当的机器学习能力。这个阶段,最重要的就是不要贪多嚼不烂。如果你浏览知乎,会发现大家都说你必须读Elements
of Statistical Learning,
MLAPP之类的大部头。我承认阅读这样的书会有帮助,但在你有了一定的基础知识后,相信你已经知道自己需要接着做什么了也有了志同道合的朋友,我希望把选择权交还给你,而不是继续推荐成堆的课程和书籍。当然,如果你希望继续深入的话,中文可以继续阅读周志华老师的《机器学习》和李航老师的《统计学习基础》,英文可以入手《Elements
of Statistical Learning》。在这个阶段,重点要形成成体系的知识脉络,切记贪多嚼不烂,切记!
从阅读论文角度来说,订阅Arxiv,关注机器学习的顶级会议,如ICML/NIPS等,相关的方法在知乎上可以很容易搜索到,不在此赘述。
4. 实践经验

4.1. 研究经历
如果你还是学生,尝试尽早接触科研,进实验室。一般来说,大三的时候你应该已经有了基本的机器学习知识,尽管还比较浅。这个时候可以向老师/学长/学姐毛遂自荐进实验室,即使是无偿劳动和做基本的苦力活。进实验室有两个明显的好处:

  • 对某个小方向会有比较深入的了解。一般实验室做纯理论的不大需要本科生,做机器视觉或者自然语言处理(NLP)等小方向的比较需要本科生,所以这是很好的深入了解一个方向的机会。
  • 补充了研究经历也可以明白自己是否适合这个领域。如果运气好的话,你也有可能成为论文的作者之一,甚至可以去开会(公款旅游顺道见一下业内大佬)。这对于继续深造和去国外继续学习都很有帮助,有科研经历和论文是很大的筹码,对于找工作来说也绝对有利无害。
4.2. 企业实习
上文提到过,机器学习光说不练假把式,最好的方法还是要实践。因此,应该先试着做科研,再尝试工业界实习。对待科研机会,有则就上,没有也不是太大的遗憾。我建议大部分做机器学习的朋友尽早实习,主要出于以下几个考量:

  • 打破幻想,了解工业界的主流模型。在其他很多答案中我都提到过,其实工业界用的大部分技术并不酷炫,你很少能看到深度强化学习那种AlphaGo一样酷炫的模型。不夸张的说,广义线性模型(generalized
    linear
    models)还是占据了大壁江山,这要归功于其良好的解释能力。从神经网络角度出发,一般也逃不过普通任务深度网络、视觉任务卷积网络CNN、语音和文字任务LSTM的套路。
  • 补上学术界忽视的内容,比如可视化和数据清洗。工业界的最终目的是输出商业价值,而获得商业洞见的过程其实是非常痛苦的,比如第一步就是令人深恶痛绝的数据清洗。毫不夸张的说,工业界百分之六十的时间都在清理数据,这和学术界干净且规则化的现成数据完全不同。没有在工业界体验过的人,无法真的了解原来机器学习从头到尾有那么多陷阱,泛化能力只是终极目标,而往往我们连规整的数据都无法得到。
  • 了解技术商业化中的取舍,培养大局观。做技术的人往往一头扎进技术里面,而忽视了从全局思考。举个例子,模型A的准确率95.5%,每次训练时间是3天,需要6台有GPU的服务器。而模型B的准确率是百分之95.2%,但只需要一台普通的macbook训练4个小时就可以了。从学术角度出发我们往往追求更好的模型结果选A,而工业界还要考虑到训练开销、模型可解释性、模型稳定度等。到工业界实习不仅可以培养大家的宏观掌控能力,对将来自己带学生控制开销或者选题也大有帮助
4.3. 在本职工作中使用机器学习
对于大部分已经工作的朋友来说,重新回到学校攻读学位并不现实,进研究室进行学习更是缺少机会。那么这个时候,你就可以试着把机器学习应用到你自己的工作当中。
已经有了工作/研究经验的朋友,要试着将自己的工作经历利用起来。举例,不要做机器学习里面最擅长投资的人,而要做金融领域中最擅长机器学习的专家,这才是你的价值主张(value

proposition)。最重要的是,机器学习的基本功没有大家想的那么高不可攀,没有必要放弃自己的本专业全职转行,沉没成本太高。通过跨领域完全可以做到曲线救国,化劣势为优势,你们可能比只懂机器学习的人有更大的行业价值。
举几个我身边的例子,我的一个朋友是做传统软件工程研究的,前年他和我商量如何使用机器学习以GitHub上的commit历史来识别bug,这就是一个很好的结合领域的知识。如果你本身是做金融出身,在你补足上面基本功的同时,就可以把机器学习交叉运用于你自己擅长的领域,做策略研究,我已经听说了无数个“宣称”使用机器学习实现了交易策略案例。虽不可尽信,但对特定领域的深刻理解往往就是捅破窗户的那最后一层纸,只理解模型但不了解数据和数据背后的意义,导致很多机器学习模型只停留在好看而不实用的阶段
5. 写在最后

虽然人们曾说二十一是生物的世纪,但现在还是人工智能的世纪。欢迎大家来试试机器学习,体验数据分析的魅力。
就像我曾在很多回答中提到,机器学习领域应该要敞开大门,让每个人都可以尝试将机器学习知识应用于他们原本的领域,摒弃人为制造的知识壁垒。唯有这样,机器学习技术才能在更多的不同领域落地,从而反哺机器学习研究本身。
科技日新月异,追逐热点是好的。但在这个浮躁的时代,不管选择什么方向最重要的就是独立思考的能力,和去伪存真的勇气。因此,看了这么多入门教程和经验分享后,我最希望的是你既不要急着全盘接受,也不要因为不对胃口全盘否定。慢下来,好好想想,制定适合自己的计划,这大概才是做科学工作的正确态度。
在思考之后,拒绝外界的噪音,无论是鼓励还是嘲笑。抱着“不撞南山不回头”的信念,继续朝机器学习的高峰攀登。
或许,科技领域正因为有了我们这群“书呆子”才显得尤为可爱 ʕ•ᴥ•ʔ
bhtl 发表于 2023-12-28 13:23:25|来自:北京 | 显示全部楼层
入门分两种:1. 应用的级别 2. 科研的级别。
第一种门槛非常低,跟一门公开课,读一本书,用Python的SK-Learn解决一些问题。多做编程实现和练习,很快就能用机器学习的方法解决问题。
第二种是research-level,入门比较难。当然,你把机器学习入门定义为在1.5流会议上灌水,其实倒也不难,比如刘知远写的那个段子。然而找到真正的前沿领域,能推进这个领域的发展,做一些微小的贡献,难度是很大的,而且很难在没有人指导的情况下做到。真正靠谱的方法只有一个:找个靠谱的导师。
oydfe2088 发表于 2023-12-28 13:24:11|来自:北京 | 显示全部楼层
看到没有人提到Metacademy,推荐一发作为入门工具:
Metacademy,以及我个人的一点粗浅看法。
上面有很多答案说得太庞杂了,固然机器学习这个领域有很多的经典资料值得我们花大块时间去研读,但对于一个入门的新人来说如果在一开始就一头扎进这样深不见底的知识海洋之中,难免产生一些挫败感,这样的挫败感对深入学习是不利的,也是不必要的。事实上,在机器学习这个领域里,我们可以说出诸如“演化计算”,“统计关系学习”等上百个关键词,每一个关键词都代表着一个子领域,无论多么优秀的机器学习学家,也不敢说自己对每一个子领域都有相当的了解。
如果对机器学习有兴趣,当拥有最基础的知识之后,就可以尝试对某个感兴趣的子领域展开一些研究,利用问题驱动自己,逐渐形成self-motivation。在解决问题的过程中不断提升自己的视野,提升自己对问题的洞察力和对研究的自信可能是更为重要的。
但在这样的过程中,基础薄弱所带来的问题可能就会浮现:每每你读论文,会遇到许多闻所未闻的概念,这时为了弄清整个论文逻辑,你不得不跑回去先了解这些知识。这样你又一头扎进了知识海洋,在几十个搜出来的网页之间切来切去,尝试弄明白一个个预备知识的预备知识,却不知道这一块块拼图何时才能拼完你最初想读懂的论文。
如果你有一个足够强大又足够耐心的导师,可能会很大程度地帮到你,但大部分的导师不会如此体贴入微——他们只会在大的方向上引导你。这时候我们需要的是一个知识结构上的贴心“导师”,告诉你为了看懂这个概念,哪些知识你需要学,为什么这些知识重要,怎样快速了解这些知识。我们需要一副清晰的知识图谱,以帮助我们最快速地解决我们需要解决的问题。
这是Metacademy的建设初衷。Metacademy会把各个知识点联系起来,就像游戏里的技能树一样。每个知识点有个简介,而且会链接到那些优质的学习资源上,最重要的是,它会画出通向这个知识点的知识图谱。Metacademy的建设目标是“your package manager for knowledge”,但现在上面暂时只集成了一些机器学习和相关的数学知识。
例如我们想了解CNN(convolutional neural nets)这个概念,直接在Metacademy上搜索它:



可以看到这个概念相关的介绍:



其中这门课Coursera: Neural Networks for Machine Learning 想必有很多前辈都会推荐,授课人是深度学习大师Geoffrey Hinton。
我们还可以点击左上角的树状图标查看知识图谱:



一层一层知识间的关系变得清晰起来。再怎么新手,vectors,dot product也是知道的。这样虽然要学的知识量客观上没有改变,但不再是淹没在知识海洋里,而是面对知识的阶梯一步一步向上走。这样的感觉是截然不同的,而在研究过程中,感觉是非常重要的一环。
当然这个Metacademy还很初步,我只是拿它做了个例子。总的来说,机器学习该怎么入门,怎么算入门,各家有各家的说法,我还没有评论的资格。我的想法是,在科技如此发达,知识如此丰富的现代,我们不应感到迷茫,而应换个角度看到道路更宽广,世界更多彩。也许可以把一些冗杂的既有知识暂且放下,多将精力放在那些更值得我们思考的问题上来,或许这样更能不断地在学习和研究中获得正向反馈。
武汉数据网 发表于 2023-12-28 13:24:41|来自:北京 | 显示全部楼层
我要翻译一把quora了,再加点我的理解,我相信会是一个好答案,链接我都放到一起了,没插入到正文中,要求其实比较高了,我觉得我自己都差很远很远~~~我尽量持续更新翻译质量以及自己理解
1. Python/C++/R/Java - you will probably want to learn all of these languages at some point if you want a job in machine-learning. Python's Numpy and Scipy libraries [2] are awesome because they have similar functionality to MATLAB, but can be easily integrated into a web service and also used in Hadoop (see below). C++ will be needed to speed code up. R [3] is great for statistics and plots, and Hadoop [4] is written in Java, so you may need to implement mappers and reducers in Java (although you could use a scripting language via Hadoop streaming [5])
首先,你要熟悉这四种语言。Python因为开源的库比较多,可以看看Numpy和Scipy这两个库,这两个都可以很好的融入网站开发以及Hadoop。C++可以让你的代码跑的更快,R则是一个很好地统计工具。而你想很好地使用Hadoop你也必须懂得java,以及如何实现map reduce
2. Probability and Statistics: A good portion of learning algorithms are based on this theory. Naive Bayes [6], Gaussian Mixture Models [7], Hidden Markov Models [8], to name a few. You need to have a firm understanding of Probability and Stats to understand these models. Go nuts and study measure theory [9]. Use statistics as an model evaluation metric: confusion matrices, receiver-operator curves, p-values, etc.

我推荐统计学习方法 李航写的,这算的上我mentor的mentor了。理解一些概率的理论,比如贝叶斯,SVM,CRF,HMM,决策树,AdaBoost,逻辑斯蒂回归,然后再稍微看看怎么做evaluation 比如P R F。也可以再看看假设检验的一些东西。
3. Applied Math + Algorithms: For discriminate models like SVMs [10], you need to have a firm understanding of algorithm theory. Even though you will probably never need to implement an SVM from scratch, it helps to understand how the algorithm works. You will need to understand subjects like convex optimization [11], gradient decent [12], quadratic programming [13], lagrange [14], partial differential equations [15], etc. Get used to looking at summations [16].
机器学习毕竟是需要极强极强数学基础的。我希望开始可以深入的了解一些算法的本质,SVM是个很好的下手点。可以从此入手,看看拉格朗日,凸优化都是些什么
4. Distributed Computing: Most machine learning jobs require working with large data sets these days (see Data Science) [17]. You cannot process this data on a single machine, you will have to distribute it across an entire cluster. Projects like Apache Hadoop [4] and cloud services like Amazon's EC2 [18] makes this very easy and cost-effective. Although Hadoop abstracts away a lot of the hard-core, distributed computing problems, you still need to have a firm understanding of map-reduce [22], distribute-file systems [19], etc. You will most likely want to check out Apache Mahout [20] and Apache Whirr [21].
熟悉分布计算,机器学习当今必须是多台机器跑大数据,要不然没啥意义。请熟悉Hadoop,这对找工作有很大很大的意义。百度等公司都需要hadoop基础。
5. Expertise in Unix Tools: Unless you are very fortunate, you are going to need to modify the format of your data sets so they can be loaded into R,Hadoop,HBase [23],etc. You can use a scripting language like python (using re) to do this but the best approach is probably just master all of the awesome unix tools that were designed for this: cat [24], grep [25], find [26], awk [27], sed [28], sort [29], cut [30], tr [31], and many more. Since all of the processing will most likely be on linux-based machine (Hadoop doesnt run on Window I believe), you will have access to these tools. You should learn to love them and use them as much as possible. They certainly have made my life a lot easier. A great example can be found here [1].
熟悉Unix的Tool以及命令。百度等公司都是依靠Linux工作的,可能现在依靠Windows的Service公司已经比较少了。所以怎么也要熟悉Unix操作系统的这些指令吧。我记得有个百度的面试题就是问文件复制的事情。
6. Become familiar with the Hadoop sub-projects: HBase, Zookeeper [32], Hive [33], Mahout, etc. These projects can help you store/access your data, and they scale.

机器学习终究和大数据息息相关,所以Hadoop的子项目要关注,比如HBase Zookeeper Hive等等
7. Learn about advanced signal processing techniques: feature extraction is one of the most important parts of machine-learning. If your features suck, no matter which algorithm you choose, your going to see horrible performance. Depending on the type of problem you are trying to solve, you may be able to utilize really cool advance signal processing algorithms like: wavelets [42], shearlets [43], curvelets [44], contourlets [45], bandlets [46]. Learn about time-frequency analysis [47], and try to apply it to your problems. If you have not read about Fourier Analysis[48] and Convolution[49], you will need to learn about this stuff too. The ladder is signal processing 101 stuff though.
这里主要是在讲特征的提取问题。无论是分类(classification)还是回归(regression)问题,都要解决特征选择和抽取(extraction)的问题。他给出了一些基础的特征抽取的工具如小波等,同时说需要掌握傅里叶分析和卷积等等。这部分我不大了解,大概就是说信号处理你要懂,比如傅里叶这些。。。
Finally, practice and read as much as you can. In your free time, read papers like Google Map-Reduce [34], Google File System [35], Google Big Table [36], The Unreasonable Effectiveness of Data [37],etc There are great free machine learning books online and you should read those also. [38][39][40]. Here is an awesome course I found and re-posted on github [41]. Instead of using open source packages, code up your own, and compare the results. If you can code an SVM from scratch, you will understand the concept of support vectors, gamma, cost, hyperplanes, etc. It's easy to just load some data up and start training, the hard part is making sense of it all.
总之机器学习如果想要入门分为两方面:
一方面是去看算法,需要极强的数理基础(真的是极强的),从SVM入手,一点点理解。
另一方面是学工具,比如分布式的一些工具以及Unix~
Good luck.
祝好
[1]
http://radar.oreilly.com/2011/04...

[2]
NumPy — Numpy

[3]
The R Project for Statistical Computing

[4]
Welcome to Apache™ Hadoop®!

[5]
http://hadoop.apache.org/common/...

[6]
http://en.wikipedia.org/wiki/Nai...

[7]
http://en.wikipedia.org/wiki/Mix...

[8]
http://en.wikipedia.org/wiki/Hid...

[9]
http://en.wikipedia.org/wiki/Mea...

[10]
http://en.wikipedia.org/wiki/Sup...

[11]
http://en.wikipedia.org/wiki/Con...

[12]
http://en.wikipedia.org/wiki/Gra...

[13]
http://en.wikipedia.org/wiki/Qua...

[14]
http://en.wikipedia.org/wiki/Lag...

[15]
http://en.wikipedia.org/wiki/Par...

[16]
http://en.wikipedia.org/wiki/Sum...

[17]
http://radar.oreilly.com/2010/06...

[18]
AWS | Amazon Elastic Compute Cloud (EC2)

[19]
http://en.wikipedia.org/wiki/Goo...

[20]
Apache Mahout: Scalable machine learning and data mining

[21]
http://incubator.apache.org/whirr/

[22]
http://en.wikipedia.org/wiki/Map...

[23]
HBase -     Apache HBase™ Home

[24]
http://en.wikipedia.org/wiki/Cat...

[25]
grep

[26]
http://en.wikipedia.org/wiki/Find

[27]
AWK

[28]
sed

[29]
http://en.wikipedia.org/wiki/Sor...

[30]
http://en.wikipedia.org/wiki/Cut...

[31]
http://en.wikipedia.org/wiki/Tr_...

[32]
Apache ZooKeeper

[33]
Apache Hive TM

[34]
http://static.googleusercontent....

[35]
http://static.googleusercontent....

[36]
http://static.googleusercontent....

[37]
http://static.googleusercontent....

[38]
http://www.ics.uci.edu/~welling/...

[39]
http://www.stanford.edu/~hastie/...

[40]
http://infolab.stanford.edu/~ull...

[41]
https://github.com/josephmisiti/...

[42]
http://en.wikipedia.org/wiki/Wav...

[43]
http://www.shearlet.uni-osnabrue...

[44]
http://math.mit.edu/icg/papers/F...

[45]
http://www.ifp.illinois.edu/~min...

[46]
http://www.cmap.polytechnique.fr...

[47 ]
http://en.wikipedia.org/wiki/Tim...

[48]
http://en.wikipedia.org/wiki/Fou...

[49 ]
http://en.wikipedia.org/wiki/Con...

快速回帖

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则