軟體工程專業本科畢業直接工作的話,還有沒有機會靠自學從事機器學習方面的工作?

大三學生,比較喜歡機器學習,同時又想去工作。想了解一下像機器學習這種門檻比較高的工作有沒有可能繞過研究生這三年,而在工作過程中一步一步掌握相關知識,這樣算不算走了彎路?


剛寫完公眾號文章,這裡分享一下

【原創,若要轉載,請註明:來自微信公眾號數據挖掘機養成記


一、如何利用資源


數據挖掘這個領域可供自學的資源很廣泛:MOOC(網路公開課)及課程相關講義、書籍、博客、paper等等。鑒於學習資源浩如煙海,對資源進行過濾是非常重要的,這裡談談我對資源利用的幾點看法:


1. 只用經典資源

對於公開課:參考果殼MOOC上學員的評價,coursera的學員討論區

對於書籍:主要參考亞馬遜(美國/中國)、豆瓣上的書評以及Google Scholar中的引用數,CSDN、噹噹、京東上的書評也可略做參考

對於博客:只看那幾個大牛的個人博客或者專業的社區

對於論文:Google Scholar的引用數是重要指標,但當你要follow一個新領域時,建議先turtorial再自己看新論文、做評價(因為新論文的引用數一般都不高)

2. 通讀和略讀的取捨 在篩選出經典資源的基礎上

對於公開課:入門級的課程要堅持上完,進階的課程選擇性聽一聽

對於書籍:磚頭書當參考手冊看(如 PRML、模式分類、統計學習理論、數據挖掘導論、數字圖像處理、C++ Primer),實踐書、小而美的導論書建議通讀(如數學之美、統計學習方法、機器學習實戰、推薦系統實踐、半監督學習導論、applied predictive model、essential C++)


二、我的自學之路


13年之前


數學類課程,只學過微積分、線性代數、信號處理,零碎地了解和使用過神經網路,不了解機器學習,只聽說過模式識別(以為就是人臉識別),也正因為對模式識別的不了解,保研的時候放棄了中科院自動化所和計算所兩位牛導伸出的橄欖枝,選擇離家更近的浙大,讀我自己不太感興趣的控制理論,研究電路。。。現在想來仍是有些遺憾(但不後悔),所以準備讀研但沒確定方向的同學,一定要抓緊時間多了解研究方向,爭取選擇自己感興趣的,讓遺憾最小化


13年

1.入學前的暑假,在網易公開課上刷了Andrew Ng的《機器學習》(對應 stanford CS229,很老的課程,大概是09年的),那時候coursera還沒火,果殼mooc也沒創辦。這個課程難度比現在coursera上Ng的同名課程要難一些,幾乎全是公式推導,而且這門課的SVM是重點,但並未提及神經網路,後來coursera上Ng的課程則是基本刪掉了SVM,加進去神經網路(也能理解,因為深度學習火起來了)。當時因為對優化理論、矩陣理論還不夠了解,所以留下不少疑惑


2. 同樣暑假,自學了C++,幾乎是把《essential C++》從頭看到尾,然後選了書中一些作業去實現,因為本科一直用C寫嵌入式,所以這本書看得比較順。這本書實乃Lippman的良心之作啊,短小精悍,建議配合他的另一本大部頭《C++ primer》一起看,作為輔助閱讀。雖然後來一直沒怎麼用到C++,不過看C++庫的時候不至於看不懂了


3. 入學後在coursera上看了Ng的機器學習的神經網路部分,本來想再看下Hinton的《神經網路》,但要看自己研究領域的論文,就放棄了


4. 買了吳軍的《數學之美》,科普性質的書,也有推導,深入淺出,引人入勝,非常棒,對搜索和NLP領域的演算法有了較多認識


5. 買了李航的《統計學習方法》,純推導,把幾大類經典模型背後的理論刻畫得淋漓盡致,看了之後對SVM的VC維理論、EM演算法等有了深刻認識


6. 選修了模式識別,教材用的是Duda的《模式分類》,一本磚頭書,建議看前三章,主要涉及貝葉斯參數估計,另外LDA、PCA的推導也可以看看,講的不錯


