教你学Python39-程序员的机器学习

 

我如何开始机器学习?

我是开发人员。我已经阅读了一本书或一些有关机器学习的文章。我看了一些Coursera机器学习课程。我仍然不知道如何开始……

这听起来很熟悉吗?

对机器学习书籍和课程感到沮丧吗?

您如何开始进行机器学习?

开发人员在我的时事通讯上问到的最常见问题是:

我如何开始机器学习?

老实说,我不记得我已经回答了多少次了。

在这篇文章中,我提出了关于该主题的所有最佳想法。

  • 您会发现为什么传统的机器学习教学方法对您不起作用。

  • 您将发现如何翻转整个模型。

  • 您会发现我可以使用的简单而有效的解毒剂,可以开始使用。

让我们开始吧……

对机器学习感兴趣的开发人员

您是一名开发人员,并且对进入机器学习感兴趣。那么为何不?目前,这是一个热门话题,并且是一个引人入胜且快速发展的领域。

您阅读了一些博客文章。您试图更深入,但书却令人恐惧。数学专注。注重理论。注重算法。

 

听起来有点熟?您是否尝试过书籍,MOOC,博客文章,仍然不知道如何开始机器学习?

您尝试一些视频课程。您注册并进行经常引用的Coursera Stanford Machine Learning MOOC的诚实尝试。它并不比书籍和详细的博客文章更好。您看不到所有的大惊小怪,为什么建议初学者使用。

您甚至可能尝试过一些小的数据集,也许是入门级的Kaggle竞赛。

问题是您无法将书本和课程中的理论,算法和数学与问题联系起来。差距很大。一个海湾。您应该如何开始机器学习?

机器学习工程师

当您对未来进行思考时,一旦掌握了对机器学习的这种难以理解的理解,您的工作将会是什么样?您每天如何使用新发现的机器学习技能?

我想我能看到。您是机器学习工程师。您是一位知道如何“进行”机器学习的开发人员。

您是否要从开发人员过渡到可以进行机器学习的开发人员?

方案1:一次性模型

您的老板走过去说:

嘿,您知道机器学习,对吗?您能否使用去年的客户数据来预测我们销售渠道中的哪些当前客户可能会转换?我想在下周向董事会的演示中使用它…

我称之为一次性模型。

您的老板已经很好地定义了这个问题。她为您提供数据,如果需要的话,它足够小,可以在MS Excel中查看和理解。她想要准确可靠的预测。

您可以提供。更重要的是,您可以解释结果的所有相关警告。

方案2:嵌入式模型

您和您的团队正在从软件项目的利益相关者那里收集需求。要求用户能够在软件中徒手绘制形状,并要求软件弄清楚它是哪种形状,然后将其转换为清晰明确的版本并适当地标记它。

您很快就会发现解决此问题的最佳方法(也是唯一可行的方法)是设计和训练预测模型并将其嵌入软件产品中。

我称其为嵌入式模型。有很多变化(例如模型是静态的还是更新的,以及它是本地的还是通过API远程调用的),但这仅是细节。

在这种情况下,关键是您有丰富的经验来注意到可以通过预测模型最好地解决的问题,以及设计,培训和部署该模型的技能。

方案3:深入模型

您已经开始了一项新工作,并且您正在使用的系统至少由一个预测模型组成。维护和向该系统添加功能需要了解模型,其输入和输出。模型的准确性是软件产品的功能,您的部分工作将是对其进行改进。

例如,作为常规预发布系统测试的一部分,您必须证明模型的准确性(在对历史数据进行验证时)具有与先前版本相同或更好的技能。

我称之为深层模型。您将被期望对一种特定的预测模型有深刻的了解,并利用您的经验和技能来改善和验证其准确性,这是您日常工作的一部分。

“ 做 ”机器学习的开发者

这些场景让您瞥见成为一名知道如何进行机器学习的开发人员的感觉。它们很现实,因为它们都是我所经历的场景或必须完成的任务的变体。

