:“How do I get started in machine leraning?”
我是一个开发人员。我已经读过机器学习方面的一些书或文章。我在Coursera中学习过机器学习课程。但我仍然不知道如何开始…
这听起来是不是很熟悉?
”how do I get started in machine learning?”是开发人员问我最多的一个问题,我不记得我回答多少次了。
在这篇文章中我拿出我关于这一主题的最好的思考。
- 你会发现为什么传统的学习机器学习的方法不能使你更好的工作。
- 你会发现如何翻转整个传统的学习模型。
- 你会发现我的简单且非常有效的学习方式,并开始你的机器学习之旅。
让我们来看看它…
开发人员对机器学习感兴趣
首先你是一个开发人员,你机器学习很感兴趣。因为这是目前的一个热门话题,这是一个迷人的且快速增长的领域。
你读过一些博客文章。你想深入研究下去,但是书籍看起来太难了,数学集中、理论集中、算法集中。
你尝试学习一些视频课程。很认真的去学习Coursera斯坦福大学机器学习课程。但它没有书籍和详细的博客文章介绍的全面。你不能明白所有的问题,这也正是建议初学者去学习的原因。或许你可能已经尝试一些较小的数据集,也许是入门级Kaggle竞赛。问题是你不能从书籍或课程中连接理论,算法和数学知识去解决问题。这二者间有很大差距。
机器学习工程师
当你展望未来,一旦你对“高深莫测”的机器学习有了一定的了解,你的工作会是什么样子的呢? 你在日常中如何使用机器学习呢?
我想我可以看到,你是一个机器学习工程师。你是一个知道如何“用”机器学习的开发人员。
场景1:一次性模型
老板走过去,说:
嘿,你了解机器学习,对吧? 你能从去年客户数据中预测出我们的销售渠道中现有客户有哪可能会转换吗? 我下周想用它向董事会报告…
我称之为一次性模型。
问题是由你的老板给出,她给你数据是足够小的,用excel足够处理的过来。她想要准确和可靠的预测。
你可以去解决。更重要的是,你可以解释所有相关事项的结果。
场景2:嵌入式模型
你和你的团队在软件项目中从利益相关者那里收集需求。其中有一个要求是,用户能够在软件中手工绘图而且软件可以识别它的形状,并把它变成一个清晰明确的图形并适当标签。
你很快想到解决这个问题的最好的(唯一可行?)方法是设计和训练一个预测模型,并将它嵌入到您的软件产品。我称之为嵌入式模型。有变化(如模型是否是静态的或动态更新,以及是否本地或通过一个API远程调用),但这只是细节。
关键在这个场景中,你有经验去关注一个解决问题的最好预测模型和设计的技能,训练和部署它。
场景3:深度模型
你开始一个新的任务时系统正至少运行一个预测模型。通过维护和添加输入输出数据使系统产生可理解的模型,。模型的精度是一个软件产品的特色,你的一部分工作是去改进它。
例如,作为一个普通预发布系统测试的一部分,你必须证明模型的精度比之前的版本(在历史数据验证)相同或有更好的技能。我称之为深度模型。作为你的日常职责的一部分,您将构建一个深度理解特定的预测模型并利用你的经验和技能提高并验证其准确性。
开发人员:“做“机器学习
这些场景让你看到的是一个开发人员知道如何做机器学习。它们是现实的,因为他们都是我任务中的场景变化,我必须完成。
以上三种场景中做一件事非常清楚。虽然机器学习是一个迷人的领域,一个开发人员的机器学习算法只是另一个开发包的技巧,比如多线程或者3 d图形编程。然而,他们是一群强大的方法,绝对是一个特定类的问题。
传统的回答:“我如何开始?”
So how do you get started in machine learning?
如果你想通过研读一本机器学习方面的书去寻求这个问题的answer,你会得到一个冲击。他们从定义开始,就存在持续不断增加的数学描述概念和复杂的算法。
定义和数学描述是清楚,简洁、明确的。事情是这样的,他们是枯燥,无聊的,而且需要有必要的数学背景才能来解析和解释。
这是机器学习经常在大学作为研究生课题一个原因。这是因为这个“第一原理”的教学方式需要多年的先决条件来理解。
例如,如果你有关于以下几方面的一个良好的基础,这种方式是可取的
- 统计数据
- 概率
- 线性代数
- 多变量统计
- 微积分
但如果你偏离到一些更奇异的和有趣的算法,这种方式会变遭。
普遍的学习方法是这种自底向上的学习方式以及学习固定的机器学习算法的方法。
对于网络公开课在线课程,和YouTube视频中的教学机器课程,如果你有一定的背景或期望获得更高的学位,那还是不错的。但是它不帮助一般的开发人员。
如果你又回到Quora问答论坛, 去询问如何开始,你会被同样的反应打耳光。通常这种反应来自其他迷茫的开发人员。这是一个有着相同的垃圾建议的大回音室,
难怪诚恳努力工作的开发人员认为他们必须回到学校是正确的,他们觉得在做机器学习之前要获得硕士或博士学位资格才可以做。
传统的做法是大错特错!
想想这个自底向上的方法去学习机器学习。它是严谨的、系统的和表面上听起来都是正确的想法。怎么可能错了呢?
自底向上的编程(或如何杀死崭露头角的程序员)
想象你是一个年轻的开发人员。你捡起一些语言,你开始学习如何创建独立的软件。你告诉朋友和家人,你想进入某个个职业,你要计划每天的时间。他们告诉你,在你可以得到一份程序员的工作之前,你需要计算机科学学位。
你得到了一个计算机科学学位。学完后你接触到越来越多的深奥的代数,微积分和离散数学。你使用过时的编程语言。你对编程的热情和构建软件颤抖了起来。
也许你不知怎么让它从一边转化到另一边。回顾过去,你意识到你没有学习关于现代软件开发实践,语言,工具,或任何关于创建和交付的追求。
现在你看到了与你相似的机器学习学习方法吗?
值得庆幸的是,编程已经存在的时间足够长,足够足够流行,是重要的经济,我们已经找到其他方式给崭露头角的年轻或老程序员的技能,他们需要做他们想做的事——例如。创建软件。
一个初级的程序员去搞理论可计算性或计算复杂度,甚至深入细节的算法和数据结构是没有意义的。一些有用的材料可能会来晚。也许与重点的材料相比,更重要重要的是一个工程师可以编程和提供软件。
值得庆幸的是我们有软件工程学位。我们也有如codecademy的资源,通过实际编程学习项目。
如果开发者想要“做”的机器学习,他们真的应该去花几年时间,数万或数十万美元去获得必要的数学和更高的学位?
answer当然不是! 有一个更好的方法。
一个更好的方法
与计算机科学一样,你不能只是自上而下转化模型。
原因是,就像计算机科学课程从来没有覆盖主题开发和交付软件的实际问题,机器学习课程和相关书籍停留在算法介绍。
你需要一个自上而下的机器学习方法。一种方法,你专注于你想要的实际结果:利用实际的机器学习平台和工具使工作真正的端到端。
1。系统进程的可重复结果
一旦你知道了一些工具,它是相对容易的去解决机器学习算法的问题,称它为“可做”。这可能是危险的。
你怎么知道你做了什么? 你怎么知道结果好吗? 你怎么知道结果是基于可靠的数据集?
你需要系统的运行一个机器学习的问题。如一个软件项目,良好的流程可以从一个项目到另一个项目可重复的实现高质量的结果。
考虑这样一个过程你能想到的一些明确的需求,如:
- 这一过程会引导你从端到端,从问题规范演示或部署的结果考虑问题。像一个软件项目,你可以把你做的,但是你可能没有坐的。从一开始就树立了一个明确的项目停止条件,集中精力去完成交付项目。
- 这一过程是循序渐进的,这样你永远知道下一步该做什么。不知道下一步要做什么项目是一个杀手。
- 这一过程保证”好“结果。项目比平均水平高或者足够好的满足需求。
- 这一过程是使用特定工具,编程语言和流行算法。工具,必须适应这个过程。考虑到算法的痴迷,学术界总会有新的和强大的算法的。
有许多伟大的过程,包括一些老的流程,都可以适应您的需要。
例如:
- Knowledge Discovery in Databases (KDD), 我已经适应了这里
- CRISP-DM
- OSEMN
- 其他…
选择或调整这一过程使之最适合你和满足上述需求。
2。把“最好的方法“工具映射到你的进程
机器学习工具和库很多,但在任何一个时间点你必须使用一些最好的映射到您选择的交付结果的过程。
你不想评估和选择任何旧算法或库,你想要的所谓的“最好的方法“这是要给你快速、可靠和高质量的结果和自动化的过程,你可以负担得起。
同样的,你必须自己做出这些选择。如果你问别人,你将会听到他们的偏见,通常他们使用最新的工具。
我有自己的偏见,我喜欢用不同的工具和平台为不同类型的工作。
例如,在上面列出的场景中,我建议以下最佳的工具:
- 一次性的预测模型:Weka平台,因为我可以加载一个CSV,设计一个实验,不需编程很快得到最好的模型(看到我的映射到进程)。
- 嵌入的预测模型:Python与scikit-learn,因为我可以在同一种语言开发模型的部署。IPython是一个很好地工具。MLaaS也是一个面向大数据的选择。
- 深俯冲模型: R与脱字符号包,因为我可以快速和自动尝试很多先进的模型和设计越来越复杂的特征选择,功能工程和使用整个R算法优化实验平台。
在现实中,这三个工具在三种情况取决于情况的细节。
作为开发,你需要学习工具。您还需要学习更好的工具,使它们永远适应你的可重复的过程。
3有针对性的练习半正式的工作产品
如果你擅长通过练习通过开发大量的软件开发。那么该方法在机器学习中会很好。去实践更多的项目。
仔细选择您的训练数据集
你想选择数据集是现实的,而不是人为的。有成百上千的免费日益复杂的数据集。
- 我建议开始小内存中的数据集,如UCI机器学习库。他们是众所周知的,相对干净,一个好的数据集
- 从一些类似Kaggle和知识发现(KDD)杯比赛中获取更大的内存中的数据集,。他们更脏,处理起来需要不同的技能。
坚持表格数据,这就是我建议我所有的学生。
处理图像和文本数据本身是新的和不同的字段(分别为计算机视觉和自然语言处理),要求你学习专业的方法和工具,这些字段。如果这些是你想要的类型的问题或需要然后最好开始工作,还有很好地可用资源。
进入更多细节,具体怎么做,有针对性的练习”机器学习实践的小内存中的数据集UCI机器学习库”。
记录你的结果、建立一个公共投入组合的工作
从每个项目创建并保留半正式的结果(我将结果称为“工作产品”)。我的意思是写你做了什么,你学会了某种独立的文档,这样你可以对未来项目作为参考。
这类似于将一个目录为每个编程项目作为一个开发者和代码重用和想法从以前的项目。它加速了旅程,我强烈推荐它。
保持任何脚本代码,生成的图像,但同样重要的是写您的发现。把它看作类似于代码中的注释。一个独立的可能是一个简单的PPT或文本文件,或者在聚会的演讲或在YouTube上的视频。
保存每个项目在公共版本控制存储库(如GitHub),这样其他初学者可以向你们学习和拓展你的工作。从你的博客链接项目,LinkedIn或何地使用公共投资组合来展示你的技能和能力。
看到更多的在这个重要的概念在我的帖子题为“机器学习建立一个投资组合:完成小重点项目和演示你的技能”。
公共GitHub库正迅速成为一个投资组合的简历在公司的招聘过程实际上关心的技能和成果。
是的,这种方法是针对开发人员
上面我们所提出的方法,您可以使用作为一个开发人员学习,开始和机器学习中取得进步。
很自然你可能有些怀疑这种方法是否真的适合你。让我解决你的一些问题。
您不需要编写代码
你可能是一个web开发人员或类似不编写大量的代码。您可以使用这种方法来开始并应用机器学习。这样的工具Weka很容易设计出机器学习实验和没有任何编程的建立模型。
编写代码可以解锁更多的和不同的工具和功能,但它不是必需的,它不需要放在首位。
你不需要擅长数学
你可以没有统计、概率和线性代数的背景
重要的是,我们不从理论开始,但我们不能忽略它。机器学习问题是上瘾的。追求更好的结果和更准确的预测,你会从任何你能找到的资源,中学习如何提取掘金的智慧去解决你申请的问题。
你不需要一个更高的学位
你可以自己学习,现在,现在。你不需要大量的时间和金钱才能开始工作在机器学习问题。
你不需要大数据
机器学习算法开发和对小数据最好的理解。你回顾在MS Excel数据足够小,加载到内存中,通过在桌面工作站工作。
大数据! =机器学习。你可以使用大数据构建预测模型,但认为这是一种专业化的技能领域。我一般建议我的学生一开始小内存中的数据集时从机器学习。
如果大数据的机器学习是你想要的工作,然后开始。
你不需要很多的时间
我们都有忙碌的生活,但如果你真的想要某样东西,你需要投入时间。
我说过,工作机器学习问题是上瘾。如果你陷入机器学习比赛你会乐意牺牲一个月晚上电视从你的算法中挤几个百分比。
那就是说,如果你从小事做起,一个明确的流程和最佳的工具,你可以在一两个小时从端到端解决数据集,可能分布在一个或两个晚上。一些和你有相同兴趣的组合完成机器学习项目,您就可以开始利用更大的和更有趣的问题。
最大的错误以及如何避免它们
自从我学习机器学习到这个建议的提出已经有接近2年了。在这段时间我看到五个常见的陷阱,我希望你能避免。
- 不采取行动:
- 选择太大的问题:我常看到第一个或第二个数据集开发人员选择太困难。它太大,太复杂或太脏,他们不是为挑战做好准备。可怕的是“失败”杀死了不良动机和开发人员从这个过程。接小问题,你可以完成和写在60分钟。前一段时间你承担更大。
- 从头开始实现算法:我们有算法的实现。这是完成了。至少够你为未来几年做一些有趣的事情。如果你的目标是学习如何开发和交付可靠和准确的预测模型,不花时间从头开始实现算法,使用一个图书馆。另一方面,如果你想专注于算法实现,那么显然让这你的目标和重点。
- 不坚持一个过程:与敏捷软件开发一样,如果你偏离这一过程中,车轮可以脱离你的项目很快,结果常常是一个巨大的混乱。坚持贯彻过程,系统是通过端到端是关键问题。你可以重新审视”有趣的你发现…“作为后续小型(一个”后续工作的想法”部分的帐面价值),但完成和交付过程。
- 不使用资源:有许多伟大的论文、书籍和博客文章在机器学习。您可以利用这些资源来改善你的过程中,使用的工具和你的结果的准确性。使用第三方资源来获得更多的从你的算法和数据集。个问题的算法和构架。一块珍贵的智慧能改变您的项目的进程。记住,如果你采用一个自上而下的过程,理论的后端。花时间去了解你的最终模型。
不要让这些事情发生在你的身上!
你的下一个步骤
我们已经介绍了很多,我希望我开始说服你,你可以开始和机器学习中取得进步。未来的你是一个开发人员,可以做机器学习是非常真实,非常能得到的。
你的下一个步骤是:
更新:看看这个方便的思维导图,总结了重要的概念在这篇文章中(谢谢建议西缅!)。