导读:如何像鸟飞过机器学习的山?

作者:木羊同学

来源:大数据DT(ID:hzdashuju)

01  “机器学习好学吗?”

这是我最常听到的一个问题,以前我的回答也简单明了,就两个字,好学。不过,现在我感觉自己好像草率了一点。机器学习还是“好学”的,但再加一个“学习”,不但会变得有点拗口,也让问题更加复杂了。

也许有同学不太同意,说机器学习得先学好数学,数学难道还有好学的吗?

这种观点很有代表性,里面包含了两个问题。第一个问题是,机器学习真得先学好数学吗?而另一个问题则是,数学是不是一定都很难学?

先说这个机器学习吧,我们老是“机器学习机器学习”地挂在嘴边,好像专门有项什么技术就叫这个名字。实际上呢,机器学习只是一个大框,里面装满了各种模型算法,从原理到结构,可能都完全不是一回事。所以,最开始我理解的学习机器学习,就是学习各种模型算法到底都是怎么一回事。

难不难呢?我的回答是,可以很难,也可以没这么难,根据你不同的学习目标,至少有三种难度可以选择:

第一种,如果你想要学完之后开发一种新的模型算法,或者给现有的算法模型增加某种设计以提升性能,这种最难,放眼全世界能做到的人都不太多。

第二种,从数学层面掌握机各种器学习算法的原理和逻辑,通常包括了解各类数学名词术语、推导各种公式等等。这比第一种就是简单太多了,很多开设了机器学习课程的高校就是朝着这个目标制定教学计划的,不过门槛还是挺高的,毕竟要学数学,而数学距离可盐可甜确实还有点远。

第三种,就是掌握机各种器学习算法的原理和逻辑。看着和第二种一样,就是少了“从数学层面”这五个字。有什么差别呢?

差别可大了,这一种着眼于问题,最想知道的是怎样选择合适的模型来解决问题,学习的内容变成了不同的模型有哪些不同的效果,面对问题又该怎样兵来将挡水来土掩。第二种我们说学习难度就已经大大减少,而这第三种和第二种相比,更是折上又打了骨折,难度差别比“买保时捷”和“买保时捷模型”还大。

更重要的是,许多人想学机器学习,想学的不是数学公式,恰恰正是怎样使用,有时还是带着问题学,看看在机器学习这里能不能淘到一把趁手的工具。所以我说,机器学习好学。

02 如何从解决问题的角度学习机器学习

如果学机器学习是为了解决问题,那自然希望学习成本越低越好,学习时间越短越好。而我们也都知道,数学就是个时间黑洞,多少时间扔进去都不一定能听到个响,这也是不少人不太敢碰机器学习的现实原因。

既然这样我们就要问了,有没有不学数学也能用机器学习解决问题的方法呢?

还真有,而且方法不止一种。

第一种,也是比较常见的一种,就是调包

软件工程里面有一项很重要的思想,叫“封装”,你只管根据定义好的接口调用就行了,算法对来说就是一个黑箱。机器学习领域同样已经有一些封装良好的第三方库,譬如说无人不晓的Scikit-Learn,你完全不用接触任何一点模型的数学原理,要做的只有三件事,准备数据、把数据fit给模型、让模型predict。

这里的fit和predict,就是封装好的接口。如果你翻开一本机器学习的书,基本没啥公式都是代码,告诉你这个怎么用那个怎么用,那就属于这一种。

这种方法简单是简单,就是让人有点不放心,加上我们程序员自带的疑心病属性,不出问题还好,出了问题那一定都是第三方库的问题,所以大家觉得还是得知道一点机器学习的基本原理,不能做纯粹的调包侠。

那有没有绕过数学也能了解机器学习原理和逻辑的办法呢?

有,这就是第二种方法。

如果你只是把机器学习当作莫得感情的工具人,那你要学习的重点,是机器学习模型的选择和组合上。前面我们说了,机器学习是一个框,里面堆满了各种奇形怪状的模型算法,也就是说,这是一只工具箱。

那我们就应该给予它工具箱应有的尊重,了解工具箱里的工具都有什么功能,然后根据我们眼前要去处理的问题,选择一款工具,或者组合使用多款工具,最终解决问题。回想一下,你在工具箱里找螺丝批,只会考虑哪支更合适,应该不会想先要了解它们的铸造工艺。

当然,理想很丰满现实很骨感,机器学习模型毕竟不是螺丝批,想要完全不碰数学,又能准确选择所需要的模型,如果你真的去尝试你就会发现,其实难度很大,肯定得首先有一批已经了解了机器学习的数学背景的,又愿意从工具的角度看待机器学习的前人去积累一些学习材料。