所有这三种情况都使一件事非常清楚。尽管机器学习是一个引人入胜的领域,但对开发人员而言,机器学习算法只是另一招,例如多线程或3D图形编程。但是,它们是一组强大的方法,对于特定类别的问题绝对是必需的。

传统答案:“ 我如何开始?“

那么您如何开始机器学习呢?

如果您阅读一本有关机器学习的书,以寻求该问题的答案,那么您会感到震惊。它们从定义开始,然后转向对概念和算法的数学描述,这些概念和算法日趋复杂。

对于“我如何开始机器学习”这个问题的传统答案是自下而上的。

定义和数学描述是清晰,简洁且通常是明确的。事实是,它们干燥,枯燥,需要解析和解释所需的数学背景。

机器学习通常被当作大学的研究生课程来教授是有原因的。这是因为这种“首要原则”的教学方法需要多年的先决条件才能理解。

例如,建议您在以下方面有良好的立足点:

  • 统计

  • 可能性

  • 线性代数

  • 多元统计

  • 结石

如果您稍微迷失一些更奇特且有趣的算法,情况将变得更糟。

这种自底向上和算法固定的机器学习方法无处不在。

在线课程,MOOC和YouTube视频模仿了大学教授机器学习的方法。同样,如果您有背景,或者您已经投入了半到完整的十年学习来获得这些更高的学位,那就很棒了。它对您的普通开发人员没有帮助。

如果您不喜欢QuoraStackExchangeReddit之类的问答论坛,而温和地询问如何入门,那么您将得到相同的回答。通常,这种响应来自同样迷失的开发人员。这是一个同样不好建议的大回声室。

难怪试图做正确的事的诚实而勤奋的开发人员认为他们必须重返学校并获得硕士学位或博士学位。在他们有资格“进行”机器学习之前。

传统方法是致命的错误!

考虑一下这种自下而上的教学机器学习方法。它严格而系统,听起来像是表面上的正确想法。怎么可能错了?

自下而上的编程(或如何杀死新兴的程序员)

想象你是一个年轻的开发人员。您已经选择了其中的某种语言,并且开始学习如何创建独立软件。

您告诉朋友和家人您想进入每天编程的职业。他们告诉您,您必须先获得计算机科学学位,然后才能从事程序员工作。

您注册并开始获得计算机科学学位。一个学期以后的学期,您将接触到越来越多的深奥代数,微积分和离散数学。您使用过时的编程语言。您对编程和构建软件摇摇欲坠的热情。

机器学习的传统入门方法在从业者的道路上存在空白。

也许您会以某种方式进入另一端。回顾过去,您会发现您对现代软件开发实践,语言,工具或在创建和交付软件时可以使用的任何东西一无所知。

看到与机器学习教学类似的东西吗?

值得庆幸的是,编程已经存在了很长的时间,已经足够流行并且对经济很重要,因此我们找到了其他方法来使年轻的(或老)程序员拥有他们实际要做的事情(例如创建)所需的技能。软件。

用关于可计算性计算复杂性的理论,甚至是算法和数据结构的更深层次的理论来给发芽的程序员负责,这是没有意义的。其中一些有用的材料(后者有关算法复杂性和数据结构)可能会在以后出现。也许使用集中的材料-但重要的是在已经编程和交付软件的工程师的背景下,而不是孤立地进行。

值得庆幸的是,我们集中了软件工程学位。我们还有诸如codecademy之类的资源,您可以在这里学习编程……是的,实际上是编程。

如果开发人员想“做”机器学习,他们是否真的需要花费数年,数万或数十万美元来获得必要的数学和更高的学位?

答案当然不是!有个更好的方法。

更好的方法

与计算机科学一样,您不能仅仅颠倒模型并自上而下地讲授相同的材料。

原因是,就像一门计算机科学课程永远不会进入涵盖开发和交付软件的实际问题的主题一样,机器学习课程和书籍也远远不够。他们停在算法上。

您需要自上而下的机器学习方法。一种专注于所需实际结果的方法:使用现代且“ 最佳的 ”工具和平台从头到尾处理实际的机器学习问题。

