前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >周一鸡血 | 编程不好怎么学数据挖掘? | 数说 · 精选

周一鸡血 | 编程不好怎么学数据挖掘? | 数说 · 精选

作者头像
数说君
发布2018-04-08 11:47:25
7170
发布2018-04-08 11:47:25
举报
文章被收录于专栏:数说工作室数说工作室

本文作者谢科,是数说君在知乎认识的一位数据科学大牛,Twitter的Data Scientist,目前正在创业(“用软件定义商家做生意的方式”)。

对于一个编程基础不是很好的学生来说,学习数据挖掘、机器学习之类的并以后从事这样的工作靠谱吗?

文 | 谢科

以下为对匿名用户回答的引用(数说君注:匿名用户指另一位匿名了的用户对该问题的回答)

【你们以为上上公开课就够的?那些东西我看过,Andrew Ng的课什么的,以我的实力一两天就解决了,你觉得能有啥用?那点简单的东西与实际需要解决的问题相比根本不值一提,入门都算不上。觉得上两门公开课实现两个算法就能找着好工作的纯属想多了】

首先求同存异一下:机器学习这玩意容易不起来。毕竟是需要动脑子和经验的东西,没法容易。

但是,“上两门公开课实现两个算法就能找着好工作纯属想多了”这个观点不光不正确,而且很有打击其它同学的倾向,我在下文会解释为什么。

首先为了符合匿名用户对做过ML和DM的要求:笔者也算做过一些肤浅的数据挖掘应用,读书的时候在一些还算靠谱的会议上水过一些文章,目前在Twitter的modeling team做model。找工作的时候常见的该拿的offer也都拿了,全是ML相关的工作。从匿名用户提的问题来看,我该读过的书也都读过。

那么笔者是什么水平呢?

也就刚到上完公开课,有过一些经验的水平。不是笔者自谦,事实就是这么回事,因为我现在回头去看公开课的时候,每次还会有新的收获,学到新的技巧

说到这里,匿名用户的言论“老师还说了,你在面试时说自己学过这个课那个课,人家公司根本看不上。。。”已经完全不适用了,如果一个已经在“人家公司”里工作的人告诉你这句话不成立,那么应该具有一定的说服力。

当然,匿名用户可能会反驳说,你就一个样本而已,也许是你长得特别帅人家公司才要你的呢?

非也,如果你仔细上过Andrew的课,他在结尾处提到:如果你认认真真学完了这些算法,你已经比湾区绝大多数工程师在ML上的造诣高很多了。

此话半点不假。在楼主所在的公司(以及以前呆过的地方),绝大多数工程师不一定了解ML在干些什么。大家充其量了解一些基本的ML概念,仅此而已。但是这并不是说,他们就不能胜任我现在在干的工作了,这也是我想提出与匿名用户观点相左的地方,原因如下

1) 对,你是在念ML的PhD,没有人会怀疑你多聪明你能解多少最优化问题,但是有一点:你的这些特长并不是在日常工作中每时每刻会用上的。我并不是在说这些技能不重要,我只是在说,绝大多数跟ML或者DM相关的应用性工作中,太过于fancy的技能在日常工作中,是派不上太多用常的。按照80/20的原理,80%的日常工作你在倒腾数据,20%的时间才在折腾算法(我猜很多data scientist也会同意我的观点吧)。

如果你常读ESL,那么应该有印象,全世界所有的cpu time大概有80%左右在做linear regression这个简单算法。这很令人意外吗?一点都不,因为LR确实就是最常用的ML技术之一。反过来讲,如果你的LR可以用到了极致,那么你不会KKT条件又怎样,你不明白SVM推导又怎样,难道这样的同学就不可以从事跟LR相关的工作吗?把LR用到极致,不光可以处理非线性的,还可以做大规模的,online的,distributed的,multi-label的,多了去了。可不要忘了,号称最牛逼的Vowpal Wabbit不也就把LR做到了极致吗?所以按照答者的理论,假设John Langford只做LR,他应该滚出ML界了?不是吧,多少公司(至少按照github上他声称的)都在用他写的牛叉哄哄的vowpal wabbit啊