7. 選修了英文版矩陣論,用的教材是老師的講義,其實國內戴華的《矩陣論》就講的非常好,國外的推薦看Roger的《Matrix analysis》(大部頭,選擇性看)


8. 買了《數據挖掘導論》(作者Ping-Ning Tan,不建議買Jiawei Han的那本),翻了翻,發現裡面講的演算法大多已經了解了,講的比較淺,適合入門,用來建立數據挖掘領域的知識體系結構


14年


1. 跟倆基友水了一下阿里的推薦演算法大賽,是真的水,我跟另一個基友半途而廢浪掉了,後來就剩隊長一人苦苦堅持。。。

2. 選修了優化課程,自己課餘讀了讀Forst的《Optimization_Theory and Practice》,偏應用一點,讀完之後對理解LR、SVM等模型的優化方法,幫助非!常!大!


3. 買了Harrington的《機器學習實戰》,開始接觸python,同時買了張若愚的《Python科學計算》(後來證明沒必要買,作者在網上放了網頁版,方便索引和查找),Harrington這本書里的代碼只調用了兩個包:numpy,scipy,還有個matplotlib用來畫圖,然後造了一些演算法的輪子。現在看來scikit-learn包已經包含了幾乎所有常見演算法,所以這本書看看代碼、選幾個實現一下就好,沒必要從頭到尾實現


4. 偶然接觸了譜聚類,一發不可收拾,把領域相關的paper幾乎掃了一遍,包括Ng2002年那篇、還有個很經典的turtorial,然後follow到了大神林達華的博客,看了他寫的譜聚類與圖論、馬爾科夫鏈的聯繫,醍醐灌頂,自己用matlab實現了一下演算法


5. 開始躲著老師在支付寶搬磚,一開始蠻無聊的,跟著數據分析師純寫SQL,後來接觸了新業務,有向網路的關鍵節點發現,自然而然聯想到之前搞過的譜聚類,於是啃了一本20多頁的turtorial,得出結論:有向圖的譜聚類不適合用在該業務。。。後來又有個業務,主管建議用半監督學習,於是啃了Xiaojin Zhu的《Introduction to semi-supervised learning》,以及周志華的一些講義和論文。朱曉進(音譯)的這本導論書簡單易懂,一下子就讓讀者catch到了半監督方法的精髓(還有一本偏理論一點的Chapelle的《Semi-supervised learning》可作為擴展閱讀)。後來自己在用Python實現演算法的過程中,遇到一個不小的障礙,於是follow到了大神pluskid的博客,一下子解決了我的問題


15年


1. 買了項亮的《推薦系統實踐》,大讚,國人難得有這樣一本經典問世,雖然有瑕疵,但對於我等初學者來說,非常受益。讀完之後對推薦系統用到的模型、整個知識體系都有深刻認識。用網上公開的數據集做了一個toy project


2. 看了下coursera上明尼蘇達兩位老師的《Recommender system》,簡單易懂,很快pass完這門課


3. 把SVD++、Factorization machine相關的paper翻出來看了一遍,發現理論不難,而且早就有成熟的開源庫了


4. 最近看到一本好書,Kuhn的《Applied predictive model》,正在看,偏應用,講了很多trick,在正統的機器學習理論書上不太提及,但是實際非常有用。不過是用R寫的,像我這樣不會R的童鞋,跳過代碼就好了,或者自己用Python實現以下


額外的補充

對上面提到的資源再做一個補充,有些我看過但是忘了何時看的,有些過於基礎的我自己不太會看了,還有些是我還沒來得及看的


1. 林軒田老師的《機器學習基石》和《機器學習技法》,在MOOC上評價相當高

2. Hinton的《神經網路》,我目前做的東西還不涉及深度學習,以後也許會follow

3. Vapnik的《Statistical Learning Theory》,實在是磚頭書而且偏理論,國內有張學工老師的譯本

4. Bishop的《PatternRecognitionandMachineLearning》,理由同上

5. Segaran的《Programming Collective Intelligence》,國內譯本,叫《集體智慧編程》,蠻好的實踐書,Python代碼,適合入門,我暫時不需要了