一种更好的学习机器学习的方法,从端到端解决机器学习问题开始。

这就是我认为您的黄砖路的样子。

1.系统过程可重复的结果

一旦您了解了一些工具,就很容易用机器学习算法解决问题并将其称为“ 完成 ”。

这可能很危险。

你怎么知道你完成了?您怎么知道结果好呢?您如何知道结果在数据集上是可靠的?

解决机器学习问题时,您需要保持系统化。这是一个项目,就像软件项目一样,良好的流程可以使高质量的结果在项目之间重复出现。

考虑到这样的过程,您可以想到一些明确的要求,例如:

  • 从头到尾,从问题说明到结果表示或部署的全过程指导。就像一个软件项目一样,您可以认为自己已经完成了,但是可能没有完成。从一开始就牢记最终的交付成果,这将为项目的明确停止奠定明确的条件并集中精力。

  • 逐步执行的过程,以便您始终知道下一步要做什么。不知道下一步该做什么是一个项目杀手。

  • 保证“ 良好 ”结果的过程,例如优于平均水平或足以满足项目需求的过程。对于项目而言,通常需要以已知的置信度可靠地交付良好的结果,而不一定是可能的最佳准确性。

  • 不变于特定工具,编程语言和算法风尚的过程。工具来了又去,过程必须是自适应的。考虑到该领域的算法痴迷,学术界总是出现新的,功能强大的算法。

选择一个系统的,可重复的过程,您可以使用它来始终如一地交付结果。

那里有许多很棒的流程,包括一些您可以适应需要的较旧的流程。

例如:

选择或调整最适合您并满足上述要求的过程。

2.将“ 同类最佳 ”工具映射到您的过程中

机器学习工具和库来来往往,但是在任何时候,您都必须使用最能映射到您选择的交付结果过程的工具。

您不想评估和选择任何旧的算法或库,而是想要所谓的“ 最好的 ”,它将为您提供快速,可靠和高质量的结果,并使您可以执行的大部分过程自动化负担得起。

同样,您将必须自己进行这些选择。如果您问任何人,您将听到他们的偏见,通常是他们使用的最新工具。

我有自己的偏见,并且我喜欢对不同类型的工作使用不同的工具和平台。

例如,在上述情况下,我建议使用以下最佳工具:

  • 一次性预测模型:Weka平台,因为我无需编程即可立即加载CSV,设计实验并立即获得最佳模型(请参阅我在过程上的映射)。

  • 嵌入式预测模型:具有scikit-learn的 Python ,因为我可以使用与部署模型相同的语言来开发模型。IPython是向更广泛的团队展示您的渠道和结果的好方法。MLaaS也是更大数据的一种选择。

  • 深入研究模型:R带有caret软件包,因为我可以快速,自动地尝试许多最新模型,并使用整个R平台设计越来越详细的特征选择,特征工程和算法调整实验。

实际上,这三种工具会根据情况的具体情况在三种情况下泄漏。

将您喜欢的机器学习工具映射到您选择的系统过程中,以解决问题。

与开发一样,您需要研究工具以从中获得最大收益。您还需要保持警惕,如果有可用的更新工具,请使用新的更好的工具,以使它们永远适应您的可重复过程。

3.半正式工作产品的有针对性的实践

通过练习–开发大量软件,您会擅长开发。使用这种熟悉的方法来擅长机器学习。您在每个项目中实践的过程越多,越好(最好是端到端的工作问题)。

仔细选择您的练习数据集

您想选择真实的数据集而不是人为的。有数百个免费数据集,而这些数据集的复杂性在不断提高。

  • 我建议从UCI Machine Learning Repository之类的小型内存数据集开始。它们是众所周知的,相对干净,是您体验新流程和工具时的好地方。

  • 从那里,我会推荐更大的内存数据集,例如来自某些KaggleKDD杯比赛的数据集。它们更加肮脏,需要您集中精力从事更多不同的技能。

坚持使用表格数据,这是我对所有学生的建议。