现在市面上基本没有从这个角度撰写的教材,我自己尝试写了一本书叫《机器学习算法的数学原理和Python实现》,就是想给大家多一种机器学习的学习方向选择。

03 机器学习工程

回到开篇的问题,机器学习好学吗?

嗯......不太好说。

是的,这是我现在的答案。机器学习没有变,是我变了,准确来说,我对“机器学习”这四个字的理解变了。前面在介绍机器学习的时候,我是怎么说的?我说,机器学习是一个大框,里面装满了各种模型算法。这就是我此前对机器学习的理解。

这个说法对不对呢?

嗯......不太好说。也许不至于一千个人眼里有一千个机器学习,但不同人对机器学习确实存在不同的理解。所以,回答好不好学这个问题,也需要充分考虑上下文。最早我是通过书本了解到的机器学习,所以对我来说,我的理解和书本很相近。

但对于另一些朋友,他们是在生产环境中听到的机器学习,譬如有人告诉他,这个问题用机器学习效果更好,所以,它们更倾向于把“机器学习”看作是一种方法,使用机器学习就是增加一个工作环节,上游的工作环节产生的一些数据,经过“机器学习”的加工处理之后,能够形成一些产品来推送给下游的工作环节。

这些朋友对机器学习的理解,也许太务实了,但也许反而更接近机器学习在生产环境中真实的样子。没准现实还会更现实一点,甚至可能根本就没什么上游下游,只不过是老板告诉你他需要什么,至于怎么达到,采用什么手段,需要建立怎样的上下游配套,全得你自己去想。

前一阵我听几个朋友在那讨论参加数据竞赛到底对学习机器学习有没有帮助,当时我第一反应是奇怪,怎么会没帮助呢?后来我才搞明白了,大家是觉得数据竞赛太理想,要是老板也能像数据竞赛那样准备好数据集、标明数据字段含义,还把要达到的评价指标都事先告诉了你,那只能说明一点,他不是老板,你才是老板。

问题就出在这里。现在市面的机器学习教材,偏理论的也好,偏编程的也好,书的篇章组织大概都是这一章介绍一个模型,下一章又介绍一个模型,基本上都是用各种模型串起了整本书。不妨想象一下,假设你找到一本教材,这本书也真的好,你也真的很努力,知识都理解了,那你能够说已经学会机器学习了吗?

不好说。为什么不好说?因为如果你要解决的是老师提出的问题,那应该没有问题,但如果你要解决的是老板提出的问题,估计你会一脸懵,感觉无从下手,然后怀疑自己学了个假的机器学习。我已经见过太多这样的例子了。

为什么呢?

学了机器学习却不知道实际该怎么用,咋一听好像不可思议,其实就和学开车一样。

如果驾校教的也都是汽车本身,譬如说汽车的结构是什么、发动机是什么、变速箱是什么,你记住了各种各样的专业术语和各种角度的结构视图,现在请你开车上路,你同样无法避免手忙脚乱。为什么呢?很简单,因为你学的叫汽修而不叫驾驶,自然搞不懂开车该先踩油门还是先松离合。

在这一点上,机器学习和软件工程很像。很多人都以为搞开发就是敲代码,学了软件工程才知道编程的其中一个环节。

学界都喜欢提新概念占坑,为了便于大家理解,这里我也提一个新概念,叫“机器学习工程”,就是希望告诉大家,很多人理解的“机器学习”,其实应该叫“机器学习工程”,而模型训练只是机器学习工程的其中一个环节。

04 如何建立机器学习工程

软件工程有个软件生命周期,分好几个阶段,机器学习同样也有这么个生命周期,建立一项机器学习工程,至少也需要完成以下几步:

  • 第一步,是数据采集

我们在学习机器学习时,肯定都要用到数据集,但大家千万别有一个印象,觉得数据集和超市里的大米一样,天然就躺在那里。大米要人来种,数据集同样需要人来整理,工作还不止一步。

首先你得设计数据字段,没错,数据竞赛中你只需要理解数据字段,而真到了自己建立机器学习工程,连字段都是得自己首先设计。

接着,你得采集数据。这项工作不容易,采集什么数据,怎么采,采好以后怎样用,又怎样管理,这一系列大大小小的问题完全可以写一本书。譬如说网上公开数据,你需要使用爬虫,而公司内部数据,你可能又得另外办法,甚至可能需要建设数据基础设施,譬如说现在经常上热搜的数据中台。

  • 第二步,是数据清洗

