从零实现来理解机器学习算法:书籍推荐及障碍的克服
從零實現來理解機器學習算法:書籍推薦及障礙的克服
發表于2015-09-10 16:16| 1261次閱讀| 來源Machine Learning Mastery| 2 條評論| 作者Jason Brownlee
機器學習編程語言RubyPythonAPI width="22" height="16" src="http://hits.sinajs.cn/A1/weiboshare.html?url=http%3A%2F%2Fwww.csdn.net%2Farticle%2F2015-09-08%2F2825646&type=3&count=&appkey=&title=%E7%8E%B0%E9%98%B6%E6%AE%B5%E6%9C%89%E4%BA%9B%E5%BC%80%E5%8F%91%E8%80%85%E5%B9%B6%E6%B2%A1%E6%9C%89%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E7%AE%97%E6%B3%95%E7%9A%84%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86%EF%BC%8C%E4%BD%86%E6%98%AF%E6%80%8E%E4%B9%88%E6%89%8D%E8%83%BD%E8%AE%A9%E5%BC%80%E5%8F%91%E8%80%85%E4%BB%8E%E9%9B%B6%E5%85%A5%E9%97%A8%E6%9D%A5%E5%AD%A6%E4%B9%A0%E5%A5%BD%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E7%AE%97%E6%B3%95%EF%BC%8C%E8%BF%99%E7%AF%87%E6%96%87%E4%BE%BF%E5%B8%AE%E5%8A%A9%E5%BC%80%E5%8F%91%E8%80%85%E6%80%BB%E7%BB%93%E6%8E%A8%E8%8D%90%E4%BA%86%E4%B8%80%E4%BA%9B%E5%8A%9E%E6%B3%95%E3%80%82&pic=&ralateUid=&language=zh_cn&rnd=1442237231087" frameborder="0" scrolling="no" allowtransparency="true">摘要:現階段有些開發者并沒有機器學習算法的基礎知識,但是怎么才能讓開發者從零入門來學習好機器學習算法,這篇文便幫助開發者總結推薦了一些辦法。【編者按】并非所有的開發者都有機器學習算法的基礎知識,那么開發者如何從零入門來學習好機器學習算法呢?本文總結推薦了一些從零開始學習機器學習算法的辦法,包括推薦了一些合適的書籍,如何克服所面臨的各種障礙,以及快速獲得更多知識的竅門。
從零開始實現機器學習算法似乎是開發者理解機器學習的一個出色方式。或許真的是這樣,但這種做法也有一些缺點。
在這篇文章中,你會發現一些很好的資源,可以用來從零開始實現機器學習算法。你也會發現一些看似完美的方法的局限性。你已經從零開始實現機器學習算法并努力學習留下的每一條評論了么?我很樂意聽到關于你的經驗。
從零開始實現機器學習算法!圖片來自Tambako The Jaguar
從零開始實現機器學習算法的好處
我推廣了從零開始實現機器學習算法的觀念。
我認為你可以學到很多關于算法是如何工作的。我也認為,作為一名開發者,它提供了一個學習用于機器學習的數學符號、描述以及直覺的橋梁。
?在“從零開始實現機器學習算法的好處”這篇文章里,我已經討論了從零實現機器學習算法的好處。
在那篇文章,我列出的好處如下:
在這篇文章中,我對如何利用現有的教程和書籍來縮短這個學習過程表達了一些個人看法。有一些用于初學的豐富資源,但也要堤防一些絆腳石。
下一節,我指出了三本書,你可以照著書籍從零開始實現機器學習算法。
在過去的幾年里,我已經在機器學習入門中幫助了許多程序員。根據我的經驗,我列出了五項曾困擾過程序員的最常見的障礙,以及你可以用來克服它們的技巧。
最后,你會發現3個快速技巧,用以從代碼教程中獲得更豐富的知識,并從一個復制粘貼的程序員(如果你碰巧是其中一個)到一個真正深入機器學習算法的學者。
用于實現算法的優秀書籍
我從零實現過許多算法,這些算法直接來自研究論文。這個過程可能非常困難。
跟著別人的教程來做是一個非常溫和的開始。有很多優秀的資源,可以讓你用來從零開始實現機器學習算法。也許最具權威性的是能指導你完成整個教程的書籍。
從啃書本開始學習有很多好處。例如:
- 其他人已經研究出了該算法并把它轉換成了代碼;
- 你可以使用它作為一個用于修改和實驗的已知工作起點。
那么,一步一步引導你完成機器學習算法實現的出色書籍有:
Data Science from Scratch: First Principles with Python by Joel Grus
這本書的確是從零開始,貫穿可視化操作、統計、概率、數據處理,然后是大約12個不同的機器學習算法。
這本書是我今年最喜歡的機器學習初學者書籍之一。
Machine Learning: An Algorithmic Perspective by Stephen Marsland
這本書是我期待已久的這本流行書籍的第二版。它涵蓋了大量的不同種類的機器學習算法實現。我喜歡它既給出了數學描述和偽代碼,又包含了能執行的源代碼。
Machine Learning in Action by Peter Harrington
該書貫穿了10個最受歡迎的機器學習算法,提供了案例研究問題并用Python代碼實例來解決。我喜歡它用符號和箭頭把代碼和描述緊密聯系在一起的形式。
我是否有漏掉一本從零開始實現機器學習算法的編程教程書籍呢?
如果有,請在評論中指出!
從零實現機器學習算法的5個障礙(以及如何克服它們)
根據教程從零開始實現機器學習算法是很有趣的。但也有可能會成為絆腳石,而且如果你不小心,他們可能會絆倒你并抹殺你的學習動機。
在這一節中,我想指出我所看到的五個常見的絆腳石,以及如何與它們共存,而不是讓它們阻礙你。我的目的是讓你完全擺脫它并且破浪前行(或是轉移到另一個教程)。
用來避免下面障礙的一些好的常規建議是在你深入一個教程之前,仔細檢查書籍的評論(或博客帖子的評論)。你要確保代碼是能夠工作的并且保證你不是在浪費時間。
另一個常規策略是,無論深入的是什么,找出不工作的那部分,并自己去重新實現他們。這是一個強行理解的出色解決方法,但它可能不適合初學者,并且你可能需要一個很好的技術參考資料放在手邊。
無論如何,讓我們從零開始機器學習教程,深入研究這5個常見的障礙:
1)代碼不能正常工作
最糟糕并且最常見的障礙就是實例當中的代碼不能正常工作。
事實上,如果你花一些時間瀏覽亞馬遜網站的一些書籍評論或博文評論,很顯然,這個問題比你想象的更為普遍。
這是怎么發生的呢?有幾個原因可能會給你提供一些線索,可以應用到你自己的修改中并繼續使用:
- 代碼從不工作。這意味著,這本書沒有經過精心編輯就出版了。在這種情況下,你能做的并不多,除非是進入作者的大腦,并試圖推測出他們的想法。或許還可以嘗試聯系作者本人或是出版商。
- 語言已變動。這種情況可能會發生,特別是如果該文章是發布已久的或者該書已印刷了很長一段時間。兩個很好的例子是Ruby從1.x版本到2.x版本和Python從2.x版本到3.x版本。
- 第三方庫已變動。這通常發生在那些情況下,即實現不完全是從零開始并且使用了一些有用的庫,如用于繪圖的庫。這通常不會那么糟糕。你可以通過經常更新代碼來使用最新版本的庫以及修改參數來滿足API的修改。甚至可以安裝一個舊版本的庫(如果版本很少或是幾乎不需要可能破壞開發環境的其它依賴庫)。
- 該數據集已變動。如果數據文件是一個下載鏈接,并且已經失效(也許你可以在其它地方找到該文件),這種情況下就有可能會發生。如果這個例子是針對第三方API數據來源,比如Facebook或Twitter,該情況會更加糟糕。這些APIs可以迅速地改變很多。如果可能的話,你最好的辦法是了解最新版本的API,并改寫代碼中的實例。
如果它是一本書、GitHub庫、代碼下載或者類似的,如果代碼不工作,一個好的常規策略是尋找相關的勘誤表。有時這些問題已經在書上或作者的網站上修正了。一些簡單的谷歌搜索就能找到它們。
2) 代碼不規范描述
當從零開始實現算法時,我認為第二個糟糕的絆腳石是提供的代碼描述很糟糕。
對于初學者來說,這類問題特別不好,因為你正在努力維持積極性,而實際上你是從練習中學習一些東西。如果代碼和文本不一致,所有的這些都會在煙霧中漸漸消失。
我(或許比較溫和)把他們稱為“糟糕的描述”,因為可能有很多的癥狀和原因。例如:
- 代碼和描述之間的不匹配。這可能是由于代碼和文本在不同時間準備而造成的,并且不能正確地編輯起來。它可能是一些小的,如一個變量名稱的變化,或者它可能是整個函數名或函數本身的變化。
- 缺失的解釋。有時,你會得到你所期望獲得的大量代碼。這是令人沮喪的,特別是書中連篇累牘的代碼,可能在屏幕上更容易理解。如果是這樣的話,最好的方法是找到在線下載的代碼并直接使用它來工作。
- 過于簡潔的解釋。有時你會對代碼進行解釋,但它們可能過于簡單,如“使用信息增益”或任何其它的。令人沮喪!你可能還要花更多的時間來研究這個術語,但如果作者在上下文中包含了一個該術語的解釋以及相關的實例,那么這就會顯得更簡單。
一個好的常規方法是在其它的資源里尋找算法的描述,并嘗試將它們映射到你所使用的代碼中。從本質上講,是嘗試建立你自己的代碼描述。
這對初學者來說可能不是一個好的選擇,你可能需要轉到另一個資源上。
3)代碼不符合語言習慣
我們程序員可以對我們語言的 “正確”使用咬文嚼字(如Python代碼不是Pythonic)。這其實是一件好事,它顯示了對細節和最佳實踐的充分關注。
當實例代碼不符合語言編寫習慣時,它可能會讓人排斥。有時它會使代碼零散以至于難以理解。
這種情況有許多原因,例如:
- 來自另一種語言的接口。實例代碼可能是另一種編程語言的接口。如在Java中調用FORTRAN或在Python中調用C。在老手眼里,這會很顯眼。
- 作者正在學習語言。有時,作者可能使用一本書或一個教程項目來學習語言。在整個代碼示例中,可能會不一致。當實例多次使用難以理解的語言特征和API時,這可能會讓人失望甚至分散注意力。
- 作者沒有使用專業語言。這可能是更加微妙的一點,可以通過使用深奧的語言功能和APIs來體現。當你必須研究或解讀奇怪的代碼時,這可能會讓你混淆。
如果你慣用的代碼對你非常重要,這些障礙可能會是一個機會。你可以把接口代碼從“Java-Python”混合體(或別的什么)化為一個純Python的實現。
這么做之后,你將得到一個更深層次的算法理解以及更多的代碼所屬權。
4)代碼和數學無關
一個很好的代碼示例或教程將提供一個從數學描述到代碼的橋梁。
這很重要,因為它允許你跨越代碼和數學,并開始為符號和簡明的數學描述形成一個直覺。
問題是,有時候這個橋梁可能會被徹底破壞或是丟失。
- 數學上的錯誤。這對初學者來說是潛在的,因為建立從數學到代碼的關聯已經很緊張了。不正確的數學可能會誤導或者嚴重地消耗大量的時間,并且還沒有回報。知道這個可能會發生,就是一個很好的開始。
- 簡明的數學描述。方程可以在示例代碼中四處散落,讓你去弄清楚它究竟是什么,以及它是如何與代碼相關聯的。你的選擇不多,你可以把它當做是一個與數學無關的例子,并參考一個不同的更加完整的參考文本,或者你可以努力把數學與自己的代碼關聯起來。這更有可能的是作者本身就不熟悉算法的數學描述,而且似乎是事后才添加到文章里的。
- 缺失的數學。有些參考文獻在描述數學時是自由的。在這種情況下,你可能需要找到自己的參考文本,并建立自己的橋梁。這可能不適合初學者,但這是一個技能,很值得去投入時間。
一個初學者可能會堅持代碼而忽略數學,建立信心和動力。之后,它將為一個高質量的參考文本以及關聯代碼和數學付出代價。
你想要擅長于關聯代數和標準代碼,并為有關過程建立一個直覺。這是一個應用技巧。需要你投入工作與實踐。
5)不完整的代碼列表
我們在2)中看到,你可以有不帶任何描述和長列表的代碼。然而,當你沒有大量代碼的時候,這個問題會逆轉。這也就是代碼列表不完整時的情況。
事實上,我是一個完整代碼列表的忠實信徒。我認為代碼列表應該給你所需要的,給你一個“完整”的代碼和工作實現,即使它是最簡單的情況。
你可以建立一個簡單的實例,但你不能運行一個不完整的例子。你必須把它放在工作中并把所有的都聯系在一起。
這個障礙可能成為事實的一些原因是:
- 冗長的描述。冗長的編寫可能是一個不完整思維的標志。但有時候,也不一直都是這樣。如果理解的不是很好,可能會在潛意識里試圖用一堆詞來掩飾。如果沒有任何代碼,你可以把它當作是一個挑戰,根據描述來設計算法,并從其它描述和資源來證實它。
- 代碼片段。概念可能會精心描述,然后使用一個小代碼片段來證實。這有助于緊密配合代碼段的概念,但它需要你自己大量的工作,將其結合在一起,形成一個工作系統。
- 無樣本輸出。代碼實例經常失誤的一個關鍵方面通常是樣本輸出。如果有輸出的話,當你運行它時,它可以給你一個期待的明確想法。沒有樣本輸出的話,那就完全是猜測。
在某些情況下,把代碼聚在一起,這對你可能會是一個有趣的挑戰。這同樣不適合初學者,但是一旦你有一些算法之后,這也許會是一個有趣的鍛煉。
3個訣竅讓你從算法實現中獲得更多知識
你可以實現一個合理的算法。一旦你這樣做過,那么你可以做得更多,并在你知道它之前,你已經建立了你自己非常理解的小算法庫。
在這一節中,我想給你3個你可以使用的快速技巧,可以讓你從實現機器學習算法過程中獲得最多的經驗。
我認為這些技巧與教程和代碼實例相比,會讓你走的更遠。
特別是最后一點,會給你在算法行為上更深層次的見解,很少有從業人員花時間去學習它。
你的行動步驟
這是一篇很長的文章,現在,你已經學會了如何從零開始實現機器學習算法。
重要的是,你已經了解了最常見的障礙、一些框架是如何形成的以及一些你可以運用的戰術,你可以把它們轉化為機遇。
你的下一步很明顯:從零開始實現算法。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的从零实现来理解机器学习算法:书籍推荐及障碍的克服的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 美国进入“非结构化”数据分析新时代
- 下一篇: 关于数据科学,书上不曾提及的三点经验