处理图像和文本数据本身是一个新的不同领域(分别是计算机视觉和自然语言处理),需要您学习这些领域的专门方法和工具。如果这些是您想要或需要解决的问题,那么最好从那里开始,这里有大量可用资源。

在“ UCI机器学习存储库中的小型内存数据集练习机器学习 ”一文中,我将详细介绍如何进行有针对性的练习。

写下您的结果并建立公开的工作档案

创建并保留每个项目的半正式结果(我将结果称为“工作产品”)。我的意思是,将您的工作和所学的内容写到某种独立的文档中,以便您可以参考并在以后的项目和后续项目中利用结果。

这类似于以开发人员的身份为每个编程项目保留一个目录,并重用以前项目中的代码和思想。它大大加快了旅程,我强烈建议您这样做。

保留所有脚本,代码和生成的图像,但是写下您的发现也很重要。可以将其视为类似于代码中的注释。独立的文章可以是简单的PPT或文本文件,也可以像YouTube上的聚会或视频中的演示一样详尽。

完成并完成离散项目,编写结果并构建项目组合。

 

将每个项目保存在公共版本控制存储库(例如GitHub)中,以便其他初学者可以向您学习并扩展您的工作。从您的博客,LinkedIn或任何地方链接到项目,并使用公共资源展示您不断增长的技能和能力。

在我的标题为“ 构建机器学习档案包:完成小型重点项目并展示您的技能 ”的文章中,详细了解这个重要想法。

在真正关心技能和交付成果的公司的招聘过程中,公共GitHub存储库的组合正在迅速成为简历。

是的,此方法适合开发人员

我们上面介绍的是一种方法,您可以作为开发人员使用它来学习,入门并在机器学习中取得进步。

您自然会对这种方法是否真的适合您有所疑问。让我解决您的一些担忧。

您不需要编写代码

您可能是Web开发人员或类似的您不编写大量代码的人。您可以使用这种方法入门并应用机器学习。像Weka这样的工具可以轻松地设计机器学习实验和构建模型,而无需任何编程。

编写代码可以解锁更多和不同的工具和功能,但这不是必需的,也不需要先行。

您不需要精通数学

就像在开发时不需要了解可计算性或Big O表示法来编写代码并发布有用且可靠的软件一样,您可以端对端地解决机器学习问题,而无需统计,概率和线性背景代数

重要的是要注意,我们不是从理论开始的,但是我们不会忽略它。在需要时,潜入并提取出所需的方法或算法。实际上,您将无法阻止自己。原因是,工作中的机器学习问题令人上瘾且费劲。为了获得更好的结果和更准确的预测,您将从可以找到的任何资源中汲取教训,学习足够的知识以提取智慧,从而将其应用于您的问题。

如果您的目标是掌握理论,那么这种方法会更慢且效率更低。这就是为什么当从那个镜头看时它如此不舒服。从成为从事机器学习的开发人员的目标来看,这很有意义。

您不需要更高的学位

没有门将知道这一点。全部可用,您现在就可以自己学习。在开始研究机器学习问题之前,您无需花费大量时间和金钱来获得学位。

如果您决心要获得更高的学位,那为什么不先开始着手解决机器学习问题,并在您完成一小部分已完成的项目后几周或几个月内看看一个学位。您将对领域的范围和喜欢的部分有一个更加清晰的认识。

我确实回去拿了那些更高的学位。我喜欢做研究,但是我喜欢解决实际问题并提供客户实际上更关心的结果。另外,在开始攻读学位之前,我一直在研究机器学习问题,只是我没有意识到自己已经掌握了资源和前进的道路。

这就是我如此热衷于说服像您这样的开发人员相信您拥有立即开始所需的条件的原因之一。

想不开机器学习入门的借口非常容易。

您不需要大数据

已经开发了机器学习算法,并且对小数据有最好的了解。足够小的数据,您可以在MS Excel中进行查看,加载到内存中并在台式工作站上进行浏览。

大数据!=机器学习。您可以使用大数据构建预测模型,但是这可以看作是您对领域的技能专长。我通常建议我的学生在开始机器学习时从内存较小的数据集入手。