好了,假设你已经克服重重困难,知道自己需要什么数据,也顺利把数据都采集回来,那么接下来很重要的一步,是数据清洗。这一点和做菜很像,食材你得洗干净了才下锅,不然可能吃坏肚子。

数据也一样,野生的数据有各种问题,最常见的就是缺失值,属于概率性事件,早晚都是要面对的。怎么处理呢,大家研究出来了很多方法,但没有万金油,都得具体问题具体分析。

除了缺失值,其它更怪异的问题还有很多,譬如说还有离群点、异常值这些,这些就好比你群发调查表,总会有一群人坚持不懈地在“性别”一栏填“汉族”一样。

  • 第三步,是特征工程,有人也称之为数据探索

这一步很重要,作用简单来说,就是争取让数据的特点更加突出,能够明显提升模型的性能。

以前有个说法,叫数据决定了机器学习性能的天花板,而模型只是逼近这个天花板。现在好像改了一点,说是特征工程决定了性能的天花板,而参数调优只是逼近这个天花板。不管怎样吧,这一步很重要,也非常需要经验。内容就非常多了,真的需要一本书才能讲清楚。

  • 第四步,是模型训练

这就不多说了,到了这里,才总算看到我们熟悉的景色,现在大家应该能够更清楚,为什么感觉学懂了机器学习,到了真的要去建立机器学习工程,照样会一脸懵,感觉无从下手,怀疑自己学了个假的机器学习。

  • 第五步,是模型部署

一般来说,走到这一步,你手上就已经有了一个模型了,当然,这个模型是不是能发挥作用,达到你或者你老板想要的预期目标,没达到又该怎么办,这都是需要另外讨论的问题。

假设你很顺利,模型也很争气,那现在你就可以把模型部署上线,让模型在生产环境发挥作用。别以为这一步只是仪式性的,同样有许多工程问题和奇葩状况在前面等待着你,就不具体展开了。

以上只是将机器学习工程要做的事简要地列了一下,主要是想让大家明白“机器学习”不只是机器学习,还包括了一系列一点不亚于软件工程的复杂工序,我们姑且称之为机器学习工程。

从学术角度看待机器学习,和从机器学习工程看待机器学习,可能会让你产生截然不同的理解和视野,自然也会对能力提出不同的要求。

对于想了解多一点这方面内容的同学,不妨可以翻翻《机器学习:软件工程方法与实现》《机器学习:应用视角》《Python机器学习系统构建》,对本文提到的许多问题有更深入的探讨,我也正在写一本从机器学习工程角度看机器学习的书,希望早日能向大家报告自己在这方面的一点经验和心得。

关于作者:莫凡,网名木羊同学。娱乐向机器学习解说选手,《机器学习算法的数学解析与Python实现》作者,前沿技术发展观潮者,擅长高冷技术的“白菜化”解说,微信公众号“睡前机器学习”,个人知乎号“木羊”。

《机器学习:软件工程方法与实现》

点击上图了解及购买

转载请联系微信:DoctorData

推荐语:大型金融科技集团资深大数据与机器学习技术专家撰写,基于新近Python版本,将软件工程的思想、方法、工具和策略应用到机器学习实践中,提供高质量的代码设计、可直接复用的源码和工业应用框架,将机器学习理论和实战完成技术最后一公里的落地。

划重点????

干货直达????

  • 盘点最重要的7个Python库

  • 手把手教你用ECharts画饼图和环形图

  • 终于有人把智能语音处理讲明白了

  • 终于有人把5G+人工智能讲明白了

更多精彩????

在公众号对话框输入以下关键词

查看更多优质内容!

PPT | 读书 | 书单 | 硬核 | 干货 讲明白 | 神操作

大数据 | 云计算 | 数据库 | Python | 可视化

AI | 人工智能 | 机器学习 | 深度学习 | NLP

5G | 中台 | 用户画像 1024 | 数学 | 算法 数字孪生

据统计,99%的大咖都完成了这个神操作

????

