机器学习开发者的学习路径

原文链接:Machine Learning for Programmers: Leap from developer to machine learning practitioner


把“单项最优”工具应用到你的处理过程中


        机器学习工具和库在不断变化,但在任何一个单一的时间点,你必须使用一些东西,让它很好地应用到你提供的结果选择过程中。

        你不想评估和选择任何一个过时的算法或者库,你想要所谓的“单项最优”,能给你快速、可靠以及高质量结果的工具或库,并能自动化处理那些和你提供的处理过程一样多的流程。

        同样,你不得不自己做这些选择。如果你问其他人,你会听到他们的偏见,而他们通常使用的是最新工具。

        我也有我自己的偏爱,我喜欢为不同类型的工作使用不同的工具和平台。
        例如,在上面列出的情况下,我会建议使用以下最佳的训练工具:

        1.One-off预测模型:Weka平台,因为我可以加载一个CSV文件,所以在任何时候我都可以不需要任何代码(参见我的映射过程)来设计一个实验并且得到最佳的模型。

        2.Embedded预测模型:Python中的scikit-learn库,因为我可以在开发模型和部署时使用相同的语言。 IPython以一种很好的方式。

        3.Deep-dive模型:R平台扩展包,因为我可以使用整个R平台快速地、自动地尝试很多先进的模型,并设计出更精准的特征选择,特征工程和算法优化实验。


Scenario 1: The one-off model

Your boss walks over and says:

Hey, you know machine learning, right? Can you use the customer data from last year to predict which current customers in our sales pipeline are likely to convert? I want to use it in a presentation to the board next week…

I call this the one-off model.

The problem is well defined by your boss. She gives you the data, which is small enough to look at and understand in MS Excel if you had to. She wants accurate and reliable predictions.

You can deliver. And more importantly, you can explain all the relevant caveats on the results.

Scenario 2: The embedded model

You and your team are collecting requirements from stakeholders on a software project. There is a requirement for the user to be able to freehand draw shapes in the software, and for the software to figure out which shape it is and turn it into a crisp unambiguous version and label it appropriately.

You quickly see that the best (and only viable?) way to solve this problem is to devise and train a predictive model and embed it in your software product.

I call this the embedded model. There are variations (such as whether the model is static or updated, and whether it is local or called remotely via an API), but that’s just detail.

What’s key in this scenario is that you have the experience to notice a problem that is best solved with a predictive model and the skills to devise, train and deploy it.

Scenario 3: The deep model

You have started a new job and the system you are working on is made up of at least one predictive model. Maintenance and the addition of features to this system require an understanding of the model, its inputs and its outputs. The accuracy of the model is a feature of the software product and part of your job will be to improve it.

For example, as a part of regular pre-release system testing, you must demonstrate that the accuracy of the model (when validated on historical data) has the same or better skill than the previous version.

I call this the deep model. You will be expected to build a deep understanding of one specific predictive model and use your experience and skill to improve and verify its accuracy as part of your routine duties.

 

        在实际当中,这三个工具在三个场景中的使用取决于具体的实际情况。

        在一个公共的版本控制库(如GitHub)保存每个项目,这样其他的初学者就可以借鉴你的项目并扩展你的工作。同时把项目链接到你的博客上,如LinkedIn或其它任何地方来证明你增升的技术和能力。


        公共的GitHub库文件很快成为公司招聘过程中,在简历上真正关心技能和成果的方面。
是的,这种方法是专为开发者提供的

        我们上面制定的方法,是作为开发人员的你可以开始学习机器学习并取得进展而使用的方法。

        当然,你可能会对这个方法是否真的适合你而存有一些疑惑。下面,让我来解决你的这些疑虑。

你不需要去写代码

        你可能是一个web开发者或者类似的开发者,你不需要写大量的代码。你能够使用这个方法开始并运用机器学习。比如Weka这样的工具,可以在不需要任何的编程能力条件下,使得设计机器学习实验和建立模型变得非常简单。

        编写代码可以让你掌握更多不同的工具和技能,但是这并不是必须的,并且也不是首要的

你不需要精通数学

        跟开发一样,你不需要懂得关于计算性或大O符号再去编写代码,并上线有用而且可靠的软件,你可以在没有统计学,概率论和线性代数的背景下解决端到端的机器学习问题。

        值得注意的是,我们没有从理论开始,但我们不忽略它。在你需要它的时候,再将方法和算法从中分离出来。事实上,你会忍受不住的。原因是,解决机器学习问题是让人上瘾的。在追求更好的结果和更准确的预测上,你会使用你能够找到的任何资源。学习对你而言,只是提取智慧中的结晶再将其运用到你的问题上而已。

        如果你的目的是掌握理论知识,那么这个方法是慢而低效率的。这就是为什么当通过镜片看世界时会感觉如此不舒服。从机器学习开发者的目标来看,它的意义颇多。

