機器學習說簡單就簡單,說難就難,但若是一我的不夠聰明的話,他大概很難知道機器學習哪裏難。基本上要學習機器學習,先修課程是algebra, calculus, probability theory, linear regression。這幾門科學好了再學Machine learning是事半功倍的。此外近代數學的東西也要懂, functional analysis啥的。其實不懂也行,只是如今文獻老是喜歡引用裏面的概念,懂一些讀起來方便。(我就很討厭manifold learning這個名字,把許多人都嚇跑了)real analysis最好用心學,對序列或函數的收斂性的理解很能幫助你瞭解這些模型的精髓。Optimization theory (ref. Convex optimization by Boyd)也是重中之重,在前面幾門課學好並有必定python基礎的時候能夠仔細讀一讀。
其實機器學習須要看的書很少,必讀的是elements of statistical learning。這本書涵蓋範圍很廣,且深刻淺出,習題也有必定難度,適合自學。你看過這本以後就知道其餘什麼書能夠看什麼書不須要看了。
再下來就是練習,這個是重中之重。我以爲作kaggle的比賽最有效。能夠仿照別人寫寫code,也能夠本身想一想辦法,但最主要的是要可以迅速完成編程並給出結果。我見過許多人光討論就能夠幾天,但真正動起手來就萎了。
最後就是讀source code並本身實現幾個model from scratch。這個比較難,可是確是最鍛鍊人的。具體語言應該是越基礎越好,好比C/C++什麼的。等你本身寫完了一兩個model,再去用別人的package就會以爲駕輕就熟許多了。我真心以爲這個比上coursera那些課強多了。上coursera最大的缺點就是容易變得似懂非懂紙上談兵。我本身program過ensemble trees(C++)和deep learning solver(Python),受益頗多。至於讀source code,我以爲libsvm寫得很好啊,不過算法對大一大二新生是難了點。此外,基於python的工具包scikit-learn的sourcecode很好讀,建議你們多看看。
我看回答中有提到Matlab,我覺的matlab處理字符很麻煩,如今不少dataset都須要處理字符,因此並非好的選擇。
補充一點就是要學會發散思惟,學會如何從data中找feature。關於這個的教程很缺,須要大量練習及一些天賦。
說實話machine learning雖然門檻不高,但真心是聰明人的遊戲。php
我要翻譯一把quora了,再加點個人理解,我相信會是一個好答案,連接我都放到一塊兒了,沒插入到正文中,要求其實比較高了,我以爲我本身都差很遠很遠~~~我儘可能持續更新翻譯質量以及本身理解
html
1. Python/C++/R/Java - you will probably want to learn all of these languages at some point if you want a job in machine-learning. Python's Numpy and Scipy libraries [2] are awesome because they have similar functionality to MATLAB, but can be easily integrated into a web service and also used in Hadoop (see below). C++ will be needed to speed code up. R [3] is great for statistics and plots, and Hadoop [4] is written in Java, so you may need to implement mappers and reducers in Java (although you could use a scripting language via Hadoop streaming [5])
首先,你要熟悉這四種語言。Python由於開源的庫比較多,能夠看看Numpy和Scipy這兩個庫,這兩個均可以很好的融入網站開發以及Hadoop。C++可讓你的代碼跑的更快,R則是一個很好地統計工具。而你想很好地使用Hadoop你也必須懂得java,以及如何實現map reduce
java
2. Probability and Statistics: A good portion of learning algorithms are based on this theory. Naive Bayes [6], Gaussian Mixture Models [7], Hidden Markov Models [8], to name a few. You need to have a firm understanding of Probability and Stats to understand these models. Go nuts and study measure theory [9]. Use statistics as an model evaluation metric: confusion matrices, receiver-operator curves, p-values, etc.
我推薦統計學習方法 李航寫的,這算的上我mentor的mentor了。理解一些機率的理論,好比貝葉斯,SVM,CRF,HMM,決策樹,AdaBoost,邏輯斯蒂迴歸,而後再稍微看看怎麼作evaluation 好比P R F。也能夠再看看假設檢驗的一些東西。
python
3. Applied Math + Algorithms: For discriminate models like SVMs [10], you need to have a firm understanding of algorithm theory. Even though you will probably never need to implement an SVM from scratch, it helps to understand how the algorithm works. You will need to understand subjects like convex optimization [11], gradient decent [12], quadratic programming [13], lagrange [14], partial differential equations [15], etc. Get used to looking at summations [16].
機器學習畢竟是須要極強極強數學基礎的。我但願開始能夠深刻的瞭解一些算法的本質,SVM是個很好的下手點。能夠今後入手,看看拉格朗日,凸優化都是些什麼
linux
4. Distributed Computing: Most machine learning jobs require working with large data sets these days (see Data Science) [17]. You cannot process this data on a single machine, you will have to distribute it across an entire cluster. Projects like Apache Hadoop [4] and cloud services like Amazon's EC2 [18] makes this very easy and cost-effective. Although Hadoop abstracts away a lot of the hard-core, distributed computing problems, you still need to have a firm understanding of map-reduce [22], distribute-file systems [19], etc. You will most likely want to check out Apache Mahout [20] and Apache Whirr [21].
熟悉分佈計算,機器學習當今必須是多臺機器跑大數據,要否則沒啥意義。請熟悉Hadoop,這對找工做有很大很大的意義。百度等公司都須要hadoop基礎。
git
5. Expertise in Unix Tools: Unless you are very fortunate, you are going to need to modify the format of your data sets so they can be loaded into R,Hadoop,HBase [23],etc. You can use a scripting language like python (using re) to do this but the best approach is probably just master all of the awesome unix tools that were designed for this: cat [24], grep [25], find [26], awk [27], sed [28], sort [29], cut [30], tr [31], and many more. Since all of the processing will most likely be on linux-based machine (Hadoop doesnt run on Window I believe), you will have access to these tools. You should learn to love them and use them as much as possible. They certainly have made my life a lot easier. A great example can be found here [1].
熟悉Unix的Tool以及命令。百度等公司都是依靠Linux工做的,可能如今依靠Windows的Service公司已經比較少了。因此怎麼也要熟悉Unix操做系統的這些指令吧。我記得有個百度的面試題就是問文件複製的事情。
github
6. Become familiar with the Hadoop sub-projects: HBase, Zookeeper [32], Hive [33], Mahout, etc. These projects can help you store/access your data, and they scale.
機器學習終究和大數據息息相關,因此Hadoop的子項目要關注,好比HBase Zookeeper Hive等等
web
7. Learn about advanced signal processing techniques: feature extraction is one of the most important parts of machine-learning. If your features suck, no matter which algorithm you choose, your going to see horrible performance. Depending on the type of problem you are trying to solve, you may be able to utilize really cool advance signal processing algorithms like: wavelets [42], shearlets [43], curvelets [44], contourlets [45], bandlets [46]. Learn about time-frequency analysis [47], and try to apply it to your problems. If you have not read about Fourier Analysis[48] and Convolution[49], you will need to learn about this stuff too. The ladder is signal processing 101 stuff though.
這裏主要是在講特徵的提取問題。不管是分類(classification)仍是迴歸(regression)問題,都要解決特徵選擇和抽取(extraction)的問題。他給出了一些基礎的特徵抽取的工具如小波等,同時說須要掌握傅里葉分析和卷積等等。這部分我不大瞭解,大概就是說信號處理你要懂,好比傅里葉這些。。。
面試
Finally, practice and read as much as you can. In your free time, read papers like Google Map-Reduce [34], Google File System [35], Google Big Table [36], The Unreasonable Effectiveness of Data [37],etc There are great free machine learning books online and you should read those also. [38][39][40]. Here is an awesome course I found and re-posted on github [41]. Instead of using open source packages, code up your own, and compare the results. If you can code an SVM from scratch, you will understand the concept of support vectors, gamma, cost, hyperplanes, etc. It's easy to just load some data up and start training, the hard part is making sense of it all.
總之機器學習若是想要入門分爲兩方面:
一方面是去看算法,須要極強的數理基礎(真的是極強的),從SVM入手,一點點理解。
另外一方面是學工具,好比分佈式的一些工具以及Unix~
Good luck.
祝好
[1] http://radar.oreilly.com/2011/04...
[2] NumPy — Numpy
[3] The R Project for Statistical Computing
[4] Welcome to Apache™ Hadoop®!
[5] http://hadoop.apache.org/common/...
[6] http://en.wikipedia.org/wiki/Nai...
[7] http://en.wikipedia.org/wiki/Mix...
[8] http://en.wikipedia.org/wiki/Hid...
[9] http://en.wikipedia.org/wiki/Mea...
[10] http://en.wikipedia.org/wiki/Sup...
[11] http://en.wikipedia.org/wiki/Con...
[12] http://en.wikipedia.org/wiki/Gra...
[13] http://en.wikipedia.org/wiki/Qua...
[14] http://en.wikipedia.org/wiki/Lag...
[15] http://en.wikipedia.org/wiki/Par...
[16] http://en.wikipedia.org/wiki/Sum...
[17] http://radar.oreilly.com/2010/06...
[18] AWS | Amazon Elastic Compute Cloud (EC2)
[19] http://en.wikipedia.org/wiki/Goo...
[20] Apache Mahout: Scalable machine learning and data mining
[21] http://incubator.apache.org/whirr/
[22] http://en.wikipedia.org/wiki/Map...
[23] HBase - Apache HBase Home
[24] http://en.wikipedia.org/wiki/Cat...
[25] grep
[26] http://en.wikipedia.org/wiki/Find
[27] AWK
[28] sed
[29] http://en.wikipedia.org/wiki/Sor...
[30] http://en.wikipedia.org/wiki/Cut...
[31] http://en.wikipedia.org/wiki/Tr_...
[32] Apache ZooKeeper
[33] Apache Hive TM
[34] http://static.googleusercontent....
[35]http://static.googleusercontent....
[36]http://static.googleusercontent....
[37]http://static.googleusercontent....
[38] http://www.ics.uci.edu/~welling/...
[39] http://www.stanford.edu/~hastie/...
[40] http://infolab.stanford.edu/~ull...
[41] https://github.com/josephmisiti/...
[42] http://en.wikipedia.org/wiki/Wav...
[43] http://www.shearlet.uni-osnabrue...
[44] http://math.mit.edu/icg/papers/F...
[45] http://www.ifp.illinois.edu/~min...
[46] http://www.cmap.polytechnique.fr...
[47 ]http://en.wikipedia.org/wiki/Tim...
[48] http://en.wikipedia.org/wiki/Fou...
[49 ]http://en.wikipedia.org/wiki/Con...算法
最近在學teradata的aster數據挖掘工具,果真商業的框架跟hadoop的易學性易用性可拓展性都有天壤之別啊。建議有興趣的同窗自查資料,軟件貴的驚人,可是對於自身維護團隊水平通常的企業仍是值得買的
-----------
不邀自來,結合我如今的工做以及當年機器學習的經驗來說一下本身的一些感覺。
首先從機器學習的全流程提及。
輸入:機器學習按輸入數據分能夠分結構化數據(表),半結構化數據(文本,日誌等),非結構化數據(圖片,錄像),後二者對應的分支中比較出名分別是文本挖掘和圖像挖掘,其實就是經過提取特徵的方式 把半結構化數據 非結構化數據轉化爲結構化數據,而後進行機器學習。
按輸入數據是否預測狀態分,能夠分爲有監督學習數據及無監督學習數據,直接決定後續模型是使用分類模型仍是聚類模型。
同時若是數據量到達了T級,就要考慮時候hadoop框架了,這裏要說明的是,hadoop框架只是解決大數據處理效率瓶頸的工具,除非你志向是作架構師,否則不用深究,掌握hadoop家族的sql處理工具hive和機器學習工具mahout就能夠了,須要掌握java和sql,這是基礎。
下一步,數據清洗和數據降維,在數據清洗方面不是學術界研究的重點,清洗方法有不少,主要經過描述性統計量填補缺失值和極端值,數據降維方面有較多比較出名的算法,如主成分分析,lasso,LDA線性判別分析,變量聚類等,數據降維是重點,由於維度過大容易產生維度災難和過分擬合問題。
而後是數據分區(有監督學習才須要作),分紅訓練集,驗證集,測試集,分別用於訓練模型,模型內修正,多模型效果對比用。不展開討論。
接着建模,分爲分類算法,聚類算法,規則關聯算法,分類算法是大頭,建議分別拜讀支持向量機,機率圖模型,神經網絡(雖然我不喜歡可是google的深度學習就是用的神經網絡),決策樹(C4.5),邏輯迴歸(吐槽:線性迴歸什麼的看不看得看我的水平),混合高斯模型等,聚類算法有KNN,LDA潛在迪力克雷分析(作文本挖掘效果一流),聚類算法研究很少,大多機器學習算法都是基於有監督學習的,即分類算法。規則關聯算法有最簡單的規則關聯,路徑關聯分析,及協同過濾(推薦系統首選,輸入數據量太大數據太稀疏跑數效率很低通常須要hadoop支持),模型是機器學習的核心,還有一些優化模型,如EM模型等,建議閱讀增長知識廣度,要求學習人員要懂如下課程:機率論,高數,線性優化,線性代數還有英文,也能夠邊看論文邊學。書籍的話推薦數據挖掘十大算法做爲入門索引,而後根據每章節的參考文獻找原文閱讀,記得把公式推導一遍。
結果評估:原本不該該是重點,可是從我的學習和工做經歷發現,有不少人不是很會看模型結果,甚至包括一些專業人士。因此若是有志作機器學習的千萬要學會看結果,否則就丟人丟大了。
最直接的兩個指標準確度percision和召回度recall,分別描述模型的精度和泛化性的,模型結果應在二者取得均衡。最小平方偏差也是描述準確度的,算法不同,你們更喜歡用這個評估模型精度。還有一些K-S值,基尼值,ROC值也是描述準確度和擬合度的,不一樣的軟件會使用不一樣的指標,注意一下。還有就是提高度,事件捕獲率這些就是描述分類預測下前百分之幾數據的預測準確性狀況的,不展開討論。最直接的學法就是認真讀論文的實驗部分,看看它的指標評價量。
最後是工具和語言,按如今數據挖掘與機器學習的趨勢,必須掌握java,python,緣由是hadoop是處理大數據的框架,已成趨勢,hadoop是java寫的,挖掘工具mahout是java寫的。python的好處在於底層基於C,語法簡單,效率高,並且有不少開源的算法能夠直接用,支持mapreduce。能夠選擇掌握R,同python,可是R效率木有python高,若是是針對商業分析建議學習SAS,由於它集成了一套專業的數據可視化及數據分析方案,大大方便了數據展現功能,這是做爲商業分析所必須的。
最後補充一點,不少作數據挖掘和機器學習的人最後都走火入魔執着技術忽略了業務的重要性,忽略了模型可解釋性的重要性,埋頭苦幹作出業務人員不能理解的黑箱模型,沒法說服業務使用,最終淪爲雞肋的存在,因此在學習過程當中要時刻設想技術適應的業務場景,在算法效果接近時選擇高可解釋性算法,作好結果的圖形化展現,讓業務理解,這纔是王道。
補充,andrew ng的公開課不錯,但仍是建議先看論文。
這兩天看到李航老師的《統計學習方法》,感受寫的很是好,適合入門,機器學習的基本概念都有,可是不太深刻,中文書寫,全部專業名詞給出英文翻譯。適合給初學者創建概念,能夠系統的瞭解機器學習。
原答案:
強烈推薦這個UFLDL教程 - Ufldl。這是Andrew Ng寫的關於非監督特徵學習與深度學習的教程,關鍵是有一批無私且專業的網友,將其翻譯成中文,並有中英文對照,與Andrew Ng商量後貼在了原網址上。很是感謝這些人啊。
對於一個初學者,若是單純從英文教材(視頻)入手的話,會比較吃力,不少概念都沒創建起來,不少術語都沒有掌握,而這個教程設計機器學習不少的基本概念,並附有matlab習題,經過按部就班的練習,能夠更快掌握基本概念。
另外這個的好處是不像通常教材,面面俱到,不少追究的太深,不利於初學者創建概念!有了這個的基礎以後,再去看相關著做或者論文,確定駕輕就熟。
臺大林軒田的《機器學習基石》和《機器學習技法》公開課,很適合入門,算法基本都是從function fitting和最優化的角度來說,不多涉及統計,做業的理論題有必定難度。