<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/dont-start-with-open-source-code-when-implementing-machine-learning-algorithms/](https://machinelearningmastery.com/dont-start-with-open-source-code-when-implementing-machine-learning-algorithms/) [Edward Raff](https://www.linkedin.com/pub/edward-raff/40/920/99) 是Java機器學習庫的作者,名為 [JSAT](https://code.google.com/p/java-statistical-analysis-tool/) (Java統計分析工具的首字母縮寫)。 Edward在創建這個庫時實現了很多算法,最近我和他聯系并詢問他可以給初學者從頭開始實現機器學習算法的建議。 在這篇文章中,我們將介紹基于Edwards建議實現機器學習算法的技巧。 [![Implement Machine Learning Algorithms from Scratch](img/ee2d2be174f6f3355360894c7cc4cd86.jpg)](https://3qeqpr26caki16dnhd19sv6by6v-wpengine.netdna-ssl.com/wp-content/uploads/2014/10/Implement-Machine-Learning-Algorithms-from-Scratch.jpg) 從頭開始實施機器學習算法 照 [hackNY.org](http://www.flickr.com/photos/hackny/7036401939) ,保留一些權利 ## 不要閱讀其他人民源代碼 至少,不是最初的。 是什么讓我問愛德華有關他從頭開始實施機器學習算法的建議的問題是他對Reddit問題的評論,題目是“[實施機器學習算法](http://www.reddit.com/r/MachineLearning/comments/2h94uj/implementing_machine_learning_algorithms/)”。 在[他的評論](http://www.reddit.com/r/MachineLearning/comments/2h94uj/implementing_machine_learning_algorithms/ckqrn1t)中,Edward建議初學者盡可能避免查看其他開源實現的源代碼。他知道這與大多數建議相反([甚至是我自己的](http://machinelearningmastery.com/how-to-implement-a-machine-learning-algorithm/ "How to Implement a Machine Learning Algorithm")),它確實引起了我的注意。 Edward開始建議在實現機器學習算法時有兩個完全不同的任務: 1. ****實施**熟知算法**。這些在許多論文,書籍,網站講義等中都有很好的描述。你有很多來源,他們的算法比較直接,他們是自我教育的好案例研究。 2. **從論文**實施算法。這些算法在文獻中具有有限和稀疏的描述,并且需要大量的工作和先前的知識來理解和實施。 ## 獲取免費算法思維導圖 ![Machine Learning Algorithms Mind Map](img/2ce1275c2a1cac30a9f4eea6edd42d61.jpg) 方便的機器學習算法思維導圖的樣本。 我已經創建了一個由類型組織的60多種算法的方便思維導圖。 下載,打印并使用它。 ### 實現眾所周知的算法 如果您對實現眾所周知的算法感興趣,Edward建議閱讀代碼是一個壞主意。 我從他的評論中提煉了至少3個關鍵原因: * **代碼優化**:開源庫中的代碼很可能針對執行速度,內存和準確性進行了高度優化。這意味著它實現了各種數學和編程技巧。結果,代碼將很難遵循。您將花費大部分時間來計算技巧而不是計算出算法,這首先是您的目標。 * **以項目為中心**:代碼不是一個可以單獨運行的通用實現,它將精心設計為在項目框架內工作。框架也很可能從_方便地_“抽象和隱藏細節。您將花時間學習該框架及其設計,以便了解算法實現。 * **有限理解**:研究算法的實現并不能幫助您理解算法,它可以教您高效算法實現的技巧。一開始,最關鍵的時候,其他人的代碼會讓你感到困惑。 我認為這里有很深的智慧。 我要指出的是,開源實現有時可以幫助理解特定的技術細節,例如更新規則或其他可能描述不當的模塊化數據,但是在代碼中的單個函數中實現。我自己經歷過很多次,但它是一種啟發式的,而不是一種規則。 愛德華建議像k-means和隨機梯度下降這樣的算法作為開始的好例子。 ### 從論文實現算法 Edward建議如果你沒有首先實現眾所周知的算法,那么從紙上實現機器學習算法是一個很大的進步,如上所述。 根據Edwards的評論,您可以從頭開始實施學習機器學習算法的過程。我對該過程的解釋如下所示: 1. 從頭開始實現算法。 2. 將表現與現成的實現進行比較。 3. 努力工作以滿足表現和結果。 4. 查看開源代碼以了解高級技巧和竅門。 他建議創建自己未經優化的實現將向您指出效率低下的地方,激勵您修復它們,激勵您深入了解它們并找出它們如何在其他地方得到解決。 他進一步建議,簡單地應對實現不會教會您需要了解的內容,您將錯過對算法及其未經優化的表現特征的深入理解,以及如何在類似類的算法中推廣優化。 ## 給初學者的建議 在通過電子郵件進行一些討論后,愛德華擴展了他的評論并在一篇題為“[初學者關于學習實施ML算法的建議](http://jsatml.blogspot.com.au/2014/10/beginner-advice-on-learning-to.html)”的博客文章中寫下了他的想法。 這是一篇很棒的文章。在其中,他提出了三個關鍵問題:如何從頭開始實現機器學習算法,為初學者提供常見陷阱以及可能有用的資源。 這篇文章不僅僅是偉大的,因為這些建議來自于辛苦掙來的智慧(愛德華很難做機器學習 [](http://en.wikipedia.org/wiki/Learning_the_hard_way) - 他實踐它,你應該這樣做),但很少有任何帖子那樣喜歡它。沒人在談論如何從頭開始實現機器學習算法。我的目標是解決這個問題。 愛德華的關鍵信息是你需要練習。實現機器學習算法要求您了解每種算法的背景,包括該領域的理論,數學和歷史以及算法。這不會很快或很容易。你必須努力工作,重復你的理解和實踐。 如果你是一名專業的程序員,那么你所知道的,掌握就不會少了。 ### 實現算法的技巧 在他的博客文章中,Edward提供了4個主要技巧,可以幫助您從頭開始實現機器學習算法。總之,它們是: 1. **閱讀全文**。慢慢閱讀全文。然后沉浸在想法中一段時間??,比如說幾天。稍后再讀一遍,但直到你有一個關于算法如何工作的數據流以及它們如何掛在一起的第一個你自己的心理模型。有意讀。隨后的讀取必須糾正并改進您對算法的現有理解。 2. **設計測試問題**。找到,選擇或設計一個足夠簡單的測試問題,以便您理解和可視化算法的結果或行為,但復雜程度足以強制程序展示差異化特征或結果。這個問題將是你的試金石,告訴你什么時候實現是正確的,什么時候優化沒有引入致命的錯誤。愛德華稱之為“_有用的宏功能單元測試_”。 3. **優化最后**。首先通過從頭開始實現整個過程來理解算法的過程和邏輯,利用很少的現有代碼或技巧。只有在您理解并具有可行的實現之后,才應考慮在空間或時間復雜度方面提高表現,或者使用算法擴展來提高表現。 4. **了解基礎**。在生產級實現方面,您可以利用現有庫。 Edward指出了諸如 [LIBSVM](http://www.csie.ntu.edu.tw/~cjlin/libsvm/) 和 [LIBLINEAR](http://www.csie.ntu.edu.tw/~cjlin/liblinear/) 之類的例子。這些功能強大的庫包含數十年的錯誤修復和優化功能。在采用它們之前,請確信您確切了解您正在利用的是什么,它是如何工作的以及它所提供的好處的特征。有目的地優化您的實現,使用最好的并理解它的作用。 同樣,這些提示中有很多智慧。我自己也不能把它變得更好。特別是。我非常同意從頭開始無效地實現算法以最大化學習的需要。算法優化是一種進口但完全不同的技能,用于完全不同的目的。 記住這一點。 ### 避免初學者陷阱 愛德華繼續強調初學者陷入的常見陷阱。總之,它們是: * 不要認為研究論文是正確的,同行評審并不完美,錯誤(有時是大錯誤)會成為出版物。 * 不要嘗試對算法進行無數學理解,數學可以有效且明確地描述算法過程的顯著部分,這非常重要。 * 如上所述,不要從其他人的源代碼開始。 * 您無法知道如何有效地將算法應用于問題,從類似的論文中尋找可轉移的應用程序想法。 * 生成的默認隨機數通常不會削減它,使用更好的東西,但不能使用加密強度。 * 腳本語言在優化時不會削減芥末(他的個人觀點,并且表明可能存在爭議的觀點。我個人認為靜態類型在大型生產系統中省去了很多頭痛)。 ## 摘要 實現機器學習算法是學習機器學習的一種很好的(如果不是最好的)方法。知識是內心的,因為你必須為細節而汗流,背,他們變得親密。當您嘗試從算法中獲得最大收益時,這會有所幫助。 在這篇文章中,您發現經常建議的“_閱讀開源實現_”并沒有錯,但需要在您的學習策略中仔細考慮。 愛德華建議你學習機器學習算法的難點,自己弄清楚,以便你成長,然后轉向開源實現,學習有效的數學和程序技巧來優化實現,如果你當需要那些效率。 這是一個細微而有價值的建議。
                  <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>

                              哎呀哎呀视频在线观看