转自:https://segmentfault.com/a/1190000005356857python
原本这篇标题我想的是算法工程师的技能
,可是我以为要是加上机器学习
在标题上,估计点的人会多一点,因此标题成这样了,呵呵,并且被搜索引擎收录的时候多了一个时下的热门词,估计曝光也会更多点。不过放心,文章没有偏题,咱们来讲正经的。面试
今天就说说机器学习
这个最近两年计算机领域最火的话题,这不是一篇机器学习的技术文章,只是告诉你们机器学习
里面的坑实在是太多,并且不少还没入门或者刚刚入门的朋友们,其实在大家前面是个大坑,若是你励志要在这条路上走下去的话,请作好心理准备。算法
实话实说,目前大部分人上各类班来学习机器学习,学习大数据,归根到底仍是但愿能找到一个好的工做,拿到更高的薪水,固然还有一部分缘由是本身对这一方面比较感兴趣,但愿更深刻的了解这个领域。shell
我我的以为,第一个缘由的因素更大。编程
首先,咱们看看一个机器学习的系统长成什么样子

几乎全部的机器学习系统
都是由上述系统图组成,不一样的是监督型的系统训练数据可能须要人工干预而非监督型的系统不须要人工干预,简单来讲就是给一批训练数据给这个机器学习模型
进行学习,获得一个预测模型,而后用这个预测模型
对新的未知数据进行预测。segmentfault
如今网络上机器学习方面的文章,博客处处都是,市面上各类各样的书籍也处处都是,并且目前在线教育最火的领域也是这个,各类各样的机器学习的在线教育的班,学费还挺贵。网络
可是你发现没有,全部这些谈论的机器学习都是在谈论模型,什么《深刻理解XXX模型》,《多是最好的理解XXX的文章》,《机器学习并不难,XXXX模型详解》之类的文章和书遍地开花。各类介绍逻辑回归,深度学习,神经网络,SVM支持向量机,BP神经网络,卷积神经网络.....等等等等
。机器学习
因此,咱们在谈论机器学习的时候,其实是在谈论机器学习的模型,也就是各类机器学习算法。并且你们都认为只要学会了模型和算法的理论,那就是机器学习的专家了。我相信大多数人都是这么认为的。工具
有个小朋友,是搞计算机的,叫小明,看了alphago
虐李世石
的视频,虽然他彻底不懂围棋,可是他仍是被震撼到了,决心要好好学习一下这个传说中的机器学习
。因而处处在网上找教程,找博客文章,找书籍,好好的学了半年,终于以为本身入门了。每一个机器学习的模型算法都能说出个因此然来了。oop
不知道你们有多少在这个阶段?
但小明还想更进一步,因而开始研究各类模型的代码和工具了,hadoop和spark那是标配了,又是各类找文章,各类找书,各类在线学习班,还好这些东西一大把一大把的,特别如今的在线学习班,要是没有大数据处理班,没有hadoop班,那就别开了。
一路下来,大半年又过去了,终于小明以为本身学会了,理论也有了,大数据处理工具也会了,简直无敌了!
又有多少人在这个阶段?并觉得本身已经会机器学习了。到这个阶段,若是你学得好,那么你已经能够去开个学习班教别人机器学习了。但若是你觉得这样就能够去找个公司作算法工程师了,那么告诉你,图样图森破,乃义五!
小明由于有较强的理论知识,能推导全部公式,又会hadoop,spark,再加上本身的表达能力强,很容易的秒了几个面试官进了一个大公司,是在一个电商作搜索的算法工程师,月薪很高,终于能够一展拳脚了,老板交给他一个任务,用你那牛逼的知识把搜索的点击率给我提高一个百分点吧。
若是你是小明,若是你刚从某个机器学习的学习班下来,你怎么弄?你是否是傻了?
产生这个问题的缘由就是全部人都觉得机器学习的模型就是机器学习自己,觉得对那些个算法理解了就是机器学习的大牛了,但实际上彻底不是这样的。
模型是谁在玩呢?模型是科学家发明出来的, 是各个大公司的各个科学家,研究员发明出来的,这个发明出来是会出论文的,是他们用来虐咱们的智商的,通常状况下,你发明不了模型吧(若是能够,能够不要往下看了,你能够走学术那条路)?你修改不了模型吧?
因此说,学会了模型,只是刚刚刚刚入门,甚至还算不上入门吧
那各个公司的那么多算法工程师在干吗呢?咱们以一个搜索排序的算法工程师为例,他们在作甚呢?他们在
观察数据--->找特征--->设计算法--->算法验证--->洗数据--->工程化--->上线看效果--->goto 观察数据
并且一个成熟的系统中,通常模型已经大概肯定了,若是效果不是特别很差不会换模型,好比一个公司的搜索排序系统用了机器学习的逻辑回归模型,你要改为别的模型通常不太可能,那么只能作一些特征上的补充。
好,咱们经过这个流程来看看一个机器学习的算法工程师到底还要什么能力。
小明天天就在工位上看数据,查数据,看表格,画曲线,发现像销量,收藏,点击等等这种能想到的特征早就被用了,就这么耗了三个月,没有任何进展,人都崩溃了,来了这么久,机器学习代码毛都没看到呢。
第四个月,他发现一点问题,他发现有些商品,评论什么的都挺好,感受产品质量也不错,但就是销量上不去,因此老排后面,因而,他把这些评论都是五星,可是销量比较差的商品滤出来了,想看看他们有什么共性。
观察数据阶段,你说要什么能力?呵呵,只能告诉你,须要数据敏感性
,其实也就是告诉你须要全面的能力,须要经验,须要产品经理的能力
。
除了这些,你还须要能随手编脚本代码的能力
,遇到有些数据须要初步处理,可能须要随手编代码处理,并且编的要快,由于这些代码可能就用一两次就不用了,因此须要比较强大的脚本语言能力,那么python至少要熟悉吧,shell要会吧。
数据观察下来发现了问题,如今要找特征了,要找特征,也就是找什么因素致使销量上不去的,首先,须要想象力
,而后去验证你的想象力。
小明的想象力爆棚,即使这样,也搞了一个月才发现这些个商品有个共同特征,那就是图片都比较烂,让人一看就不想点。卧槽,要是能把图片质量加入到排序因素里面的话,是否是有奇效呢?图片质量做为特征,这以前可没人作过,终于找到一个特征了。
因此在这一阶段,毕竟你们的想象力都是有限的,更多的是经验值
,才能找到符合当前场景的特征。
特征是找到了,但怎么把这个特征加到排序模型里面去呢?图片好很差,有多好,这些机器怎么理解呢?若是不能把图片质量变成一个数学上的向量,那永远都没法加入到排序模型里面去。
这一阶段是真正考验算法工程师的地方了,那就是将特征向量化,小明观察到越好看的图像每每颜色变化更多,而质量差的图片每每颜色没什么变化,因而他想到一种办法,先把图像数据进行傅里叶变换,变成频域的数据,根据傅里叶变换的性质,高频部分的幅度高表示图像的颜色变化很明显,若是低频部分高,表示颜色变化不明显,这和观察到的图像信息基本能匹配上,这样一副图像的好坏,就能够用傅里叶变换后高频部分的幅度表示了,而后在作一些归一化的变化,就把图像向量化了,向量化之后就能够加入到排序模型去了。
这一步,你可能会用到你学习的机器学习模型,但确定只占了一小部分,大部分状况须要你根据当前场景本身创建一个数学模型,而不是机器学习模型,你说这一阶段须要什么技能?虽然我这里举的例子比较极端,可是数学抽象能力
,数学建模能力
和数学工具的熟练使用
是必不可少的,而且一样须要较强的编程能力
,这已不是上一步的脚本能力,是实打实的计算机算法编程能力
了。
算法是设计好了,还要设计一个算法的离线验证方法来证实给你的老大看说个人算法是有效果的,否则哪那么多机会让你到线上去试啊,这一步也是各类综合能力的组合,关键是在这一步上,你要用一种通俗的语言从理论上说服你的老大,这是一种什么能力?强大的语言表达能力。
除了这个你还须要设计出一个上线之后的AB测试方案,可以很好的测试出你的算法是否真的有效。
特征找到了,算法也设计得差很少能体现特征了,体力活来了,那就是洗数据,这是算法工程师的必修课,数据不是你想要什么样子他就长得什么样子的,因此要把数据变成你想要的样子,而后去掉无效的数据但是个体力活。
像上面这个例子,首先可能你们的图片大小都不同,要变成一个尺寸才好进行变换,有些商品有多个图片,可能须要找出质量最好的再处理等等等等。
这一阶段首先也是要脚本语言处理能力,并且还须要掌握一些数据处理工具的使用
,关键还要有足够的耐性和信心
,固然,必不可少的是优秀的编程能力。
好了,前面的坑你全跨过来了,到了这一步了,呵呵,算法设计完了,数据也准备好了,估计半年过去了,那赶快放到线上去吧,你觉得拿着一堆脚本就能上线了啊,得考虑工程化了,若是把你的算法嵌入到原有系统中,若是保证你的算法的效率,别一跑跑一天,代码的健壮性也要考虑啊,若是是在线算法,还得考虑性能,别把内存干没了。
这一步,你才真正的用上了你上面学的机器学习的hadoop,spark工具,看了上面说的,要完成工程化这一步,得有什么能力不用我说了吧,这是一个标准的软件开发工程师的必要技能,仍是高级开发工程师
哦。
全部的都作完了,前先后后10个月了,终于能够上线了,好了,真正的考验来了,看看上线的效果呗,产品经理说,作个AB测试吧,结果呵呵了,点击率下降了,小明啊!这10个月忙活下来点击率还降低了???老板还不把你骂死,因此,你必须有强大的抗打击能力
。
呵呵,赶快下线吧,从头看看哪里出了问题,又花了一个月修改了算法,从新上线,恩,此次不错,点击率提升了0.2个百分点,继续努力吧,看看还有没有什么能够挖掘的,因而,你就goto到了看数据
的那一步。
别看这0.2,大的数据集合下,提升0.2已是很是不错的提升了,因此花这么多钱,养算法工程师,要是一年能出几回0.2,那就是真值了。
上面这么多的过程,靠一我的所有完成确实有点困难,我说的有点夸张,中间有些步骤是有人配合的,观察数据的时候有产品经理配合你,洗数据的时候有数据工程师配合你,工程化的时候有系统工程师配合你,可是做为机器学习的算法工程师,整个过程你都得能hold得住啊,因此即使是你一我的应该也要能完成整个流程才行。
这只是一个标准的算法工程师应该具有的能力,固然我这里是以搜索算法举例的,其余的算法工程师也差不太多,总跑不过上面几个过程,固然,你要是牛人,能根据场景修改这个机器学习的模型,甚至本身能想个模型,那就更厉害了。
好,咱们把上面的重点标记的部分取出来汇总一下,让咱们看看一个算法工程师须要具有哪些技能
数据敏感性,观察力
数学抽象能力,数学建模能力和数学工具的熟练使用的能力
能随手编脚本代码的能力,强大的计算机算法编程能力,高级开发工程师的素质
想象力,耐性和信心,较强的语言表达能力,抗打击能力
而后,还有很关键的一点,你须要很聪明
,固然,你若是能作到以上那么几点,基本上也会很聪明
了,若是真能作到这样,反而那些机器学习的模型,理论和工具就显得不那么重要了,由于那些也只是知识和工具,随时均可以学嘛。
你说,这些是靠看几篇博客,看几本书,上几回课就能具有的么??
固然,咱们这里讨论的是通常状况,若是你一心就是作研究的话,那么须要把上述技能熟练度再提升一个量级。
最后,正在学习机器学习,励志作算法工程师的你,准备好踏这些坑了么??