数学不好,能学好机器学习吗?相关推荐

  1. 英语和数学不好是不是学不了计算机语言,英语和数学不好能学好C语言吗

    很多人都有这样一个疑问:"程序里面全是英文,可是我英语不好能学编程吗?" 当然能!能不能学好C语言跟英语关系不大.这一点英语专业的读者应该最有体会,他们所学的英语知识对学习C语言并 ...

  2. 电脑c语言跟英语关系大吗,英语和数学不好能学好C语言吗

    很多人都有这样一个疑问:"程序里面全是英文,可是我英语不好能学编程吗?" 当然能!能不能学好C语言跟英语关系不大.这一点英语专业的读者应该最有体会,他们所学的英语知识对学习C语言并 ...

  3. 数学不好,进入机器学习领域还有戏吗?

    自从Google的AlphaGo引爆了人工智能这个领域后,大量的人才开始涌入人工智能领域,各大公司也都开始布局人工智能方向.看一个领域的火爆程度,直接看相关职位的招聘人数和平均薪酬即可.就拿各大公司的 ...

  4. python怎么复数乘方开方_孩子数学不好怎么办?怎样让孩子学好数学的方法

    很多孩子一开始上学,对于数学学习有些吃力,而家长朋友心急孩子学习,往往用错方式,其实孩子数学不好,不怪他,抓到原因才好有解决的办法.G老师分享经验,孩子数学学习不好时家长该怎么办? 首先,家长需要重新 ...

  5. 数学不好 学软件测试能学会吗,英语差、数学烂,我还能学好编程吗?

    原标题:英语差.数学烂,我还能学好编程吗? 据小编近期的观察,发现很多小伙伴想学编程,却又犹豫不决,比如: "老师老师,我成绩不好,能学好编程吗?" "我数学不好,逻辑思 ...

  6. 数学不好的人可以学python吗_数学不好的人,适合学习深度学习,机器学习,人工智能吗?...

    我认为要回答这个问题,需要看你想做到什么层次: 调参侠:主要从事企业的算法岗,读论文,写算法,训练模型等工作,主要聚焦于人工智能算法.比如智能驾驶.机器人.医疗等行业应用,研究的是应用需求以及利用理论 ...

  7. 数学不好,可以当程序员么?

    阅读本文大概需要 2.7 分钟. 有读者最近后台问我,说数学不好,可以转行做程序员么,以后的发展会不会受限制? 作为一个数学专业出身,自学转行程序员的过来人,我觉得多少有点话语权. 不过话说回来,虽说 ...

  8. 小白入门:我是如何学好机器学习的?

    作者 | Jae Duk Seo 译者 | Tianyu 编辑 | 夕颜 出品 | AI科技大本营(ID: rgznai100) 在我看来,机器学习是一个计算机科学和数学知识相融合的研究领域.虽然这是 ...

  9. 英语和数学不好可以学python-Day2 怎么学 Python?

    一说到编程,好多人就会自我劝退: 我英语不行! 我数学不行! 其实编程很简单,我曾尝试过,在 3 天时间里教会了多名零基础的高中学生,达到了可以在百度的帮助下,根据自己的想法,去编写程序并运行.排错的 ...

最新文章

  1. Node.js-sublime text3 配置node.js(ERROR: The process node.exe not found.)
  2. vue中textarea标签自适应高度
  3. 《犯罪心理学》读书笔记(part3)--影响犯罪心理形成发展的外部因素
  4. 34个计算机网络易错知识点总结
  5. java统计字符串中每个字符出现的次数_统计字符串出现的次数
  6. iOS获取设备UUID和IDFA
  7. Linux 端口侦听不到,在linux上,如何在不尝试连接的情况下检查端口是否处于侦听状态...
  8. bootloader总体操作设计
  9. python基础系列二:列表
  10. 这 26个中国式创新,征服了全世界
  11. 初识Zigbee协议栈及其安装
  12. Java程序员简历书写
  13. 央视《家有妙招》整理版,共250招,值得收藏
  14. win10系统同时设置静态IP和动态IP
  15. redigo批量lpush/rpush、批量zrem
  16. 安装windows server 2003两种授权模式之间的区别
  17. DTCloud 报表格式
  18. html鼠标放大镜效果,CSS3实现鼠标放大镜和放小镜的效果
  19. StrongSwan IKEv2 搭建Linux 与 Cisco的 GRE Tunnel over IPsec IKEv2
  20. 【_declspec(dllimport)】_declspec(dllimport)

热门文章

  1. C++学习笔记-利用rapidJSON读取JSON数据
  2. C++学习笔记-DLL中动态内存管理
  3. Qt文档阅读笔记-Q_ASSERT的另外一总用法(大佬用法)
  4. JAVA和C++内部类
  5. jasperreport转成html,JasperReport chart导出HTML不能显示chart图
  6. Ubuntu中的密钥环密码与登陆密码不同
  7. python 双向循环链表实现_python实现双向循环链表基本结构及其基本方法
  8. latex 小于_数学公式怎么快速输入?Latex语法了解一下
  9. c++ 操作oracle 最佳方式_oracle备份恢复基础详解
  10. python做的游戏可以导出吗_Python视频教程