6. 大牛的博客,除了上面說的林達華、pluskid,還有jerrylead,LeftNotEasy,注意,不要被一個叫「研究者July」的人坑了!不懂的搜知乎對他的評價

7. 問答社區,首推 Stackexchange,其次 Quora,還有知乎


目前的遺憾


1. 沒有真正堅持過一個比賽,對比賽中常用的trick,比如造特徵、模型融合等,不是很熟練

2. 沒有真正上線過一個實際項目,所以實踐能力還有待提高


最後我想說的是,雖然網上有很多對如何自學機器學習、數據挖掘話題的討論,但本文是我基於我自己認識,一字一句寫完的,若有雷同之處,希望各位包涵,也希望提出批評指正意見,畢竟作為一個自學者和小菜鳥,難免有理解不當之處,希望跟各位多多交流


我想我很符合題主問題的描述。
軟體工程專業,大四,intern,現在在做機器學習。

關於如何學習,網上已經有大批的資料,知乎上也有相關問題,已經有人列出了回答,這裡不祥述了,基本就是以各種online的課程為基礎的自學。

關於求職,首先,你需要向面試官展現出,你是一位很強烈的self-motivated的人:你為什麼選擇學習這個;為了自學機器學習,學了哪些和怎樣學等問題--learning ability非常重要。其次,一定程度上表現出/證明出你的數學基礎/理論能力。Andrew Ng在coursera的課程偏向application,很多知識也只是淺層地窺探一下。更多的演算法背後的理論需要你具有很好的數學基礎。在面試的時候,我被問了幾道概率論的問題(不過比較簡單)。
所以我挺推薦以下幾門理論更強的課程:
NTU 林軒田老師的machine learning foundation machine learning technique
Andrew Ng在stanford的machine learning
Caltech的learning from data等

至於數據結構這些,也很重要。需要表現出來的能力是:學以致用。可以不需要ACM選手那麼強的演算法與數據結構能力,但是讓你設計演算法解決問題並給出複雜度,這種能力是必須要qualified--這其實就是大學中演算法課程合格的要求。


個人認為學機器學習,跟本科專業的關係就不太大。
如果你想去公司做機器學習相關研究的話,那本科生的基礎基本是不夠的,除非你有ICML, NIPS等頂級會議的paper,或者相當的學術水平。
在公司,機器學習相關工作還是比較偏應用的。比如,你理解了某些演算法,然後結合工程方法,比如數據清理,特徵工程等,把model應用好了,得到比較滿意的結果,你的模型就可以上線了。當然,如果你能力足夠好,可以得心應手地改進model使它更適應你的問題。

建議:

1.不要放棄夢想,要更加努力,要時刻認識到自己所學還是遠遠不夠的,你要做得更好。

2.把機器學習的數學基礎(線性代數,矩陣論,概率論,統計學,凸優化等)打好。

3.深刻理解你接觸到的model,把這些演算法推導一下。

4.不要光學不練,多去實踐一下,真正做一個機器學習系統和紙上談兵的區別是很大的,裡面有很多坑要去探索。

5.推薦的教程有coursera上Andrew Ng的ml,Andrew Ng的stanford公開課 cs229,台大林老師在coursera上的機器學習基石和機器學習技法,比較基礎的書籍有李航的統計學習方法,如果你想更深入,可以看PRML和ESL。

6.常規的數據挖掘演算法,做分類的話,Adaboost和Random Forest這些ensemble方法在很多情況下表現比較好,有些情況SVM也不錯,當然這只是一般認為,Deep Learning等新技術說不定會有什麼突破,起碼在語音,圖像,NLP等方面表現不錯。

7. 做機器學習系統的時候,要重視每一步,從數據清理,特徵工程等開始,都非常重要,不要過分沉溺於後面的model,model只是一個環節,不能單槍匹馬支撐整個系統。

8.可以關注一下KDD Cup的paper,裡面有很多trick,對做好數據挖掘有參考意義。

9.求職面試的時候一定要展現出你的潛力與激情,你對機器學習的獨到的理解。你可以從自我介紹環節自然過渡到你做過的項目,你的感悟,你對機器學習系統的問題的思考,主導整個面試過程,相信對你感興趣的面試官會讓你一直講下去。

