如何掌握机器学习? 数据控
来源:新智元 这篇文章要回答的问题是“我该如何开始机器学习”? “我是一个开发者。我读了一些关于机器学习的文章和书,也在Coursera上学习了机器学习课程。但我仍不知道如何开始……” 这听起来是不是很熟悉?开发者给我的来信中,问得最多的问题就是“我要怎样开始机器学习?” 本文中,我会尽可能地把我好的思考都呈现出来。 你会发现,为什么传统上学习机器学习的方法对你来说并不适用。 你会了解到如何翻转整个模型。 你会学习到简单但是有效的矫正方法,你可以用于开始机器学习。 假如你是一名开发者,并且对进入机器学习领域非常感兴趣,为什么不呢?机器学习是当下热门话题,有着强劲吸引力和快速增长潜力。 你肯定已经看过一些博客了,并且也在尝试走得更远,但是厚厚的书又让你望而生畏,那些书,有一些是聚焦数学的、有一些是聚焦理论的、还有一些是聚焦算法的。 你也尝试了一些线上视频课程。在大家最为熟知的网站Coursera上学习斯坦福机器学习线上课程。但是,这并不比图书和博客文章要好多少。因为你看不到为什么会出错,为什么会把这些东西推荐给初学者。 你甚至可能还尝试了一些小型的数据库,或者是参加了一个入门级的Kaggle竞赛。 问题是,你不能把这些从书或线上课程中学到的理论、算法和数学与实际问题联系起来。这是一个巨大的鸿沟。 机器学习的3个应用场景 展望未来,一旦你掌握了对机器学习独特的理解,你的工作会变成什么样?你要如何在日常的工作中使用新学到的机器学习技能? 场景1:一次性模型 你的老板走过来说:“你知道机器学习对吧?你能用去年的客户数据来预测目前我们销售渠道客户转化率是多少吗?我希望在下周的董事会报告中使用这一数据……” 我把这叫做一次性模型。要解决的问题是由老板严格定义的,他给了你一些小型数据,这些数据甚至在Excel中就能得到很好的处理。但是他希望有更准确和可信的预测。 你可以用机器学习来完成,并且,更重要的是,你能够解释结果中所有现象。 场景2:嵌入模型 你和团队正在就一个软件项目收集董事会的要求。其中一个是,软件要支持用户的手写输入。你会很快发现,最好(也能也是唯一可行)的方法是设计并训练一个预测模型,然后嵌入到你的软件产品中。 我把这叫做嵌入模型,里面有许多变量,比如,模型是静态的还是迭代的,是局部的还是通过API远程调用的,但这些都只是细节问题。 在这一场景中,关键的是,你要有发现问题的经验,这些经验使用预测模型可以得到最好的解决,并且,你需要有制造、训练和部署模型的能力。 场景3:深度模型 你开始了一份新工作,并且,你在开发的系统至少由一个预测模型组成。维护系统或者再增加新特征都需要对模型、输入和输出有一个很好的理解。模型准确度是软件产品的一个特征,而你一部分工作就是提升准确度。 比如,作为预发布测试系统的一部分,你必须证明,模型的精确度(用过往的数据来验证)比之前的模型更好。 我把这称为深度模型。人们会希望你建立用于特定某个领域预测的模型,你的日常工作就是使用自己的经验和技巧来提升和证明其准确性。 这些场景让你可以简单地了解,作为机器学习的开发者你需要面对的是什么。这些都是我自己亲身经历过的。 所有的这三个场景清楚地说明了一件事:虽然机器学习是一个很吸引人的领域,对于一个开发者来说,机器学习算法依然是另一个魔术袋,和多线程或者3D图像编程一样。虽然如此,对一系列经典问题来说,确实也存在一些强大的方法,这些方法都是绝对必要的。 对于“我该如何开始”的传统回答 那么,究竟要怎么开始机器学习? 如果你打开一本关于机器学习的书来为这一问题寻找答案,你会震惊的。书里一般都是从定义开始,然后再用前所未有的复杂性来对相关概念和算法进行描述。 定义和数学概念是清晰、简洁和明确的。问题是,你需要先学会那些枯燥的数学知识来进行理解。有一个理由可以解释为什么机器学习在大学中一半都是研究生课程,因为其中包含的“基本原则”要花费几年学习才能掌握。 比如,你需要在这些方面有好基础: 统计 概率 线性代数 多变量统计 微积分 如果你对一些非主流的算法很感兴趣的话,还会更加复杂。 线上课程,比如MOOC和Youtube上的一些视频,都在模仿大学里的授课方式。如果你自身有一些背景,这些方法确实都还不错。但是没有的话,这些其实帮不上忙。 如果你在问答网站,比如Quaro、StackExchange或者Reddit提问怎么开始机器学习,你可能会得到相同的回应。通常,这样的答案都是来自那些同样迷茫的人。 难怪,有一些诚实而又勤奋的开发者在思考如何做时,会认为在真正能够“做”机器学习之前,自己需要重新回到学校,拿一个硕士或者博士学位。 传统的学习方法“错得离谱” 花几秒的时间来思考一下传统的教授机器学习的方法,它是严密且系统性的,表面看起来也是正确的。它怎么会错? 基本的编程(或者,如何扼杀编程初学者) 试想,你是一个年轻的开发者,已经学习了各种各样的编程语言,现在开始学习如何独自开发一个软件。你也对家人和朋友说,自己想要从事每天编程的工作。他们会告诉你,要拿到一份程序员的工作,你首先要有计算机科学的文凭。 于是,你进入了计算机科学系。一个又一个学期过后,你见到了越来越多的难懂的代数、计算和离散数学。你使用的是陈旧的编程语言。于是你对编程的热情开始褪减,对开发软件的信心开始动摇。 也许你也会走到另一个极端。回忆过往,你发现自己并没有学到任何实践、语言、工具等等用于开发软件的技术。 看到教授机器学习的缺陷了吧? 有幸的是,编程出现的时间已经很久了,足够流行,也足够重要,能对经济产生影响,我们还是发现了一些别的方法,能让具有潜力的年轻(或者老的)程序员能学到他们真正需要的技能,比如,要开发一个程序,初学者在计算机或者计算机复杂性等相关理论中埋头苦读是没有用的,甚至深入地学习算法和数据结构的细节,也是没有用的。一些有用的材料(来自算法复杂性和数据科学)会在后来自然出现。也许,会随着聚焦的材料一并出现。 可喜的是,我们有专门的软件工程学位,还有一些类似Codecademy的资源,在上面,你可以通过自己动手编程来学习。 如果一个开发者想要“做”机器学习,他应该花上好几年的还是件,和上万美元来学习数学知识,并获得更好的学位吗? 答案当然是不需要!这里有更好的方法。 更好的途径 在计算机科学中,你不能仅仅是反转一下模型,然后从头到尾学一遍相同的材料就可以了。我的理由是,医院,机器学习课程和图书也差得很远。他们到算法就停止了。 你需要一个自上而下的方法来学习机器学习。在这一方法中,你北京什么医院治疗白癜风北京白癜风专家
|