<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 通過從零開始實現它們來理解機器學習算法(以及繞過壞代碼的策略) > 原文: [https://machinelearningmastery.com/understand-machine-learning-algorithms-by-implementing-them-from-scratch/](https://machinelearningmastery.com/understand-machine-learning-algorithms-by-implementing-them-from-scratch/) 從頭開始實現機器學習算法似乎是程序員理解機器學習的好方法。 也許是。 但這種方法也存在一些缺點。 在這篇文章中,您將發現一些可用于從頭開始實現機器學習算法的優秀資源。 您還將發現這種看似完美的方法的一些局限性。 您是否已從頭開始實施機器學習算法以努力了解它發表評論,我很想知道您的體驗。 ![Implement machine learning algorithms from scratch](img/35a8ed553b9e6fa81d80e0e3a3f35836.jpg) 從頭開始實現機器學習算法! 攝影: [Tambako The Jaguar](https://www.flickr.com/photos/tambako/4283191966) ,保留一些權利。 ## 從頭開始實施機器學習算法的好處 我提倡從頭開始實現機器學習算法的想法。 我想你可以學到很多關于算法如何工作的知識。我還認為,作為一名開發人員,它為學習機器學習中使用的數學符號,描述和直覺提供了橋梁。 我之前已經討論了從頭開始實現算法的好處[“HTG0]從頭開始實現機器學習算法的好處”。 在帖子中,我列出了以下好處: 1. 你獲得的理解 2. 它提供的起點 3. 它所強制的算法和代碼的所有權 同樣在那篇文章中,我評論了如何通過利用現有的教程和書籍來簡化流程。開始時有很多好的資源,但也有值得關注的絆腳石。 在下一節中,我指出了您可以遵循的三本書,從頭開始實現機器學習算法。 在過去的幾年里,我幫助了許多程序員開始進行機器學習。根據我的經驗,我列出了5個最常見的絆腳石,我看到絆倒了程序員以及你可以用來克服它們的策略。 最后,您將發現3個快速提示,以便從代碼教程中獲得最大收益,并從復制粘貼程序員(如果您恰好是一個)中真正深入了解機器學習算法的漏洞。 ## 獲取免費算法思維導圖 ![Machine Learning Algorithms Mind Map](img/2ce1275c2a1cac30a9f4eea6edd42d61.jpg) 方便的機器學習算法思維導圖的樣本。 我已經創建了一個由類型組織的60多種算法的方便思維導圖。 下載,打印并使用它。 ## 可以用來實現算法的好書 我已經從頭開始實施了很多算法,直接來自研究論文。這可能非常困難。 遵循別人的教程是一個更溫和的開始。 您可以使用許多優秀的資源從頭開始實現機器學習算法。 也許最權威的是指導您完成教程的書籍。 從一本書開始有很多好處。例如: * 其他人已經找到了算法以及如何將其轉換為代碼。 * 您可以將其用作修補和實驗的已知工作起點。 一些指導您逐步實施機器學習算法的優秀書籍包括: ### Scratch的數據科學:Joel Grus的Python的第一原理 這真的是從零開始,通過可視化,統計,概率,處理數據,然后是大約12種不同的機器學習算法。 這是我今年最喜歡的初學機器學習書籍之一。 [![Amazon Image](img/540e454d081f9d11759a1831e9c18a8c.jpg)](http://www.amazon.com/dp/149190142X?tag=inspiredalgor-20) ### 機器學習:Stephen Marsland的算法視角 這是期待已久的第二版這本暢銷書。這涵蓋了大量不同的機器學習算法和實現。 我喜歡它,它提供了數學描述,偽代碼以及工作源代碼的混合。 [![Amazon Image](img/bbd25613cb12b55b69497c7479119553.jpg)](http://www.amazon.com/dp/1466583282?tag=inspiredalgor-20) ### Peter Harrington的“機器學習” 本書通過10種最流行的機器學習算法進行工作,這些算法提供案例研究問題并在Python中使用代碼示例。 我喜歡使用編號和箭頭將代碼與描述聯系起來。 [![Amazon Image](img/aa40eb3d905cec1b098596d57a0b3ac5.jpg)](http://www.amazon.com/dp/1617290181?tag=inspiredalgor-20) 我是否錯過了一本好書,它提供了從頭開始實現機器學習算法的編程教程? 請在評論中告訴我。 ## 從頭開始實現算法時的5個絆腳石(以及如何克服它們) 使用教程從頭開始實現機器學習算法非常有趣。 但是可能存在絆腳石,如果你不小心,他們可能會絆倒你并扼殺你的動力。 在本節中,我想指出我看到的5個最常見的絆腳石以及如何使用它們而不是讓它們阻擋你。我希望你能夠解開(或繼續學習另一個教程)。 避免下面出現絆腳石的一些好的一般建議是在深入研究教程之前仔細檢查書籍的評論(或博客文章的評論)。您希望確保代碼有效并且您不會浪費時間。 另一個普遍的策略是無論如何潛入并找出不起作用的部件并自己重新實施。這是強迫理解的一個很好的黑客,但它可能不適合初學者,你可能需要一個很好的技術參考。 無論如何,讓我們從頭開始學習機器學習的5個常見絆腳石: ### 1)守則不起作用 最糟糕的也許是最常見的絆腳石是示例中的代碼不起作用。 事實上,如果您花一些時間在亞馬遜的書評中查看某些文本或大博客帖子的評論,很明顯這個問題比您想象的更為普遍。 這是怎么發生的?我想到的一些原因可能會為您提供應用自己的修復程序并繼續執行的線索: * **代碼從未起作過**。這意味著該書出版時沒有經過仔細編輯。除了可能進入作者的思想并試圖找出他們的意思之外,你在這里做的不多。甚至可以嘗試聯系作者或出版商。 * **語言已經移動**。這種情況可能發生,特別是如果帖子陳舊或者書籍已經印刷了很長時間。兩個很好的例子是Ruby的版本從1.x移動到2.x,Python從2.x移動到3.x. * **第三方庫繼續**。這適用于那些實現并非完全從頭開始并且使用了一些實用程序庫的情況,例如繪圖。這通常不是那么糟糕。您通常只需更新代碼即可使用最新版本的庫并修改參數以滿足API更改。甚至可以安裝舊版本的庫(如果您的開發環境中可能存在很少或沒有依賴關系)。 * **數據集已移至**。如果數據文件是URL并且不再可用(也許您可以在其他地方找到該文件),則會發生這種情況。如果該示例針對第三方API數據源(如Facebook或Twitter)進行編碼,情況會更糟。這些API可以快速改變很多。您最好的選擇是了解最新版本的API并盡可能調整代碼示例。 如果代碼不起作用,一個很好的一般策略是查找相關的勘誤表,如果它是一本書,GitHub存儲庫,代碼下載或類似。有時問題已經修復,可以在書籍或作者的網站上找到。一些簡單的谷歌搜索應該把它打開。 ![Algorithms from scratch](img/5598211a1a4b776a81b820fb3794cecf.jpg) 代碼機學習算法完全從頭開始。照片來自 [Tambako The Jaguar](https://www.flickr.com/photos/tambako/559607386) ,保留一些權利 ### 2)代碼描述不佳 我認為從頭開始實現算法時第二個最糟糕的障礙是代碼提供的描述不好。 這些類型的問題對初學者來說尤其不利,因為你正在盡力保持動力,并從練習中學到一些東西。如果代碼和文本不對齊,所有這些都會消失。 我(或許好心地)稱他們為“_壞描述_”因為可能有許多癥狀和原因。例如: * **代碼與描述不匹配**。這可能是由于在不同時間準備的代碼和文本以及未正確編輯在一起而引起的。它可能像變量名稱更改一樣小,也可能是整個函數名稱或函數本身。 * **缺少解釋**。有時你會得到大塊的代碼,你應該弄清楚。這是令人沮喪的,特別是在一本書中,它是一頁又一頁的代碼,在屏幕上更容易理解。如果是這種情況,您可能最好找到代碼的在線下載并直接使用它。 * **Terse解釋**。有時您會得到代碼的解釋,但它們太簡短了,比如“_使用信息獲取_”或其他什么。令人沮喪!您仍然可能有足夠的時間來研究這個術語,但如果作者在上下文中包含了一個解釋并且與示例相關,則會更容易。 一個很好的一般策略是在其他資源中查找算法的描述,并嘗試將它們映射到您正在使用的代碼上。從本質上講,嘗試為代碼構建自己的描述。 這可能不是初學者的選擇,您可能需要轉移到另一個資源。 ### 3)代碼不是慣用語 我們程序員可以對我們語言的“正確”使用迂腐(例如Python代碼不是Pythonic)。這是一件好事,它表現出對細節和最佳實踐的良好關注。 如果示例代碼不是寫入它的語言的慣用語,那么它可能不合適。有時它會讓人分心,以致代碼無法讀取。 有很多原因可能是這種情況,例如: * **來自其他語言**的端口。示例代碼可以是來自另一種編程語言的端口。例如Java中的FORTRAN或Python中的C語言。對于受過訓練的人來說,這顯而易見。 * **作者正在學習語言**。有時,作者可能會使用書籍或輔導項目來學習語言。這可以通過代碼示例中的不一致來體現。當示例冗長,使用語言功能和API時,這可能令人沮喪甚至分散注意力。 * **作者沒有專業地使用該語言**。這可以更加微妙,并且可以通過使用深奧的語言特性和API來體現。當您必須研究或解碼奇怪的代碼時,這可能會令人困惑。 如果慣用代碼對您來說非常重要,那么這些絆腳石可能是一個機會。您可以將代碼從“ _Java-Python_ ”混合(或其他)移植到純Pythonic實現。 通過這樣做,您將獲得對算法的更深入理解以及對代碼的更多所有權。 ### 4)代碼未連接到數學 一個好的代碼示例或教程將提供從數學描述到代碼的橋梁。 這很重要,因為它允許您穿越并開始為符號和簡潔的數學描述建立直覺。 問題是,有時這座橋可能完全被打破或丟失。 * **數學錯誤。** 這對初學者來說是陰險的,因為初學者已經在努力建立從數學到代碼的連接。不正確的數學可能誤導或更糟糕的消耗大量的時間而沒有回報。知道這是可能的,這是一個良好的開端。 * **Terse數學描述**。方程式代碼可以圍繞示例代碼散布,讓您了解它是什么以及它與代碼的關系。你有幾個選擇,你可以把它當作一個無數學的例子,并參考一個不同的更完整的參考文本,或者你可以努力將數學與代碼本身聯系起來。對于那些不熟悉算法的數學描述并且似乎將其作為后續思想放棄的作者??來說,這更有可能。 * **缺少數學**。根據設計,一些參考文獻是免費的。在這種情況下,您可能需要找到自己的參考文本并自己構建橋。這可能不適合初學者,但這是一項值得投入時間的技巧。 初學者可能希望堅持使用代碼并忽略數學,以建立信心和動力。之后,它將投資于高質量的參考文本,并開始將代碼與數學相關聯。 您希望善于將代數與標準代碼構造相關聯,并為所涉及的過程建立直覺。這是一種應用技巧。你需要投入工作和實踐。 ### 5)不完整的代碼清單 我們在2)中看到,您可以沒有描述和長列表代碼。如果沒有足夠的代碼,可以反轉此問題。代碼清單不完整時就是這種情況。 我是完整代碼清單的忠實信徒。我認為代碼清單應該為您提供“_完整_”和工作實現所需的一切,即使它是最簡單的情況。 你可以建立一個簡單的案例,你不能運行一個不完整的例子。你必須投入工作并將它們捆綁在一起。 可能出現這種絆腳石的一些原因是: * **詳細說明**。冗長的寫作可能是思維不完整的標志。并非總是,但有時候。如果某些事情沒有得到很好的理解,可能會有一種隱含的嘗試,用一句話來掩蓋它。如果根本沒有代碼,您可以將其作為從描述中設計算法的挑戰,并從其他描述和資源中證實它。 * **代碼段**。可以精心描述概念,然后使用小代碼片段進行演示。這有助于將概念與代碼片段緊密聯系起來,但是需要代表您進行大量工作才能將它們整合到一個工作系統中。 * **沒有樣品輸出**。代碼示例中經常缺少的一個關鍵方面是示例輸出。如果存在,這可以讓您明確地了解運行時會發生什么。沒有樣本輸出,這是一個總猜測。 在某些情況下,必須自己將代碼綁在一起可能會帶來一個有趣的挑戰。同樣,不適合初學者,但是一旦你掌握了一些算法,這可能是一個有趣的練習。 ## 從實現算法中獲得最大收益的3個技巧 您可以實現相當數量的算法。一旦你做了一些,你可能會做更多的事情,在你知道它之前,你已經構建了自己的小算法庫,你可以親密理解。 在本節中,我將為您提供3個快速提示,您可以使用它們來充分利用實現機器學習算法的經驗。 1. **添加高級功能**。以您的工作代碼示例為基礎并構建它。如果教程有任何好處,它將列出擴展的想法。如果沒有,你可以自己研究一下。列出算法的一些候選擴展并逐個實現它們。這將迫使您至少理解代碼足以進行修改。 2. **適應另一個問題**。在不同的數據集上運行算法。修復任何問題,如果它中斷。更進一步,使實施適應不同的問題。如果代碼示例是兩級分類,則將其更新為多類分類或回歸。 3. **可視化算法行為**。我發現即使在今天,實時繪制算法表現和行為也是一種非常有價值的學習工具。您可以通過在測試和訓練數據集上繪制迭代級別(所有算法在某種程度上迭代)精度來開始。從那里,您可以選擇特定于算法的可視化,例如自組織映射的2D網格,回歸中時間序列的系數,以及k-Nearest Neighbors算法的voronoi鑲嵌。 我認為這些技巧將使您比教程和代碼示例更進一步。 最后一點尤其會讓您深入了解算法行為,很少有從業者花時間去獲取。 ## 你的行動步驟 這是一篇很長的文章,您已經學會了如何從頭開始實現機器學習算法。 重要的是,你已經了解了最常見的絆腳石,一些關于它們如何發生的框架,以及一些可以用來將它們變成機會的策略。 您的下一步是顯而易見的:從頭開始實施算法。 ### 不確定從哪里開始? 從這里開始,我有一個[溫和的教程,用于在Python中實現k-Nearest Neighbors](http://machinelearningmastery.com/tutorial-to-implement-k-nearest-neighbors-in-python-from-scratch/) 算法。 ### 仍然不確定? 從Scratch獲取[數據科學的副本:Python的第一原理](http://www.amazon.com/dp/149190142X?tag=inspiredalgor-20)。你不會后悔的。 ### 分享您的經驗 發表評論并讓我了解您從頭開始實施機器學習算法的經驗。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看