日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

从零实现来理解机器学习算法:书籍推荐及障碍的克服

發(fā)布時間:2025/3/21 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从零实现来理解机器学习算法:书籍推荐及障碍的克服 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


從零實現(xiàn)來理解機器學(xué)習(xí)算法:書籍推薦及障礙的克服

發(fā)表于2015-09-10 16:16| 1261次閱讀| 來源Machine Learning Mastery| 2 條評論| 作者Jason Brownlee

機器學(xué)習(xí)編程語言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">摘要:現(xiàn)階段有些開發(fā)者并沒有機器學(xué)習(xí)算法的基礎(chǔ)知識,但是怎么才能讓開發(fā)者從零入門來學(xué)習(xí)好機器學(xué)習(xí)算法,這篇文便幫助開發(fā)者總結(jié)推薦了一些辦法。

【編者按】并非所有的開發(fā)者都有機器學(xué)習(xí)算法的基礎(chǔ)知識,那么開發(fā)者如何從零入門來學(xué)習(xí)好機器學(xué)習(xí)算法呢?本文總結(jié)推薦了一些從零開始學(xué)習(xí)機器學(xué)習(xí)算法的辦法,包括推薦了一些合適的書籍,如何克服所面臨的各種障礙,以及快速獲得更多知識的竅門。

從零開始實現(xiàn)機器學(xué)習(xí)算法似乎是開發(fā)者理解機器學(xué)習(xí)的一個出色方式。或許真的是這樣,但這種做法也有一些缺點。

在這篇文章中,你會發(fā)現(xiàn)一些很好的資源,可以用來從零開始實現(xiàn)機器學(xué)習(xí)算法。你也會發(fā)現(xiàn)一些看似完美的方法的局限性。你已經(jīng)從零開始實現(xiàn)機器學(xué)習(xí)算法并努力學(xué)習(xí)留下的每一條評論了么?我很樂意聽到關(guān)于你的經(jīng)驗。


從零開始實現(xiàn)機器學(xué)習(xí)算法!圖片來自Tambako The Jaguar

從零開始實現(xiàn)機器學(xué)習(xí)算法的好處

我推廣了從零開始實現(xiàn)機器學(xué)習(xí)算法的觀念。

我認為你可以學(xué)到很多關(guān)于算法是如何工作的。我也認為,作為一名開發(fā)者,它提供了一個學(xué)習(xí)用于機器學(xué)習(xí)的數(shù)學(xué)符號、描述以及直覺的橋梁。

?在“從零開始實現(xiàn)機器學(xué)習(xí)算法的好處”這篇文章里,我已經(jīng)討論了從零實現(xiàn)機器學(xué)習(xí)算法的好處。