懂得更多,方能做得更好。畢業之後,學業結束,但並不意味著學習的結束,願你保持一顆上進的心,在這條路上走得更遠。


確實應該強推 台大林老師的機器學習課程。我一直說這是中文MOOC里最好的入門課了。
https://www.coursera.org/course/ntumltwo
https://www.coursera.org/course/ntumlone


謝邀……邀得還挺準的,我是本科畢業,工作了半年之後跳槽到了一家互聯網創業公司,一開始做的是爬蟲相關技術開發,然後慢慢就接觸了數據挖掘和機器學習相關的開發,現在主要做SEM相關開發,用到和機器學習相關的技術主要有貝葉斯分類器、決策樹、Item-CF推薦模型、KNN、關聯規則等等。

題主說「喜歡機器學習」,這種話在面試官面前是毫無分量的,如果你真的想做這方面工作,請務必夯實演算法和數據結構基礎,以及告訴面試官你有極強的自學能力。比如從我自身來說,曾在高中參加NOIP和大學ACMICPC,雖然成績都沒有十分理想(NOIP二等獎、省賽金牌和亞洲區域賽銀牌),但是演算法基礎和紮實程度絕對好過沒有參加過類似競賽的同學(也是很多大公司看重ACM選手的原因)。

如果題主沒有競賽基礎的話,會相對困難一些,可以嘗試做一些和機器學習相關的小項目。找工作的時候不要直接奔著機器學習的崗位去,這些崗位基本是不會要本科生的,只要找有機器學習相關技術的公司去實習就好了,哪怕做個運維都行(我真沒黑運維???)…… 後面的事情就好辦啦。


不請自來,先匿了

首先說一下自己的情況,大四的時候開始準備考研,中間堅持了2個多月,然後身邊的同學也都慢慢找到工作了,也許是因為我有一顆躁動的心,也許是因為我看到身邊同學找工作的艱辛,所以最後我放棄了,目前在一家公司實習,做的是機器學習方面。

所以說,想找一家機器學習方面的工作是沒有問題的,本科生來說,公司一般都不要求有機器學習方面的經驗(反正我是沒有(╯3╰),別的不知道),但是進去公司後可能會比較累,因為都不會,但是又沒有時間來系統的學習,只有在需要什麼的時候學習什麼,所以如果你想做這方面的東西,由於你現在大三,可以趁現在有時間先系統的過一遍,了解一下機器學習方面的知識,這樣以後進入公司可能就會稍微輕鬆點,恩,就說這麼多吧


去coursera上刷幾個有編程作業的機器學習和數據挖掘演算法方面的課,找個好實習,面試前狂刷一個月面試題。基本上穩拿演算法方面的offer。


先佔個坑 等我成功了告訴你
----分割線----

卧槽 被挖墳。順便答一下吧
當然是可以,不過比較難,不太建議你走這種hard模式。
大公司有錢,直接花大價錢招個能幹活的就好,而且好的項目僧多粥少,哪有機會給你邊做邊學。
小公司沒錢,沒耐心慢慢培養你。而且說倒閉就倒閉,不會長線投資你,耗不起。
社會就這樣,急功近利。所以要不就自己研究生階段學,要不就工作之外業餘時間學。隨你選。
企業是壓榨你的地方,不是培養你的地方。當然,在項目中成長這種雙贏局面是最理想的,但前提是你已經掌握幹活的基礎,而不是完全從0開始。

也有認識辭職自學後找機器學習工作的朋友,或者讀在職研究生。而我是邊工作邊學,畢竟要working for 飯。


我工作前兩年做嵌入式開發,後來轉演算法


門檻一點都不高好嗎
我大二 休學工作
在遊戲公司除了打雜 能拿的出手的東西就是一個異常玩家檢測(一開始用fastmcd 後來發覺數據量其實不大直接用了multi var gaussian distribution 協方差不迭代 直接一遍求的) 一個聊天spam過濾(logistic regression 228條訓練集硬生生上了 效果還不錯)
你要是不追求自己搞出炫酷的模型
而是應用到實際 其實門檻很低
會寫python 懂幾大模型 能快糙猛的上線投入使用即可
後面的難點主要在工程上 數據量上來如何快速訓練模型
先髮式驗證保障低延時 並行保障吞吐量等問題

