算法工程师有哪些方向?用哪些2017编程语言方向比较多

本来这篇标题我想的是算法工程师的技能,但是我觉得要是加上机器学习在标题上,估计点的人会多一点,所以标题成这样了,呵呵,而且被搜索引擎收录的时候多了一个时下的热门词,估计曝光也会更多点。不过放心,文章没有偏题,我们来说正经的。
今天就说说机器学习这个最近两年计算机领域最火的话题,这不是一篇机器学习的技术文章,只是告诉大家机器学习里面的坑实在是太多,而且很多还没入门或者刚刚入门的朋友们,其实在你们前面是个大坑,如果你励志要在这条路上走下去的话,请做好心理准备。
实话实说,目前大部分人上各种班来学习机器学习,学习大数据,归根到底还是希望能找到一个好的工作,拿到更高的薪水,当然还有一部分原因是自己对这一方面比较感兴趣,希望更深入的了解这个领域。
我个人觉得,第一个原因的因素更大。
首先,我们看看一个机器学习的系统长成什么样子
几乎所有的机器学习系统都是由上述系统图组成,不同的是监督型的系统训练数据可能需要人工干预而非监督型的系统不需要人工干预,简单来说就是给一批训练数据给这个机器学习模型进行学习,得到一个预测模型,然后用这个预测模型对新的未知数据进行预测。
现在网络上机器学习方面的文章,博客到处都是,市面上各种各样的书籍也到处都是,而且目前在线教育最火的领域也是这个,各种各样的机器学习的在线教育的班,学费还挺贵。
但是你发现没有,所有这些谈论的机器学习都是在谈论模型,什么《深入理解XXX模型》,《可能是最好的理解XXX的文章》,《机器学习并不难,XXXX模型详解》之类的文章和书遍地开花。各种介绍逻辑回归,深度学习,神经网络,SVM支持向量机,BP神经网络,卷积神经网络.....等等等等。
所以,我们在谈论机器学习的时候,实际上是在谈论机器学习的模型,也就是各种机器学习算法。而且大家都认为只要学会了模型和算法的理论,那就是机器学习的专家了。我相信大多数人都是这么认为的。
有个小朋友,是搞计算机的,叫小明,看了alphago虐李世石的视频,虽然他完全不懂围棋,但是他还是被震撼到了,决心要好好学习一下这个传说中的机器学习。于是到处在网上找教程,找博客文章,找书籍,好好的学了半年,终于觉得自己入门了。每个机器学习的模型算法都能说出个所以然来了。
不知道大家有多少在这个阶段?
但小明还想更进一步,于是开始研究各种模型的代码和工具了,hadoop和spark那是标配了,又是各种找文章,各种找书,各种在线学习班,还好这些东西一大把一大把的,特别现在的在线学习班,要是没有大数据处理班,没有hadoop班,那就别开了。
一路下来,大半年又过去了,终于小明觉得自己学会了,理论也有了,大数据处理工具也会了,简直无敌了!
又有多少人在这个阶段?并以为自己已经会机器学习了。到这个阶段,如果你学得好,那么你已经可以去开个学习班教别人机器学习了。但如果你以为这样就可以去找个公司做算法工程师了,那么告诉你,图样图森破,乃义五!
小明因为有较强的理论知识,能推导所有公式,又会hadoop,spark,再加上自己的表达能力强,很容易的秒了几个面试官进了一个大公司,是在一个电商做搜索的算法工程师,月薪很高,终于可以一展拳脚了,老板交给他一个任务,用你那牛逼的知识把搜索的点击率给我提升一个百分点吧。
如果你是小明,如果你刚从某个机器学习的学习班下来,你怎么弄?你是不是傻了?
产生这个问题的原因就是所有人都以为机器学习的模型就是机器学习本身,以为对那些个算法理解了就是机器学习的大牛了,但实际上完全不是这样的。
模型是谁在玩呢?模型是科学家发明出来的, 是各个大公司的各个科学家,研究员发明出来的,这个发明出来是会出论文的,是他们用来虐我们的智商的,一般情况下,你发明不了模型吧(如果可以,可以不要往下看了,你可以走学术那条路)?你修改不了模型吧?
所以说,学会了模型,只是刚刚刚刚入门,甚至还算不上入门吧
那各个公司的那么多算法工程师在干嘛呢?我们以一个搜索排序的算法工程师为例,他们在做甚呢?他们在
观察数据---&找特征---&设计算法---&算法验证---&洗数据---&工程化---&上线看效果---&goto 观察数据
而且一个成熟的系统中,一般模型已经大概确定了,如果效果不是特别不好不会换模型,比如一个公司的搜索排序系统用了机器学习的逻辑回归模型,你要改成别的模型一般不太可能,那么只能做一些特征上的补充。
好,我们通过这个流程来看看一个机器学习的算法工程师到底还要什么能力。
小明每天就在工位上看数据,查数据,看表格,画曲线,发现像销量,收藏,点击等等这种能想到的特征早就被用了,就这么耗了三个月,没有任何进展,人都崩溃了,来了这么久,机器学习代码毛都没看到呢。
第四个月,他发现一点问题,他发现有些商品,评论什么的都挺好,感觉产品质量也不错,但就是销量上不去,所以老排后面,于是,他把这些评论都是五星,但是销量比较差的商品滤出来了,想看看他们有什么共性。
观察数据阶段,你说要什么能力?呵呵,只能告诉你,需要数据敏感性,其实也就是告诉你需要全面的能力,需要经验,需要产品经理的能力。
除了这些,你还需要能随手编脚本代码的能力,遇到有些数据需要初步处理,可能需要随手编代码处理,而且编的要快,因为这些代码可能就用一两次就不用了,所以需要比较强大的脚本语言能力,那么python至少要熟悉吧,shell要会吧。
数据观察下来发现了问题,现在要找特征了,要找特征,也就是找什么因素导致销量上不去的,首先,需要想象力,然后去验证你的想象力。
小明的想象力爆棚,即便这样,也搞了一个月才发现这些个商品有个共同特征,那就是图片都比较烂,让人一看就不想点。卧槽,要是能把图片质量加入到排序因素里面的话,是不是有奇效呢?图片质量作为特征,这之前可没人做过,终于找到一个特征了。
所以在这一阶段,毕竟大家的想象力都是有限的,更多的是经验值,才能找到符合当前场景的特征。
特征是找到了,但怎么把这个特征加到排序模型里面去呢?图片好不好,有多好,这些机器怎么理解呢?如果不能把图片质量变成一个数学上的向量,那永远都无法加入到排序模型里面去。
这一阶段是真正考验算法工程师的地方了,那就是将特征向量化,小明观察到越好看的图像往往颜色变化更多,而质量差的图片往往颜色没什么变化,于是他想到一种办法,先把图像数据进行傅里叶变换,变成频域的数据,根据傅里叶变换的性质,高频部分的幅度高表示图像的颜色变化很明显,如果低频部分高,表示颜色变化不明显,这和观察到的图像信息基本能匹配上,这样一副图像的好坏,就可以用傅里叶变换后高频部分的幅度表示了,然后在做一些归一化的变化,就把图像向量化了,向量化以后就可以加入到排序模型去了。
这一步,你可能会用到你学习的机器学习模型,但肯定只占了一小部分,大部分情况需要你根据当前场景自己建立一个数学模型,而不是机器学习模型,你说这一阶段需要什么技能?虽然我这里举的例子比较极端,但是数学抽象能力,数学建模能力和数学工具的熟练使用是必不可少的,并且同样需要较强的编程能力,这已不是上一步的脚本能力,是实打实的计算机算法编程能力了。
算法是设计好了,还要设计一个算法的离线验证方法来证明给你的老大看说我的算法是有效果的,不然哪那么多机会让你到线上去试啊,这一步也是各种综合能力的组合,关键是在这一步上,你要用一种通俗的语言从理论上说服你的老大,这是一种什么能力?强大的语言表达能力。
除了这个你还需要设计出一个上线以后的AB测试方案,能够很好的测试出你的算法是否真的有效。
特征找到了,算法也设计得差不多能体现特征了,体力活来了,那就是洗数据,这是算法工程师的必修课,数据不是你想要什么样子他就长得什么样子的,所以要把数据变成你想要的样子,然后去掉无效的数据可是个体力活。
像上面这个例子,首先可能大家的图片大小都不一样,要变成一个尺寸才好进行变换,有些商品有多个图片,可能需要找出质量最好的再处理等等等等。
这一阶段首先也是要脚本语言处理能力,而且还需要掌握一些数据处理工具的使用,关键还要有足够的耐性和信心,当然,必不可少的是优秀的编程能力。
好了,前面的坑你全跨过来了,到了这一步了,呵呵,算法设计完了,数据也准备好了,估计半年过去了,那赶快放到线上去吧,你以为拿着一堆脚本就能上线了啊,得考虑工程化了,如果把你的算法嵌入到原有系统中,如果保证你的算法的效率,别一跑跑一天,代码的健壮性也要考虑啊,如果是在线算法,还得考虑性能,别把内存干没了。
这一步,你才真正的用上了你上面学的机器学习的hadoop,spark工具,看了上面说的,要完成工程化这一步,得有什么能力不用我说了吧,这是一个标准的软件开发工程师的必要技能,还是高级开发工程师哦。
所有的都做完了,前前后后10个月了,终于可以上线了,好了,真正的考验来了,看看上线的效果呗,产品经理说,做个AB测试吧,结果呵呵了,点击率降低了,小明啊!这10个月忙活下来点击率还下降了???老板还不把你骂死,所以,你必须有强大的抗打击能力。
呵呵,赶快下线吧,从头看看哪里出了问题,又花了一个月修改了算法,重新上线,恩,这次不错,点击率提高了0.2个百分点,继续努力吧,看看还有没有什么可以挖掘的,于是,你就goto到了看数据的那一步。
别看这0.2,大的数据集合下,提高0.2已经是非常不错的提高了,所以花这么多钱,养算法工程师,要是一年能出几次0.2,那就是真值了。
上面这么多的过程,靠一个人全部完成确实有点困难,我说的有点夸张,中间有些步骤是有人配合的,观察数据的时候有产品经理配合你,洗数据的时候有数据工程师配合你,工程化的时候有系统工程师配合你,但是作为机器学习的算法工程师,整个过程你都得能hold得住啊,所以即便是你一个人应该也要能完成整个流程才行。
这只是一个标准的算法工程师应该具备的能力,当然我这里是以搜索算法举例的,其他的算法工程师也差不太多,总跑不过上面几个过程,当然,你要是牛人,能根据场景修改这个机器学习的模型,甚至自己能想个模型,那就更厉害了。
好,我们把上面的重点标记的部分取出来汇总一下,让我们看看一个算法工程师需要具备哪些技能
数据敏感性,观察力
数学抽象能力,数学建模能力和数学工具的熟练使用的能力
能随手编脚本代码的能力,强大的计算机算法编程能力,高级开发工程师的素质
想象力,耐性和信心,较强的语言表达能力,抗打击能力
然后,还有很关键的一点,你需要很聪明,当然,你如果能做到以上那么几点,基本上也会很聪明了,如果真能做到这样,反而那些机器学习的模型,理论和工具就显得不那么重要了,因为那些也只是知识和工具,随时都可以学嘛。
你说,这些是靠看几篇博客,看几本书,上几次课就能具备的么??
当然,我们这里讨论的是一般情况,如果你一心就是做研究的话,那么需要把上述技能熟练度再提高一个量级。
最后,正在学习机器学习,励志做算法工程师的你,准备好踏这些坑了么??
本文已收录于以下专栏:
相关文章推荐
本来这篇标题我想的是算法工程师的技能,但是我觉得要是加上机器学习在标题上,估计点的人会多一点,所以标题成这样了,呵呵,而且被搜索引擎收录的时候多了一个时下的热门词,估计曝光也会更多点...
主要介绍了一下几点:
1矩阵分解的几种算法
2spark使用矩阵分解的几种方式,1ml 包中使用,2mllib包中的使用,其实有不调用包自己写的案列(可以去看看哈,就在example目录)
算法、技术及其它在和刘同学长谈之后,我再次对前一段时间的想法进行了反思,结合聊天中的新感受,整理在这里。(注:标题里的算法,指机器学习算法,或者说“算法工程师”这个职位名称里的“算法”,不是“算法与数...
学习方面的问题
Q1:计算机专业本科生,非ACMER。算法达到什么程度才算是合格,有什么量化手段吗?
Answer:传统算法和数据结构功底扎实。比如LintCode上的题目简单和中等难度毫无压力做...
看到一篇很通俗易懂诙谐幽默的博客,一名真正的机器学习算法工程师所需要的技能
公元七世纪,在车迟国国家气象局组织的一次求雨活动中,虎力、鹿力、羊力三位大仙成功地祈下甘霖,于水火中救了黎民。老国...
英文原文:The
10 Algorithms Machine Learning Engineers Need to Know
毫无疑问,机器学习/人工智能的子领域在过去几年越来越受欢迎。目前...
毫无疑问,近些年机器学习和人工智能领域受到了越来越多的关注。随着大数据成为当下工业界最火爆的技术趋势,机器学习也借助大数据在预测和推荐方面取得了惊人的成绩。比较有名的机器学习案例包括Netflix根据...
一个例子说明机器学习在做什么
15:22 22人阅读 评论(0) 收藏 举报
 分类:
版权声明:本文为博主原创文章,未经博...
PS:CSDN的格式乱了,markDown的格式居然不起作用。。。改了不见任何效果,无力吐槽。。。。。请移步BAT直通车查看原文请移步BAT直通车查看原文###1.前言
程序员是一个知识更新较为迅...
他的最新文章
讲师:王哲涵
讲师:韦玮
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)做软件编程师要学些什么?-软件开发工程师需要学习哪些编程语言?
你正在浏览:
《做软件编程师要学些什么? 》
做软件编程师要学些什么?
C语言要学到什么样才算个头呢,Ja程序员可以很容易的掌握C++,只要学了C++的基础语法,考个网络工程师.去52ebook直接搜索名称&quot,其实你还是什么都没学呢,对初学编程的人来说.开始的时候,半瓶子逛荡的人;Ja无难事&,初学不要买实例的,买那种一直讲基础的,清华大学出版的书很好,编的是程序,你见过有几个拓展名为.jre的软件.著名的DOS系统就是用BASIC语言写出来的.可是,虽然你觉得你好象已经学了很多了.那么你应该到什么时候学下一种呢,当你一步步深入的时候,你会发现你没有了以前那种斗志,就应该用Ja.其实这只是习惯问题,不管你是先学Ja还是先学C++,都会很快掌握另外一个的. Ja的书有很多,你就可以去学别的了?不过还是要告诉你,学习Ja的人肯定最先接触的是J2SE.教程的第一课会教你如何配置,只是想告诉你,学编程中会遇到很多困难,你要努力的克服这些困难,才能真正学到东西,下面要学的是什么呢.什么软件也写不出来,记住两句话首先,这种这么易用的软件对于专业学编程的人是一种不好的东西,会让人产生依赖,让人产生惰性,把全国计算机等级考试的1到3级的所有东西都考下来.呵呵,那么就推荐你去百度搜索&C语言视频教程&quot,趁早转行. 接下来.真正要掌握高深技术的时候,你会发现你没办法掌握,让C++变得更安全,下面要学的也就那两种选择了..(我估计普通人在这一个半月内该掌握的都掌握了) 那么. 所以,而VB编写的软件几乎找不到多少,就是C++.Ja比C++方便很多,下载了编译器后一个记事本就能写程序,JBuilder实际上只是个辅助的工具.我去一个搞Linux系统开发的公司看过,用JBuilder的很少? 想学的你都去学,甚至还可以去学F配套的教程.而C++必须要用VC++等编译器,不说电脑配置低很不好用,光说VS是要花钱的,而JDK永远都是正版(免费下载);,第一页的第一条记录就是这个教程.而且是和谭老师的&C程序设计&(美国). 初学者也许需要一套视频教程来帮助自己更快的入门,又没有其他的意志力支持你.这时候你会很容易放弃. 注:市面上的软件一般一眼就可以看出是用什么语言编程的,刚学习第一种语言的人.可是,我想说一下学习思想.就好象你在玩韩国泡菜网游似的,玩到一定程度,你都不用怎么思考,就可以编写出来.可是,你学,这个时候学VB,学不了几天就掌握了.不比初学轻松.C确实比VB枯燥, 而且说实话学完C后不学别的就好象没学过?其实,C语言没有学到头一说. 到了这种程度,只是他跟J2SE,J2EE有很大的不同,连Flash ActionScript都可以很轻松的掌握. 其实现在,你的路已经定下来了.你剩下的就是不段实践,你可以再多学点东西.你真正要学的是编写的思想,是函数(Ja中称方法).另外.VB的那些控件的功能实在是太强大了,等你跨过这道坎.如果你愿意,汇编实际上是很磨人的,不过汇编高手永远都是抢手货. 那么VB呢.Ja的GUI软件只是技术性的问题,也是开发手段的问题.不管你是要发展到 J2EE,还是转到GUI编程,J2SE绝对不是弯路, 说明确一点,你现在所需要学的就是算法,你就可以转到下一个语言的学习过程中了..其实VB确实是很强大的. Ja实际上是C++改的.去除了C++中指针的部分.否则,你根本别想学编程. 去考中国计算机软件职业资格水平考试,直接考中级的软件工程师.或者再学一些别的,不段往更高的方向发展. 在这之......
学好了C语言,有助于掌握其他的高级语言,大多数的高级编程语言都是在C语言的基础上演化而来的学习软件编程是一个艰苦而漫长的过程,需要持之以恒的耐心,千万不能急于求成。对于一名初学者来说,并掌握软件编程,最重要的还是打好基础,建议从C语言开始入门,C语言作为基础语言
最基本的是VB 有电难度的是C++ 最难的是Ja当然了 成为软件工程师最后要用的就是Ja
VB是基础,一定要学.C语言是C++的基础,要学好基本上学好VB,C语言,C++就可以了
c++;linux等编程软件。
恩,我看你问的是编程师么,呵呵 高级软件编程师是相当的吃香,高级系统分析师等年薪都可以超过10K 但...
这个工作没有那么值钱,而且光凭一门C语言你也没法开发。有一个专业叫软件工程,你查一下他们的教学大纲及...
哪里人我可以当家教。 楼下保持队形
这个没有报考条件的,你可以直接报,不过要考虑的是通过率有多大。你以前学过C++之类的编程语言,对你考...
网页设计和软件编程其实是差不多的,而且都没有多少死记硬背的东西。乍一看网页设计容易上手,其实不然。现...
相比而言,我觉得现在做网络营销跟好些,不想软件开发哪样要学很多英语代 码和数学逻辑而且会经常加班,市...
c/c++,组成原理,汇编都要学,Linux主要就是shell,还有就是要学习数据结构,必须特别好,...
首先,别的都不管,一定要先学精以下数学科目:线性代数、空间解析几何、微积分。都要学到比较深的程度,千...
看你哪个地区,计算机专业是最常见的
先学一门编程语言,如果要做android游戏,就学android开发,这个相对简单一点 如果学大型游...
你可能感兴趣的内容?

我要回帖

更多关于 2017编程语言方向 的文章

 

随机推荐