2)对于有数理思维的同学,尤其是编程特别好或者数学底子不错的同学,学起ML来更加容易。即始没有,也没太大关系。说到底,ML里的算法跟算法导论上的算法有很大差别吗?本质上没有,因为算法导论里告诉你的多数是确定性算法,而ESL或者PRML里告诉你的多数是不确定性的算法,但是重点是,它们都是算法,都是给定计算机一套指令,给定特定输入,写出特定输出的过程而已。那么,为什么我们相信每个人都应该能明白算法导论上的东西,但却怀疑,“觉得上两门公开课实现两个算法就能找着好工作纯属想多了”呢?奇怪

3)训练并不是靠时间和地点堆砌的。这里的时间指的是匿名用户指的“每周十七八个小时”,地点则是指“顶级学校”。相反,有效的训练才是真正让人从一个境界到达另一个境界的地方。当然啦,每个阶段都会有更厉害的人,这我见太多了,可是重点是,不能因为“跟那些专门搞机器学习模式识别的优秀研究生比仍然相去甚远”就自认不如或者放弃掉吧?这是个什么样的奇怪理由。也说个个人相关的例子吧,之前的室友是做ML最厉害几个人之一的弟子,他的NIPS的列表一个页面装不满,vision界的publication更是装不下,就这么厉害。于是他碰到了我这个推个LDA还吭哧的弱室友。

但是问题是,这就是停止学习ML的理由吗?

4)究竟机器学习这玩意有多难?是你匿名用户说的那么玄幻吗?

没多难,不是rocket science,认真学多花时间总是可以学成的。同样的问题我以前问过“C语言这玩意有多难?”,后来发现把指针弄明白了以后没多难,不像谭老师讲那么玄乎。“函数式编程这玩意有多难?”,也没多难,坐下来把主要概念看明白了多写写也就会了。

同样道理,机器学习需要的数学里面,能把人绕进去的并不是那么多。有难的吗?有!你需要自己去创造一个算法来beat已有的算法的时候,那是真tm难,但是题主问的是什么呢?“从事这样的工作靠谱吗”,如果我来说的话,靠谱,只要你肯学,把该学的磨会了,你就靠谱了。

重申一下:机器学习没有那么难,但是要创造个新的漂亮的能用的机器学习算法很难。所有需要创新的东西几乎都难,因为你得在没有指导的前提下试很多种东西,恰好试出来一种能work的,这当然难了。问题在于,现实生活中的工作里哪里需要这么多新的东西?非常少,你有一个open mind能随时接受新东西你就已经领先别人一大截了,如果你还能创造出来新的东西(并且是个实用的东西),那不管在哪个公司,你都是一颗新星了。我能想到的需要匿名用户说的那样高水准的机器学习技能的地方,也就那么几个,Google X, NASA, Yahoo labs, MSR。其它地方,题主好好加把劲,还是靠谱的。

5)嫌你打击自信心?当然嫌,至少我嫌,给本身需要信心的人泼冷水这本身就不是什么好事,何况还是在这样公开的场合下。所谓闻道有先后,术业有专攻,你做你的,他做他的,先来后到而已。岂能是因为天资不堪作为理由就停止,尤其扬起鼻子让别人停止

当然,之所以产生了以上这个略有点激动的反驳式答案,是因为我想到了作为一个小弱的自己。幸运的是路上碰到的人们都一直支持多于打击。

然后对于楼主的问题的回答:

请多写代码,一定要写到能娴熟表达自己想法的地步,如果非要加个量的话,那么写个几万行有意义的代码吧。

请多学数学,没事把线性代数和概率都好好学学吧,MIT的这两门公开课都很棒。之后可以入门读读统计学习入门:Introduction to Statistical Learning

再之后慢慢啃ESL:Elements of Statistical Learning: data mining, inference, and prediction. 2nd Edition.

上面两本书都是免费的。

再之后可以慢慢啃PRML,搜搜都有。

然后最后匿名用户说的绝大多数我不同意,但是有一点我仍然是赞同的,如果不花心思和时间,上面那几步看似简单的过程,是没法完成的。

希望我的答案没有太冒犯到匿名用户同学,我只是想用强烈的语气表达我的观点,我希望知乎变成一个多一些支持的地方。每个人在某个阶段都曾经是小白,有的人很幸运走对了方向,有的人不太好运走歪了,但是没有必要因为别人走歪了想调整的时候就觉得人想走捷径。每个人的情况都不一样,你没法知道别人的情况,我也没法知道,premature judgements are bad。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-11-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数说工作室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档