另外吐槽下我在上一家公司做用戶行為分析
大數據部總共就我和一個日本留學搞機器學習的研究生能寫代碼【他僅僅停留在能寫 python滿屏的循環也是醉了】接觸下來就是他理論不懂 模型不懂 代碼不會 完全混吃混喝
以及我見到的各類研究生來看感覺就是〔讀研毀一生〕
喔 我其實只看過ng的課程 翻過一點udfl
零零碎碎看過點課程 講座之類
需要用模型其實先看有沒有庫 沒有或者庫不好用就翻模型說明自己寫


是有機會的。
看了一下有些人的答案,那些整天做數據處理或者簡單用模型處理個任務的同學,就不要說自己在搞機器學習了。


儘管現在工業界有大量的這類工作的工作機會,儘管現在已經有大量的MOOC課程。但是,如果你是真的喜歡,還是在有條件的情況下,去你能去的最好的學校/環境讀個相關的PHD吧。

畢竟,工業界的大部分工作時間是在理解業務和洗數據。況且,有人指導,有人交流,然後在特定的方向上深入鑽研,比你在數據集上照著別人的論文不停地花式實驗演算法和特徵還是有價值地多的。


先匿...
樓主問機會,那我告訴你肯定有。
我本科畢業,而且是普通的211..大學的時候搞過ACM競賽,也是很挫的成績(區域賽銀牌),沒怎麼接觸過機器學習。
畢業之後先是去了阿里,做推薦演算法,當時對於機器學習不是很懂的,旁邊大牛也不多,小牛還是有,跟著他們做,業餘時間就狂補充理論知識,從簡單入手,李航統計學習方法,到後來看MLAPP/ESL。刷刷kaggle,看winner的代碼是非常好的幫助。
兩年後跳一跳去了百度,部門不說了,否則就猜出來了。這些基本接觸的都是非常實在的技術,一個項目想上線,主要優化也是在樣本,特徵,loss function這幾個方面,當然也使用了一些前沿比較熱的deep learning上的框架,比如我們前面的項目也基本上是第一個或第二個使用sequence model在相關性上並且上線拿到好收益的項目。更多的還是應用在產品上,這個應該不是叫「做機器學習」,應該還是用。
所以回答以我親身經歷來看,做做產品業務肯定是有機會的,至於做機器學習(比如開發大規模機器學習系統,或者是理論上模型優化發paper)也不是不可能,歸根揭底,完全取決於你個人能力了。互聯網行業現在來看,一般還是會給面試機會的。


樓主和 我的情況基本差不多啊,大二暑假開始學習並和同學學習開發web方向的項目,到大三了後,發現機器學習如此的迷人,於是乎,決定跟老師學習這個方向的東西,他就先讓我看mit的《線性代數》,台大的《機器學習基石》《機器學習技法》等,從而 我一直在自學,這些,他說本科找這方面的工作很難,但是也不是說沒希望,所以我這裡就是在不斷的充電學習


你若是真的喜歡,就不會在這種問題了。

你僅僅是覺得它火,而已。


佔個坑 希望題主更新


mark 一下


傳統行業研究生一枚,今年找機器學習方向的工作,都忘了自己在這裡佔過坑了……
把之前的答案鏈接放下面,就不再重複回答了。

如何入門大數據(數據挖掘方面)? 目前情況:數學基礎紮實(理工碩士背景),在職(工作與大數據不相關)。


mark下。。我也想從事人工智慧方面的


先佔坑


做開發沒啥問題,反正就搞搞應用沒啥東西,本質上還是代碼能力


推薦閱讀:

為什麼程序員這麼討厭被人問「會不會修電腦」?
做一個優秀的程序員到底難在哪裡?
怎麼寫出一本程序員風格的修真小說?
15 歲學編程晚嗎?
如何反駁「程序員離開電腦就是廢物」這個觀點?

TAG:程序員 | 數據挖掘 | 編程 | 機器學習 |