如果大数据机器学习是您要工作的领域,请从那里开始。

您不需要台式机超级计算机

的确,诸如深度学习之类的一些最新算法需要非常强大的bazillion核心GPU。它们是功能强大且令人兴奋的算法。它们还是可以解决较小问题的算法,您可以使用台式机CPU计算这些问题。

在可以使用大型计算机之前,您无需等待机器学习的开始。

在您去购买台式超级计算机或租用非常大型的EC2实例之前,可能值得花一些时间来学习如何从这些算法中获得最大收益,以更好地理解较小的数据集。

你不需要很多时间

我们每个人都有忙碌的生活,但是如果您真的想要一些东西,则需要花时间。

我之前已经说过,工作机器学习问题会让人上瘾。如果您被机器学习竞赛所困扰,您将很乐意牺牲一个月的傍晚电视,以从算法中挤出更多的钱。

话虽如此,如果您从一个清晰的过程和一个最佳的育种工具开始,那么您可以在一两个小时之内端到端地工作一个数据集,也许分散在一两个晚上。其中一些功能使您可以在已完成的机器学习项目组合中立于不败之地,可以开始利用它们来解决更大,更有趣的问题。

将其分解为看板中的零食大小任务,并花时间开始。

开发人员犯的最大错误以及如何避免它们

自从我启动机器学习精通以来,近两年来我一直在对该建议进行修改。在那段时间里,我已经看到了五个希望避免的常见陷阱。

  1. 不采取行动:已经全部布置好了,但是我看到很多开发人员没有采取行动。在迷人的研究领域中,看电视或阅读新闻要比建立一种新的宝贵技能容易得多。你可以把一匹马带到水里…

  2. 选择太大的问题:我通常会看到开发人员选择进行工作的第一个或第二个数据集太难了。它太大,太复杂或太脏,他们还没准备好迎接挑战。可怕的是,“失败”扼杀了动机,而开发人员却退缩了。选择您可以完成并在60分钟内完成的小问题。在做更大的事情之前,先做一会儿。

  3. 从头开始实现算法:我们有算法实现。完成。至少足以让您在接下来的几年中做一些有趣的事情。如果您的目标是学习如何开发和提供可靠且准确的预测模型,请不要花时间从头开始实现算法,而要使用库。另一方面,如果您想专注于实现算法,那么请明确将其作为目标并专注于此。

  4. 不坚持流程:与敏捷软件开发一样,如果您偏离流程,那么轮子很快就会脱离您的项目,结果常常是一团糟。从头到尾坚持从头到尾系统地解决问题的过程是关键。您可以将“ 发现的有趣的事情…… ”作为后续的微型项目进行重新访问(本文中的“ 后续工作的想法 ”部分),但要完成流程并交付。

  5. 不使用资源:关于机器学习的大量论文,书籍和博客文章。您可以利用这些资源来改进流程,使用工具和结果准确性。使用第三方资源从算法和数据集中获取更多信息。获取有关问题的算法和框架的想法。智慧可以改变项目的进程。请记住,如果您采用自顶向下的过程,则必须在后端引入理论。花时间了解您的最终模型。

不要让这些发生在您身上!

下一步

我们涵盖了很多领域,希望我能开始说服您,您可以开始并在机器学习方面取得进步。您是一个可以进行机器学习的开发人员的未来,这是非常现实且非常容易获得的。

接下来的步骤是:

  1. 选择一个过程(或仅使用此过程)。

  2. 选择一种工具或平台(或仅使用此工具或平台)。

  3. 选择您的第一个数据集(或仅使用此数据集)。

  4. 在下面的评论中报告并执行!

嘿,您觉得这篇文章有用吗?发表评论!

更新:查阅这张方便的思维导图,总结一下本文中的重要概念(感谢Simeon的建议!)。

 

喜欢点下关注,你的关注是我写作的最大支持

 

 

发布了161 篇原创文章 · 获赞 16 · 访问量 6万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览