強烈推薦Andrew Ng的機器學習課程
從12.30到1.17修完了Coursera上的Andrew Ng的機器學習課程,計劃上又可以劃掉一件事了。
課程的主要內容大致如下:
- 監督學習:線性迴歸、邏輯迴歸、神經網路、支援向量機
- 非監督學習:K均值、主成分分析、異常檢測
- 案例:垃圾郵件
- 特殊領域:推薦系統(協同過濾)、大規模機器學習(map-reduce)
- 方法論:偏差/方差問題、正則化、學習曲線、誤差分析、如何收集樣本資料、機器學習流水線、上限分析等等
習題主要是兩大類:選擇題和程式設計題(matlab),選擇題又分為單選和多選,只有答案沒有解釋,有些題難度還是有的。程式設計題自認為相對簡單,只需瞭解簡單的matlab程式設計和矩陣知識,上課好好聽講基本上就是滿分。我的總成績為98.4,程式設計題基本上100,選擇題錯了兩個,想參考的可以戳這裡 。
課程用我自己的話總結就是:不裝逼,說人話,循循善誘,詳略得當。
記得Andrew Ng在講到神經網路的反向傳播演算法時,花了大量的篇幅來介紹這一演算法,儘管如此還是害怕有些學生不會影響自信心,他這樣說道:作為多年的從業者,有時候猛然想起這個演算法也得想好一會,這個演算法不是那麼直觀。在講到svm還是哪一課的時候,記不太清了,他又鼓勵同學們:原理不懂也沒有關係,事實上這些演算法的原理直到最近我才搞明白,事實證明不瞭解演算法的原理也能很好的使用它們。這一點比那些一瓶子不滿半瓶子晃盪的老師強多了。
拋開老師的謙虛,在初學一樣東西時,適當的忽略一些底層細節是一個很重要的學習方法。我發現不少同學包括我自己在學習機器學習的時候遇到一個演算法,不由自主的想了解全部的數學細節,不這樣心裡就不踏實,以至於還沒走到機器學習的門檻就已經倒線上性代數、概率論、數值分析的汪洋大海里了,其實這是一個本末倒置的學習方法。這就好比買了一輛汽車,難道你還要去修一門內燃機原理的課程?當然這不是鼓勵大家囫圇吞棗,而是讓大家抓住重點,不要把面鋪的太廣,否則收不回來。真正好的方法是學機器學習就把重點放在機器學習上,一些底層細節就當成既有的事實,等到學有餘力再重點突破。所以學習的時候一定要控制自己那種無限扣細節的衝動。
另外一個其他課程沒有或者很少提到的是這門課程Andrew Ng介紹了很多的機器學習方法論,比如學習曲線、誤差分析、流水線、上線分析等等,這才是真正的金玉良言,可遇不可求的。眾所周知,象棋的規則很簡單,難的是如何開局,如何化解對手的攻勢,如何一步一步積累自己的優勢達到勝利,這些都是需要在實踐中摸索,如果純靠自己摸索,新手要走不少的彎路,而如果一開始別人把這些告訴你,你就可以事半功倍。
觀察課程的主要內容可以看到這門課介紹的演算法並不是很全面,比如常見的決策樹、隨機森林、貝葉斯演算法等等都沒有,有人可能覺得這是課程的缺點,我倒覺得這反而是優點,有道是一招鮮吃遍天,機器學習的演算法是有固定的模式的,比如監督學習,基本上都是提出一個假設函式,然後去擬合現有資料,也就是生成一個代價函式,然後用數學方法找到使代價函式最小的引數,所以學會這些典型的演算法再去學其他的演算法沒什麼難度;另一個是影響機器學習效能的關鍵往往並不是演算法本身而是你擁有的資料量、特徵的選取、如何進行誤差分析、如何進行模型的調優,這一點課程也有論述,我就不班門弄斧了。總之,這是一門我強烈推薦的課程,適合入門者進階者。