你不需要一个高文凭

        没有一个门卫会有这方面的知识。这些所有的知识都是可以获得的,并且在现在你完全可以自学。在你开始处理机器学习问题之前,你不需要花掉大量的时间和金钱去拿一个学位。

        如果你志在获得更高的学位,为什么不先开始解决机器学习问题,并在几周或几个月后,等你建立了一个完整的小型项目,再回头考虑获得学位的事情。到那时,你不仅会在这个领域的广度上有一个清晰的想法,还会有你非常感兴趣的那部分。

        我后来的确回去了,并且拿到了更高的学位。我喜欢做研究,但我更喜欢处理实际问题并交付客户真正关心的更多的结果。我也是在修学位之前就开始处理机器学习问题的,我没有意识到的是,在我面前已经有了这些资源和这条路。

        这也是我为何如此激情地说服像你这样的开发者的一个原因,你现在有你所需要的资源了,那么开始行动吧。

你不需要大数据

        机器学习算法开发在小数据集上理解最佳。数据足够小,你就可以在微软的Excel中查看,可以加载到内存中并且在桌面的工作空间中处理。

        大数据!=机器学习。你可以使用大数据建立预测模型,但把它当做是你技能领域的一个专长。在机器学习中,我通常建议我的学生使用小内存数据集进行学习。

        如果大数据机器学习是你想要工作的领域,那么从这里开始吧!

你不需要一台超级计算机

        的确,一些最先进的算法,如深度学习确实需要非常强大的多核GPU。他们是强大的、令人兴奋的算法。但它们也可以在小问题上工作,并且你同样可以用你的台式CPU来计算。

        你没有必要在拥有一台大的快速的计算机之前,不开始机器学习。

        在你去买一个桌面超级计算机或租金非常贵的EC2实体之前,你最好把这些时间花在如何将这些算法用在更小更容易理解的数据集上,并从中获取最大利益。

你不需要大量的时间

        我们都有忙碌的生活,但如果你真的想要学到点什么,你需要花点时间。

        我之前说过,处理机器学习的问题是会让人上瘾的。如果你在机器学习竞赛中被超越了,你会很乐意挤出一个月晚上看电视的时间来将你的算法提高几个百分点。

        其实,如果从一开始你就有一个清晰的过程和一个好的工具,那么你可以在一两个小时内处理一个数据集上的端到端问题,也许是花掉一个或两个晚上。事实上,只要其中的几个工具,还有一个完整机器学习项目的文件夹工作空间,你就可以开始解决更大的更有趣的问题了。

        接着在你的看板中把它分解成多个小任务,然后指定时间开始。
开发者如何避免最常见的错误

五个常见的陷阱       

       自从我发起Machine Learning Mastery以来,我一直在给人以不同的忠告将近两年了。在这段时间里,我看到了五个常见的陷阱,希望你可以避免。

       1.不采取行动:一切都安排好了,然而我却看到很多开发者都没有采取行动。看电视或阅读新闻比在一个迷人的领域里获得一个新而有价值的技能更容易。真是“牵马到河易,强马饮水难”啊。  

       2.挑选的问题太大:通常,我发现开发者挑选的第一个或第二个数据集太难工作了。问题太大、太复杂或太嘈杂,他们没有准备好去挑战。可怕的是“失败”抹杀了开发者的动机并且放弃这个过程。所以,要挑选那些你能在1小时内就解决的小问题。在你做更大的事情之前,先去做一下这个吧。     

       3.从零开始实现算法:我们有算法实现。它们已经封装好了。至少能满足你在未来几年里想要做的有趣的事情。如果你的目标是学习如何开发和提供可靠的、准确的预测模型,不要花时间去从零开始实现算法,使用库就行。另一方面,如果你想把重点放在实现算法上,那么就要很清楚地把你的目标和重点放在它上面。   

       4.没有坚持一个过程:与敏捷软件开发一样,如果你偏离了这个过程,车轮可以很快地关闭你的项目,结果往往会造成大的混乱。坚持一个过程,从开始到终止,系统地通过并完成端到端问题才是关键。你可以重新审视“你发现的有趣的事情……”作为一个后续的小项目(在你写下的一个“后续工作想法”部分),但也要完成这个过程并且交付它。

       5.不使用资源:在机器学习领域有很多杰出的论文,书籍和博客文章。你可以利用这些资源来改进你处理的过程,使用的工具和结果的精度。可以使用第三方资源从你的算法和数据集上获取更多的信息。得出算法和问题框架的一个思路。一个智慧的结晶可以改变你项目的流程。记住,如果你采用了自上而下的流程,理论就必须出现在后面。最后再花时间去理解你的终极模型。

       我们已经涵盖了很多方法,我希望可以开始让你相信,你可以开始机器学习并且会有所成就。未来,你成为机器学习开发者的梦想会成为现实,并且也很容易实现。


Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值