在那篇文章,我列出的好處如下:

  • 你獲取了知識;
  • 它提供了一個起點;
  • 擁有算法和代碼的所屬權(quán)。
  • 在這篇文章中,我對如何利用現(xiàn)有的教程和書籍來縮短這個學(xué)習(xí)過程表達了一些個人看法。有一些用于初學(xué)的豐富資源,但也要堤防一些絆腳石。

    下一節(jié),我指出了三本書,你可以照著書籍從零開始實現(xiàn)機器學(xué)習(xí)算法。

    在過去的幾年里,我已經(jīng)在機器學(xué)習(xí)入門中幫助了許多程序員。根據(jù)我的經(jīng)驗,我列出了五項曾困擾過程序員的最常見的障礙,以及你可以用來克服它們的技巧。

    最后,你會發(fā)現(xiàn)3個快速技巧,用以從代碼教程中獲得更豐富的知識,并從一個復(fù)制粘貼的程序員(如果你碰巧是其中一個)到一個真正深入機器學(xué)習(xí)算法的學(xué)者。

    用于實現(xiàn)算法的優(yōu)秀書籍

    我從零實現(xiàn)過許多算法,這些算法直接來自研究論文。這個過程可能非常困難。

    跟著別人的教程來做是一個非常溫和的開始。有很多優(yōu)秀的資源,可以讓你用來從零開始實現(xiàn)機器學(xué)習(xí)算法。也許最具權(quán)威性的是能指導(dǎo)你完成整個教程的書籍。

    從啃書本開始學(xué)習(xí)有很多好處。例如:

    • 其他人已經(jīng)研究出了該算法并把它轉(zhuǎn)換成了代碼;
    • 你可以使用它作為一個用于修改和實驗的已知工作起點。

    那么,一步一步引導(dǎo)你完成機器學(xué)習(xí)算法實現(xiàn)的出色書籍有:

    Data Science from Scratch: First Principles with Python by Joel Grus

    這本書的確是從零開始,貫穿可視化操作、統(tǒng)計、概率、數(shù)據(jù)處理,然后是大約12個不同的機器學(xué)習(xí)算法。

    這本書是我今年最喜歡的機器學(xué)習(xí)初學(xué)者書籍之一。


    Machine Learning: An Algorithmic Perspective by Stephen Marsland

    這本書是我期待已久的這本流行書籍的第二版。它涵蓋了大量的不同種類的機器學(xué)習(xí)算法實現(xiàn)。

    我喜歡它既給出了數(shù)學(xué)描述和偽代碼,又包含了能執(zhí)行的源代碼。


    Machine Learning in Action by Peter Harrington

    該書貫穿了10個最受歡迎的機器學(xué)習(xí)算法,提供了案例研究問題并用Python代碼實例來解決。

    我喜歡它用符號和箭頭把代碼和描述緊密聯(lián)系在一起的形式。


    我是否有漏掉一本從零開始實現(xiàn)機器學(xué)習(xí)算法的編程教程書籍呢?

    如果有,請在評論中指出!

    從零實現(xiàn)機器學(xué)習(xí)算法的5個障礙(以及如何克服它們)

    根據(jù)教程從零開始實現(xiàn)機器學(xué)習(xí)算法是很有趣的。但也有可能會成為絆腳石,而且如果你不小心,他們可能會絆倒你并抹殺你的學(xué)習(xí)動機。

    在這一節(jié)中,我想指出我所看到的五個常見的絆腳石,以及如何與它們共存,而不是讓它們阻礙你。我的目的是讓你完全擺脫它并且破浪前行(或是轉(zhuǎn)移到另一個教程)。

    用來避免下面障礙的一些好的常規(guī)建議是在你深入一個教程之前,仔細檢查書籍的評論(或博客帖子的評論)。你要確保代碼是能夠工作的并且保證你不是在浪費時間。

    另一個常規(guī)策略是,無論深入的是什么,找出不工作的那部分,并自己去重新實現(xiàn)他們。這是一個強行理解的出色解決方法,但它可能不適合初學(xué)者,并且你可能需要一個很好的技術(shù)參考資料放在手邊。

    無論如何,讓我們從零開始機器學(xué)習(xí)教程,深入研究這5個常見的障礙:

    1)代碼不能正常工作

    最糟糕并且最常見的障礙就是實例當(dāng)中的代碼不能正常工作。

    事實上,如果你花一些時間瀏覽亞馬遜網(wǎng)站的一些書籍評論或博文評論,很顯然,這個問題比你想象的更為普遍。

    這是怎么發(fā)生的呢?有幾個原因可能會給你提供一些線索,可以應(yīng)用到你自己的修改中并繼續(xù)使用:

    • 代碼從不工作。這意味著,這本書沒有經(jīng)過精心編輯就出版了。在這種情況下,你能做的并不多,除非是進入作者的大腦,并試圖推測出他們的想法。或許還可以嘗試聯(lián)系作者本人或是出版商。
    • 語言已變動。這種情況可能會發(fā)生,特別是如果該文章是發(fā)布已久的或者該書已印刷了很長一段時間。兩個很好的例子是Ruby從1.x版本到2.x版本和Python從2.x版本到3.x版本。
    • 第三方庫已變動。這通常發(fā)生在那些情況下,即實現(xiàn)不完全是從零開始并且使用了一些有用的庫,如用于繪圖的庫。這通常不會那么糟糕。你可以通過經(jīng)常更新代碼來使用最新版本的庫以及修改參數(shù)來滿足API的修改。甚至可以安裝一個舊版本的庫(如果版本很少或是幾乎不需要可能破壞開發(fā)環(huán)境的其它依賴庫)。
    • 該數(shù)據(jù)集已變動。如果數(shù)據(jù)文件是一個下載鏈接,并且已經(jīng)失效(也許你可以在其它地方找到該文件),這種情況下就有可能會發(fā)生。如果這個例子是針對第三方API數(shù)據(jù)來源,比如Facebook或Twitter,該情況會更加糟糕。這些APIs可以迅速地改變很多。如果可能的話,你最好的辦法是了解最新版本的API,并改寫代碼中的實例。

    如果它是一本書、GitHub庫、代碼下載或者類似的,如果代碼不工作,一個好的常規(guī)策略是尋找相關(guān)的勘誤表。有時這些問題已經(jīng)在書上或作者的網(wǎng)站上修正了。一些簡單的谷歌搜索就能找到它們。


    2) 代碼不規(guī)范描述

    當(dāng)從零開始實現(xiàn)算法時,我認為第二個糟糕的絆腳石是提供的代碼描述很糟糕。

    對于初學(xué)者來說,這類問題特別不好,因為你正在努力維持積極性,而實際上你是從練習(xí)中學(xué)習(xí)一些東西。如果代碼和文本不一致,所有的這些都會在煙霧中漸漸消失。

    我(或許比較溫和)把他們稱為“糟糕的描述”,因為可能有很多的癥狀和原因。例如:

    • 代碼和描述之間的不匹配。這可能是由于代碼和文本在不同時間準(zhǔn)備而造成的,并且不能正確地編輯起來。它可能是一些小的,如一個變量名稱的變化,或者它可能是整個函數(shù)名或函數(shù)本身的變化。
    • 缺失的解釋。有時,你會得到你所期望獲得的大量代碼。這是令人沮喪的,特別是書中連篇累牘的代碼,可能在屏幕上更容易理解。如果是這樣的話,最好的方法是找到在線下載的代碼并直接使用它來工作。
    • 過于簡潔的解釋。有時你會對代碼進行解釋,但它們可能過于簡單,如“使用信息增益”或任何其它的。令人沮喪!你可能還要花更多的時間來研究這個術(shù)語,但如果作者在上下文中包含了一個該術(shù)語的解釋以及相關(guān)的實例,那么這就會顯得更簡單。

    一個好的常規(guī)方法是在其它的資源里尋找算法的描述,并嘗試將它們映射到你所使用的代碼中。從本質(zhì)上講,是嘗試建立你自己的代碼描述。

    這對初學(xué)者來說可能不是一個好的選擇,你可能需要轉(zhuǎn)到另一個資源上。

    3)代碼不符合語言習(xí)慣

    我們程序員可以對我們語言的 “正確”使用咬文嚼字(如Python代碼不是Pythonic)。這其實是一件好事,它顯示了對細節(jié)和最佳實踐的充分關(guān)注。

    當(dāng)實例代碼不符合語言編寫習(xí)慣時,它可能會讓人排斥。有時它會使代碼零散以至于難以理解。

    這種情況有許多原因,例如:

    • 來自另一種語言的接口。實例代碼可能是另一種編程語言的接口。如在Java中調(diào)用FORTRAN或在Python中調(diào)用C。在老手眼里,這會很顯眼。
    • 作者正在學(xué)習(xí)語言。有時,作者可能使用一本書或一個教程項目來學(xué)習(xí)語言。在整個代碼示例中,可能會不一致。當(dāng)實例多次使用難以理解的語言特征和API時,這可能會讓人失望甚至分散注意力。
    • 作者沒有使用專業(yè)語言。這可能是更加微妙的一點,可以通過使用深奧的語言功能和APIs來體現(xiàn)。當(dāng)你必須研究或解讀奇怪的代碼時,這可能會讓你混淆。

    如果你慣用的代碼對你非常重要,這些障礙可能會是一個機會。你可以把接口代碼從“Java-Python”混合體(或別的什么)化為一個純Python的實現(xiàn)。

    這么做之后,你將得到一個更深層次的算法理解以及更多的代碼所屬權(quán)。

    4)代碼和數(shù)學(xué)無關(guān)

    一個很好的代碼示例或教程將提供一個從數(shù)學(xué)描述到代碼的橋梁。

    這很重要,因為它允許你跨越代碼和數(shù)學(xué),并開始為符號和簡明的數(shù)學(xué)描述形成一個直覺。

    問題是,有時候這個橋梁可能會被徹底破壞或是丟失。

    • 數(shù)學(xué)上的錯誤。這對初學(xué)者來說是潛在的,因為建立從數(shù)學(xué)到代碼的關(guān)聯(lián)已經(jīng)很緊張了。不正確的數(shù)學(xué)可能會誤導(dǎo)或者嚴重地消耗大量的時間,并且還沒有回報。知道這個可能會發(fā)生,就是一個很好的開始。
    • 簡明的數(shù)學(xué)描述。方程可以在示例代碼中四處散落,讓你去弄清楚它究竟是什么,以及它是如何與代碼相關(guān)聯(lián)的。你的選擇不多,你可以把它當(dāng)做是一個與數(shù)學(xué)無關(guān)的例子,并參考一個不同的更加完整的參考文本,或者你可以努力把數(shù)學(xué)與自己的代碼關(guān)聯(lián)起來。這更有可能的是作者本身就不熟悉算法的數(shù)學(xué)描述,而且似乎是事后才添加到文章里的。
    • 缺失的數(shù)學(xué)。有些參考文獻在描述數(shù)學(xué)時是自由的。在這種情況下,你可能需要找到自己的參考文本,并建立自己的橋梁。這可能不適合初學(xué)者,但這是一個技能,很值得去投入時間。

    一個初學(xué)者可能會堅持代碼而忽略數(shù)學(xué),建立信心和動力。之后,它將為一個高質(zhì)量的參考文本以及關(guān)聯(lián)代碼和數(shù)學(xué)付出代價。

    你想要擅長于關(guān)聯(lián)代數(shù)和標(biāo)準(zhǔn)代碼,并為有關(guān)過程建立一個直覺。這是一個應(yīng)用技巧。需要你投入工作與實踐。

    5)不完整的代碼列表

    我們在2)中看到,你可以有不帶任何描述和長列表的代碼。然而,當(dāng)你沒有大量代碼的時候,這個問題會逆轉(zhuǎn)。這也就是代碼列表不完整時的情況。

    事實上,我是一個完整代碼列表的忠實信徒。我認為代碼列表應(yīng)該給你所需要的,給你一個“完整”的代碼和工作實現(xiàn),即使它是最簡單的情況。

    你可以建立一個簡單的實例,但你不能運行一個不完整的例子。你必須把它放在工作中并把所有的都聯(lián)系在一起。

    這個障礙可能成為事實的一些原因是:

    • 冗長的描述。冗長的編寫可能是一個不完整思維的標(biāo)志。但有時候,也不一直都是這樣。如果理解的不是很好,可能會在潛意識里試圖用一堆詞來掩飾。如果沒有任何代碼,你可以把它當(dāng)作是一個挑戰(zhàn),根據(jù)描述來設(shè)計算法,并從其它描述和資源來證實它。
    • 代碼片段。概念可能會精心描述,然后使用一個小代碼片段來證實。這有助于緊密配合代碼段的概念,但它需要你自己大量的工作,將其結(jié)合在一起,形成一個工作系統(tǒng)。
    • 無樣本輸出。代碼實例經(jīng)常失誤的一個關(guān)鍵方面通常是樣本輸出。如果有輸出的話,當(dāng)你運行它時,它可以給你一個期待的明確想法。沒有樣本輸出的話,那就完全是猜測。

    在某些情況下,把代碼聚在一起,這對你可能會是一個有趣的挑戰(zhàn)。這同樣不適合初學(xué)者,但是一旦你有一些算法之后,這也許會是一個有趣的鍛煉。

    3個訣竅讓你從算法實現(xiàn)中獲得更多知識

    你可以實現(xiàn)一個合理的算法。一旦你這樣做過,那么你可以做得更多,并在你知道它之前,你已經(jīng)建立了你自己非常理解的小算法庫。

    在這一節(jié)中,我想給你3個你可以使用的快速技巧,可以讓你從實現(xiàn)機器學(xué)習(xí)算法過程中獲得最多的經(jīng)驗。

  • 添加先進的特征。以你正常運行的代碼為例,并在它的基礎(chǔ)上創(chuàng)建。如果教程是好的,它將列出擴展的想法。如果沒有,你可以研究一些自己的。在算法的后面列出一系列的候選擴展算法并一個又一個的去實現(xiàn)它們。這至少會迫使你去理解代碼的意思并做出修改。
  • 適應(yīng)另一個問題。在不同的數(shù)據(jù)集上運行該算法。如果有任何問題,就解決它。進一步去適應(yīng)不同的問題實現(xiàn)。如果代碼示例是二分類,那么修改它讓其適用于多分類或回歸問題。
  • 可視化算法行為。我發(fā)現(xiàn)實時繪制算法的性能和行為是一個非常寶貴的學(xué)習(xí)工具,即使是在今天。你可以在測試集和訓(xùn)練集上開始按時期水平(所有的算法在一定程度上都是迭代的)繪制精確度。在那里,你可以選擇特定的可視化算法,如自組織映射模型的二維網(wǎng)格,回歸時間序列的系數(shù)和k近鄰算法的Voronoi劃分。
  • 我認為這些技巧與教程和代碼實例相比,會讓你走的更遠。

    特別是最后一點,會給你在算法行為上更深層次的見解,很少有從業(yè)人員花時間去學(xué)習(xí)它。

    你的行動步驟

    這是一篇很長的文章,現(xiàn)在,你已經(jīng)學(xué)會了如何從零開始實現(xiàn)機器學(xué)習(xí)算法。

    重要的是,你已經(jīng)了解了最常見的障礙、一些框架是如何形成的以及一些你可以運用的戰(zhàn)術(shù),你可以把它們轉(zhuǎn)化為機遇。

    你的下一步很明顯:從零開始實現(xiàn)算法。

    《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

    總結(jié)

    以上是生活随笔為你收集整理的从零实现来理解机器学习算法:书籍推荐及障碍的克服的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。