金融投资相关的master和phd酷派大神f2们,我想学习数据分析和建模,有什么好书介绍一下吗,望指点一下

对于一个编程基础不是很好的学生来说,学习数据挖掘、机器学习之类的并以后从事这样的工作靠谱吗?
计算机专业的研究生,本科落的太多,现在想好好学,不知道如何下手~~编过的代码不超过千行,不知道该学什么好了,完全失去信心~~
按投票排序
統計基礎比編程基礎更重要。
我是来反对排名第一的匿名用户的一些观点的。对题主的正面回答写在最后以下为对匿名用户回答的引用【你们以为上上公开课就够的?那些东西我看过,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的这两门公开课都很棒。之后可以入门读读统计学习入门:再之后慢慢啃ESL:上面两本书都是免费的。再之后可以慢慢啃PRML,搜搜都有。然后最后匿名用户说的绝大多数我不同意,但是有一点我仍然是赞同的,如果不花心思和时间,上面那几步看似简单的过程,是没法完成的。希望我的答案没有太冒犯到匿名用户同学,我只是想用强烈的语气表达我的观点,我希望知乎变成一个多一些支持的地方。每个人在某个阶段都曾经是小白,有的人很幸运走对了方向,有的人不太好运走歪了,但是没有必要因为别人走歪了想调整的时候就觉得人想走捷径。每个人的情况都不一样,你没法知道别人的情况,我也没法知道,premature judgements are bad最最最后,我们在招intern,如果你是上完了Coursera上的两门公开课(andrew的和Pedro的)而且代码写得还ok(尤其是会scala)的话,我觉得你算很靠谱,我的team欢迎你(用户数据模型组),请私信我你的英文简历================================================抱歉简历已经收满,谢谢各位。将不再回复私信
刚刚毕业从事机器学习相关的工作,先挖个坑,后面来补。==================更新分割线=========================今天正好有些时间,来说一下我自己的看法吧(仅限于互联网行业的算法工程师岗位)。至于我本人嘛,今年刚刚硕士研究生毕业,目前从事算法工程师工作4个多月时间,这四个月里以我的专业水平还是能够较好的完成本职工作的。不过我当时的情况不比题主好,本科在电气学院的电子专业,平时学习的多是模拟电路方面的知识,编程水平只是停留在控制电路用的单片机C语言编程,对于CS领域的东西一无所知。研究生的专业也不是CS,是电子科学与技术,只不过实验室里有些项目会做一些C#的编程,写写客户端之类的,因此接触了一些很浅薄的相关知识。也就是说我拿到机器学习方面工作岗位offer所用到的专业知识全部是研究生阶段所学,而且纯粹是业余时间自学,那么你认为这类岗位对于机器学习理论的要求高吗?真不高那么这类岗位对于应届生的要求是什么,首先你要知道的是企业招聘的是工程师,不是研究员,说明了这个岗位是一个工程岗位,而非研究岗位,因此编程能力肯定是放在第一位的。所以没有办法,题主你必须快速提高自己的编程能力,不过幸运的是,和研发岗位不一样,算法岗位的编程能力是可以通过刷OJ来提高的,以此训练自己的算法思维能力和编码实现能力,而这些足够应付后面的工作了。接下来才是在data science方面专业能力,这部分专业能力会要求你到什么水平呢?答案是入门水平就行了,你所需要具备的知识无外乎于说烂了的几种机器学习模型与方法,至于贝叶斯学派的那套方法个人认为没有必要系统学习(毕竟互联网行业那么大的数据量,方法差不多点就行了,频率学派的东西更直观运算更快,效果上也没啥显著的差别,所以和学术界不一样,概率图模型可是水论文的利器=。=)那么这个岗位和普通的研发工程师岗位有啥比较明显的区别呢,如上面Scott Chen所述,business knowledge很重要,互联网公司往往有着非常丰富的数据,你的工作就是把这些数据玩好,为公司创造价值,因此要求你对公司的业务有非常清晰深刻的了解,在广告算法领域,一个好的idea真的能带来好多好多钱=。=,涉及公司业务,这里就不细说了=。=未完待续,下次有空继续填坑
我觉得机器学习对编程的要求相对而言是比较小的,跟其他方向相比(比如系统、数据库)。通常完成一个机器学习相关的task是这样的:理解问题、定义模型、推导算法、编程实现、实验验证。我个人的经验,编程实现这一块是最容易的。把公式推好之后,敲进代码里即可,工作量比较轻,debug也较容易。不像分布式系统,代码量很大,debug也很难。
机器学习需要一些数学基础才能理解算法背后的意义。通常这些数学基础包含了微积分:比如知道怎么通过导数来找函数的极值线性代数:机器学习里面会经常用到矩阵的乘法,求导等基本的概率统计知识:知道一些常见概率分布的表达式和性质对于计算机方面,需要一定的编程基础和算法数据结构等方面的知识。但是对于计算机专业的学生,这些应该不是问题怎么开始入门机器学呢?当然可以先在网上跟一些公开课。我推荐Andrew Ng的课程作为第一门课,因为这门课内容比较容易,数学也不深,跟起来比较容易。这门课用到的预言是Matlab,或Octave。在这之后,有一门statistical learning的课程(),比较不错,介绍了常见的监督学习和非监督学习的算法,没有深入具体实现细节,但是介绍了具体的使用。这门课程的配套教材也是作者免费放在网上了的,可以下载来看看。这门课程用的语言是R。这个语言的好处在于有很多现成的函数,不需要自己实现算法。学了这两门课就可以开始着手做一些小项目了。我现在做的是生物信息方面的工作,之前不是数学系的也不是计算机系的,基础还不够好,但是可以在工作中慢慢积累。没有人是一开始什么都会的,自己慢慢努力就好。最重要的有兴趣。在这个基础上,如果能够找到一个好的社区,多和人讨论,进步会很快的。
目前排名第一的答案说的部分正确,机器学习的确是博大精深的领域,对计算机和数学能力要求极高。但是,个人认为这个答案有一定误导性,并不是所有机器学习相关的岗位都要求你掌握每一个算法的细节,并不是只有专业搞机器学习的优秀研究生才能从事这个行业。目前业界(我的了解仅限于金融和咨询)还真的有非常多的工作是那位答主所说的“用几个软件调几个library跑跑数据的工作”。我目前正在从事的工作属于data science&consulting的范畴,做的最难的也就仅限于用grid search&cross validation来确定算法的参数,其余大部分时候就是clean data和 "用几个软件调几个library“。个人体会,很多机器学习的相关岗位最看重的反而是对所在行业的business knowledge. 很多时候,features determines the upper limit of your model performance, 而business knowledge对于feature selection来说是非常重要的。举个例子,让你建模来预测某个客户是否会违约,如果没有信用风险相关经验的话,你根本就不知道该选择哪些feature,或者你选择的feature一点都不informative, 在这种情况下任你用多牛逼多高深的算法都是没有用的。相反,假设你有信用风险领域多年的经验,你选择的feature信息量很大(甚至达到了一叶知秋的境界),即使你用很普通的model还是能够跑出好得多得多的结果。我就答主提的问题和排名第一的回答,和一个机器学习的PhD学长(目前在四大之一的咨询部门工作)探讨了下。以下是学长的回答:“(排名第一的答案)主要针对的是研究型工作例如research scientist,金融服务业没人关心。关键是理解business,定义好问题,再找到好的feature。Domain knowledge is far more important than the technology. 试想你将来想说服客户你的模型好,你觉得客户会关心技术细节吗?(排名第一的答案)和很多CS博士一样,太迷信技术的力量,太把技术的细枝末节当回事了。保持好奇心,多多思考模型背后要解决的商业问题,是最重要的。”综上,我觉得题主现在努力还来得及。只是方向上要正确,研究性岗位(或许还包含纯科技公司?)什么的就不要考虑了,往金融、咨询、制造等行业走,一边积累行业知识,一边完善机器学习方面的知识储备(一定要尝试自己写代码!作为计算机专业的学生,题主肯定清楚光看不编是绝对不行的)最后推荐一个非常经典的帖子:以上。==================更新分割线=========================强烈推荐的回答,他从IT从业者的角度给出了自己的看法。有一点我非常认同,就是不应该给需要信心的人泼冷水。
我小学写的VB代码都过千行了……更别说中学开始刷题和本科acm及各种项目的代码量了。现在我机器学习刚入门不久,勉强担任算法工程师。你都对自己失去信心了,机器学习方向再靠谱也跟你没关系了啊。
不太同意最高票的答案,这个思路是做机器学习理论研究的要求,业界只有极少数公司,比如Google等超一流的公司需要这样的功底。大多数公司在处理现实中的真实问题,往往采用极其成熟的方法来解决问题,并不需要对原始算法进行太大改动,只是可能对微小细节进行改进。最重要的仍然是调参数、清洗数据、特征选择等问题。相比更基础的优化、泛函分析等,每个算法的特性,各个模型适用的场景,各种解法的优缺点、分析数据的方法等概念在实际工作中显得更重要。如果是计算机专业,代码不过千行,不管是做工程师,还是数据科学家,都是说不过去的。我自己在国内面试过上百人的机器学习工程师候选人,上过常见公开课、做过实际的相关竞赛、项目、对各个模型的优缺点能够准确理解、对常见评价模型的标准理解清楚的人已经凤毛菱角。目前机器学习、大数据很热,但是大多数候选人的问题是没有实际的经验,关上过公开课还是太不够,因为一门课程总是对一个模型、算法点到即止,很多实际工作中涉及到问题——特别是feature engineering 涉及得非常少。所以想要胜任机器学习工程师,除了涉猎相关课程、论文,实际操作非常重要。
编程基础不好的,数学基础好就行了。两个都不行,就别搞了。关于意愿强就能后天学习迎头赶上之类的问题,如果真的意愿强,%99可能性不会到研究生了,编程基础和数学都不行。剩下那%1的人都在恶补,不会上来问这种问题。
为啥好多人觉得学这个很容易啊...机器学习几乎是对数学和计算机综合水平要求最高的学科了你们以为上上公开课就够的?那些东西我看过,Andrew Ng的课什么的,以我的实力一两天就解决了,你觉得能有啥用?那点简单的东西与实际需要解决的问题相比根本不值一提,入门都算不上。觉得上两门公开课实现两个算法就能找着好工作的纯属想多了-----------------------------------------确实我没上过“好的”公开课,只在几年前看过Andrew Ng和Geoffrey Hinton在Coursera上面开的课,还有那烂尾的UFLDLAndrew Ng的课讲得确实很好 ,我绝无任何贬损他的意思,但那点内容。。。我现在在学校上的模式识别每周作业至少要做十七八个小时,老师评价那几门课的原话是:”你以为你学了那几门公开课来上我这课就有基础然后学起来会轻松一些了?孩子,不要这样想,你仍然是啥都不会。呃,当然你不至于是0分,我给你打1分——满分100,呵呵呵呵”。可即便是这样的训练量,我跟那些专门搞机器学习模式识别的优秀研究生比仍然是相去甚远。老师还说了,你在面试时说自己学过这个课那个课,人家公司根本看不上。。。我提几个比较基础的问题,看看你学到啥水平了1. 会推导SVM不?推导过程中用到的KKT条件与Slater条件有什么关系?2. Newton法可以用于无约束优化,那有线性不等式约束的优化问题能不能用Newton法来解?3. functional space下的law of large numbers在机器学习里起到了什么作用?算了,functional space和你在线性代数里学的linear space有什么区别?我感觉这年头好多人以为模式识别机器学习大数据是条捷径。但说真的,这长久不了。你下了多少功夫就有多少水平,行家一问就露馅,骗得了谁啊?进公司做不出来成果,分分钟被赶出来。一分耕耘一分收获的道理,这么多年也该懂了另外求别误导题主用matlab了,用python吧还是。在学校跑simulation写paper用matlab没有问题,但我猜题主他/她学这个的目的肯定是面向就业的,你到公司里面试说自己平时用matlab会被耻笑的-----------------------------------------嫌我打击自信心?也许吧,如果这都打击自信心的话,那你看了我们学校大神们做到的事还受得了不?某些同学们你们学这个有信心,那你们微积分哭天抢地求过的时候自信心都哪儿去了?自己学算法课后抄别人project的时候自信心哪儿去了?我就劝诫一句:好好下功夫,别做走捷径的白日梦当然,如果你只是想找那种用几个软件调几个library跑跑数据的工作,当我啥都没说
别补基础了,跟不上的。学好Sql和Excel,学学Python,
补充点统计基础,往数据分析师的方向发展吧,这个编程要求低多了
代码写的少只是因为你太懒,或者眼高手低。代码得码,公式定理得回自己推。机器学习涉及的数学并没有非常高深,学起来让人感觉特别愉快。课程建议去跟Coursera 上的NTU的机器学习课程(总共32讲, 8次作业),此外Andrew Ng的课程在Coursera上的,讲的太过宽泛,没有细致的理论推导(但是网易公开课上有一个完整版的,而且讲义作业可以从stanford的课程主页上下载到?)把这两门课的公式定理,手遮住,推完一遍,该码的代码都码一遍,我觉得你找实习肯定可以啊。而且这时候如果打算继续深入研究,就应该去关注一些paper了。
部分同意现在最高票的答案。同意的部分在于:我也对现在公开课圈子过于娱乐化,简单化,忽悠圈地的行为有所不满。简单的课自己找个乐子就够了,出去说是会被打脸的。不同意的部分在于:公开课也能找到满满干货的内容。比如最高票答主所提的那几个问题,大部分都能在如下这两门课中找到答案:当然这样的课总体上数量还比较少,有时候过了就不再开了。所以对于不是真正想学习的人来说,是很难注意到这样的课程的。最后还是赞同一下最高票答案。想学就从现在开始行动,要花费大量的时间,自己动手实现更多的方法,而不要妄想寻找捷径。做技术的道路还是相对公平的,不花时间就不会有回报。
这个工作的专业性注定了它不会成为想产品经理这样没有硬性门槛的烂大街工作。如果你想做产品经理还可以努力一下,如果想做ml,以你当前仅有1000行的代码量,还是放弃吧,好好学好高数,英语和编程再回来看这些答案。
我是来反对排名第一的用户的部分观点的。==================================================引言:抱歉抄袭了第一名用户的回复格式。上知乎很久了,没有回复过任何一篇,这可以说是我的处女贴。为什么要回复这个话题呢?因为我正好在上匿名用户所说的《模式识别》课程。今晚用python自己实现Logistic Regression,遇到点小问题,索性回复本帖,明天再弄作业。首先求同存异,世界上无论是多难的学科,只要你肯花时间,没有先天性的障碍,凭借普通人的能力都能理解80%。即便是相对论,慢慢磨个五六年,也能理解透彻,更何况属于工科的机器学习。其次,学完Andrew的课程,你确实能够找到工作,甚至能够去湾区,加入明星企业;又或者哪个大牛的start-up。最近听的讲座,那些所谓搞大数据的人,到过各种明星企业(LinkedIn,Google,Coursera)的人,其实连大数据是什么都没有搞清楚,只知道讲怎么存数据、取数据、处理数据,展示数据。核心的机器学习方法,一点都不会。无非是把各种架构、框架拿来组合,实践的时候看看哪个部分出问题了,然后想想工程办法去解决。如果你学完Andrew,简直是他们眼中的牛人了。既然我都同意了第一名用户的主要观点了,我为什么要写本文呢?答案是:我就是来打击像第一名用户的这种思想的人的。我首先讲讲自己对机器学习的理解:机器学习究竟是是什么:数学。 请注意,不是算法,不是业务领域,是数学。如果要更详细点,是数学分析、线性代数、概率论、拓扑学、矩阵分析、统计理论、凸优化、数值分析、实分析、泛函分析、随机过程,微分流形等等。算法仅仅是机器学习的最后一步,而且实际上是最简单的一步。套用爱迪生的一句话,机器学习 = 1%的数学 + 9%的业务+ 90%的算法。但是这1%的数学,甚至比余下的99%都还要重要。机器学习的领域(业务)知识是什么:简单来讲,领域知识就是你所要处理的数据所蕴含的知识。这部分知识对于模型的好坏至关重要,因为这部分知识是被运用到机器学习的最早阶段,即数据采集和处理。这一步没有做好,遑论建模。特别是热衷于从事生物、医学、金融等方向的朋友,如果没有一个好的领域专家加入团队,请做好学习一年以上相关领域知识的打算。至于其他领域的知识,比如网络、LBS、推荐系统等等,由于和计算机关系很近,倒不必学这么久的领域知识,看一本书、十几篇论文足矣。机器学习的算法是什么:这个问题其实可以扩展为,算法是什么?算法,其实就是数学模型的现实应用。由于受到物理计算机模型的限制,一般所讲的算法都是基于随机存取模型的。但实质上,冯诺伊曼体系结构不过是图灵机的实现,而图灵机本质上就是数学函数。我们所学的基础算法,其实也不过是可以抽象为数学函数的解法而已。计算机科学的伪科学成分,大多来源于此。打脸开始,下面我针对每一处引文,进行反驳:“反过来讲,如果你的LR可以用到了极致,那么你不会KKT条件又怎样,你不明白SVM推导又怎样,难道这样的同学就不可以从事跟LR相关的工作吗?”:且不论人家没有说LR不好,光是这样的回答就难以自圆其说。 KKT条件基本上是解决一切凸优化问题的基础,解凸优化问题大多数情况下就是解KKT条件,包括答主所说的LR问题也可以归结为求解KKT条件。答主没有仔细推导过KKT条件,自然无法理解KKT条件的重要性。另一方面,SVM不属于LR的范畴,而是一个二次优化问题。推导SVM不在于说你能否重现SVM,这本来就没啥意思,而在于说你是否了解这是一个二次优化问题,然后进一步通过优化问题的一般情况和二次优化的特殊情况,对SVM进行合理的扩展,例如加入惩罚函数、核函数、正则项。每一个扩展都是追求卓越的过程,就跟我们写排序算法,最开始是基础归并排序,然后是快排,然后是随机快排,最后是加入了插入排序的随机快排。如果你连最基础的快排都无法理解、无法实现,怎么考虑快速排序的其他形式呢?难道学算法最后就只学了归并排序?一个极致的归并排序走天下?“把LR用到极致,不光可以处理非线性的,还可以做大规模的,online的,distributed的,multi-label的,多了去了。”:LR名字中就是Linear Regression,即便是广义线性模型,也只能解决线性问题。哪怕说有指数,加个对数之后,目标函数自然也是线性的,根本不是典型的非线性问题。什么是典型的非线性优化问题,请参考SVM。另一方面, 答主所说的三个方向,完全就是最为基础的数学变换。online基本是做递推学习或者并行计算,考虑样本无关性之后进行相关数学变换就能得到; distributed基本是分离变量,或者说求一个近似的下降方向(SGD算法),本质上还是数学; multi-label更是数学应用,无非是 one vs one, one vs rest, 和 all in one等几种策略,前两种策略是模型复用,最后一种是新建模型,本质上还是数学。如果朝着这个方向去学习,根本没什么意义。就像你用C++写了一个排int数组的程序,又写了一个排double数组的程序,但是就是不去学习如何编写最短路径算法,还说排序问题是80%计算机所做的问题。“可不要忘了,号称最牛逼的Vowpal Wabbit不也就把LR做到了极致吗?”: 我查了一下人家的Github Tutorial(),拜托,人家实现了SVM,这还仅仅是把 LR做到极限?重申一遍,SVM是二次优化问题,不是线性优化问题。“训练并不是靠时间和地点堆砌的。这里的时间指的是匿名用户指的“每周十七八个小时”,地点则是指“顶级学校””:任何一项技能的训练,都基本遵循一万小时定律。一个学期最多20周,每周就算你花了25个小时来学模式识别,也不过500小时。比起一万小时,这才5%,都还没有跨过门槛,还怎么谈时间的堆砌;地点的堆砌则更无厘头了,人家也没说什么顶级学校,这样批判很不好,没什么逻辑可言。在我看来,好学校最好的就是人,好的老师讲得透彻,好的同学可以交流,《模式识别》课程配备了4个助教给我们改作业+答疑,老师还把自己多年来的心得发给我们,供我们课外阅读。我不知道,真的还有哪种环境可以让人更快地“让人从一个境界到达另一个境界”。补充一点未查证但是流传甚广的消息, Andrew Ng在Standford授课的时候,可是要求他的学生24小时之类提交算法实现的,我也不知道这是否是答主说的堆砌?“没多难,不是rocket science,认真学多花时间总是可以学成的。同样的问题我以前问过“C语言这玩意有多难?”,后来发现把指针弄明白了以后没多难,不像谭老师讲那么玄乎。“函数式编程这玩意有多难?”,也没多难,坐下来把主要概念看明白了多写写也就会了”: 我首先承认机器学习不难,但是真的是这么简单?我能说C语言指针我就学了一周,函数式编程看了一个月,就基本上入门了。但是我学机器学习,可是花了整整一年半的时间学习数学,外加自己课外勤奋,才能说勉强入门的?各行各业虽然没有贵贱,但是总有一个知识密度的问题,有的领域知识密度大,比如数学、物理、化学、生物等等,有些领域知识密度相对较小,比如行政、驾驶、水电工、保安。 用一个知识密度如此之低的C语言指针和一个中等密度的函数式编程,去跟学科级难度的机器学习来比较,简直是没有逻辑,我看不出这跟说“驾驶汽车有多难?也没多难,驾驶飞机又能难道那里去呢?” 有什么区别。真要比较,你得用计算机程序语言和机器学习比,而且个人认为前者还是稍微简单一点的。“问题在于,现实生活中的工作里哪里需要这么多新的东西?非常少,你有一个open mind能随时接受新东西你就已经领先别人一大截了,如果你还能创造出来新的东西(并且是个实用的东西),那不管在哪个公司,你都是一颗新星了”:答主这种回答,不外乎有急于求成,误人子弟之嫌。的确,如果你刚刚入职,怎么可能创造出很多问题来呢?可是,你是想今后几十年靠这门技术养家糊口还是仅仅去投机淘金?举个例子,学计算机可以去北大青鸟,也可以去985高校。北大青鸟教你最实际的编程技巧,告诉你这没多难,难的玩意你也遇不到。高校教你的全是理论,实践基本靠自觉,还告诉你这玩意挺折磨人的。现在,这两个选择摆在你面前,你选哪个?我肯定选择后者,虽然北大青鸟可以让我3年不到毕业,还月薪8000,但是这些东西不过是肤浅的知识,人人都可以学会。不到3年,就基本上到顶了,不是永无止境的waiting-list,就是30岁后基本失业。如果选择后者,那么前景更广,扎实的理论基础将会成为我职业生涯的最好支持。“嫌你打击自信心?当然嫌,至少我嫌,给本身需要信心的人泼冷水这本身就不是什么好事,何况还是在这样公开的场合下。”:支持题主本是好事,但是掩盖事实真相让题主走向一条荆棘小路就不是什么好事了。要知道,学习最忌讳半途而废,因为你啥也没学精通,还浪费了你学习其他东西的时间,这也就是所谓的机会成本。 把事实真真切切的讲出来,才是回答问题的本质。 我虽然也觉得匿名用户回答欠妥,但是排名第一用户更欠妥。与其让人家不知深浅而一头扎进泳池,倒不如先告诉他水深3米5来得实际。我想要说的就是,机器学习本质上就是数学,如果你认为数学难,机器学习当然难,否则为啥大家都想招这种人才。如果你没有什么基础,建议首先花半年到一年时间,重头到尾好好复习三门基础数学课(微积分、线性代数、概率),再好好学习高级课程(矩阵分析、统计理论、数值分析、凸优化)。到这里,如果不想再深入,基本上就足够了,至少看论文实现算法没问题。然后,再好好看看机器学习相关的书籍(PRML等),用数学证明算法的正确性,用python、matlab、R等语言实现算法。 这样,才算是基本入门。 至于其后,想看数学就先看看拓扑,然后是实分析、泛函分析、随机过程、微分流形等等。 想看机器学习,就去看看各个机器学习顶会的论文。想看领域知识,就去认真地翻阅领域课本。==================================================我没有冒犯的意思,仅仅是希望表达自己的观点。各位如能有所体会,我就觉得自己的回答是有价值的。premature judgements are bad, 这句话很对。
1 首先你要感兴趣,对数据,数据挖掘感兴趣,而不是因为这个工作火爆才选择2 其次你数学功底要好3 编程只是工具,不擅长可以慢慢学
本科写的代码不超过千行=_=你是怎么读研的
留着,以后再答
放心本圈够你水的
你好好学还是能超过一堆水货的
排名第一的答案有误导之嫌,机器学习本身的理论基础很少,大多都抽调数学和算法的东西形成解决具体问题之方法再冠以特有名称,除非是博士不值得也不需要花大量时间和精力。题主你的问题太过宽泛,我只能简单回答一下,编程弱不解决搞机器学习是不靠谱的,当然作为 CS 研究生你有时间和条件去解决。}

我要回帖

更多关于 master转phd 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信