教你學Python40-機器學習的兩大方向

程序員架構師13 發佈 2020-01-16T19:36:51+00:00

也許是一位雄辯的溝通者,寫下了很長而令人信服的答覆,您真的應該購買並閱讀Knuth的《計算機編程藝術》,第一卷。


在這篇文章中,我想向您展示程式設計師可以進行機器學習。

我將向您展示,學習機器學習就像學習其他高科技一樣。

首先,我們將學習機器學習與編程學習進行比較,這可能是一個更大的挑戰。

設計師想編碼

一位年輕的網頁設計師說,您假裝您是一名設計師。您可以使用Photoshop或其他工具製作網頁設計,然後可以剪裁設計並將其轉換為CSS。您在程式設計師周圍閒逛,也許您對編碼有些羨慕。您認為您可能想學習如何編碼。對與錯,您認為CSS和HTML是「實際編碼」,全都是創造性的表達,編程只是創造力的另一種媒介或出路。

您跳到Quora或StackOverflow並提出類似的問題,「 我是設計師,我如何學習編碼?」

您會得到遍及地圖的答案。您看似經驗豐富,並且專家程式設計師會為您提供免費建議,例如「學習ANSI C和指針」,「學習二進位」,「在ASM上買書」,「從LISP開始」。也許是一位雄辯的溝通者,寫下了很長而令人信服的答覆,您真的應該購買並閱讀Knuth的 《計算機編程藝術》,第一卷。1-3(Vol 1-3)(會員連結)。您接受他的建議,在亞馬遜上購買書籍並獲得介紹,然後再後悔購買,討厭自己不夠聰明,放棄了學習編碼的興趣,只想在3個月內重複同樣的過程。

發生了什麼?該建議似乎是個好建議。

問題是建議是追溯性的。這些建議是由程式設計師考慮自己的技巧以及已經成為程式設計師的人如何成為更好的程式設計師的想法。該建議不是絕對的初學者,而是一個有興趣的業餘愛好者,希望將自己的腳趾伸入水中,看看他們是否想游泳。

現在我同意,現在的世界有些不同了。已經確定了這個問題,並且有大量的服務可以確切地解決該問題,即教人們如何編碼。

當然,也許我們學習了指針,二進位,ASM和LISP,甚至閱讀了Knuth的各個部分(沒有人真正讀過它來涵蓋權利嗎?),但是後來出現了。但是,您是如何開始的?我開始一起學習,嘗試,實驗,創建和學習。稍後,我將深入研究技術細節,因為我想創建更大,更好和更強大的程序。我不是從技術細節入手的。我認為對於許多程式設計師來說,這種經歷可能是相似的,對您來說是這樣嗎?發表評論。

程式設計師想做機器學習

現在,如果您正在閱讀本文,則可能是程式設計師,或者是某種類型的開發人員。考慮一下您對機器學習的興趣。您是否看過一些經驗豐富的機器學習專家的反饋,為您免費獲得有關入門的免費建議?

我一直在搜索並閱讀此建議,有些建議很好,很多則不是。我在下面收集了一些樣本:

學習機器學習需要哪些數學技能?

  • 您絕對需要熟悉基本的線性代數(處理向量和矩陣)並使用對數和指數函數。
  • 如果您希望事情變得「簡單」,則需要通過特徵向量來了解線性代數。

紮實的數學知識是掌握ML的必備條件嗎?

  • 您確實希望對機率,線性代數,線性規劃和多變量演算有所了解。

機器學習工作需要哪些技能?

  • 首先,您需要具有良好的CS / Math背景。ML是一個高級主題,因此大多數教科書都假定您具有該背景知識。
  • 統計,機率,分布式計算和統計。

那裡確實有一些很棒的建議,但是這個建議適合絕對的初學者嗎?程式設計師將腳趾浸入水中測試溫度是否合適?

也許人們在問錯問題。另外,我精選了一些答案,這些答案表明人們需要數學才能開始機器學習。我想說的是,初學者將專注於他們沒有和不能做的事情。他們可能甚至在嘗試之前就放棄了。

我完全同意,掌握線性代數和機率將為機器學習打下良好的基礎。我完全同意, 《統計學習的要素》(會員連結)是一本多層次的著作。我只是不認為對機器學習感興趣的程式設計師應該做的第一步是學習數學課程或閱讀該領域的密集理論知識。我實際上強烈建議不要這樣做。

兩個機器學習領域

機器學習有兩個方面:

  • 實用機器學習:這涉及查詢資料庫,清理數據,編寫腳本以轉換數據以及將算法和庫粘合在一起,以及編寫自定義代碼以從數據中獲取可靠的答案,以滿足棘手且不確定的問題。這是現實的混亂。
  • 理論機器學習:這是關於數學和抽象以及理想化的場景,限制和美麗,並告知可能的內容。它整潔,乾淨,擺脫了現實的混亂。

沒有理論方面,實踐方面就不可能有框架和嚴謹性。沒有實踐方面,理論方面就沒有意義或動機。這種二分法是錯誤的,它確實是大量的工具和方程式,但請與我同在。

作為程式設計師,您可能對實用性很感興趣,但是您將以「技術人員」的身分達到極限,並且需要對理論方面的理解才能有效地即興創作。您必須閱讀算法的數學知識,還必須閱讀密集的教科書。那就是在現場要做好的事情。問題是,從業者向初學者免費提供的建議是理想的,適合中級且不適合初學者。

像電動工具這樣的程式設計師

我認為,對於經驗豐富的程式設計師而言,將機器學習視為高級編程主題(例如線程)(現在待在我身邊)是很有用的。

如果您想加入線程,只需編寫一些多線程程序並了解它可以發揮的功能。您會犯各種錯誤,但是您製作原型的某些工作會使您一目了然。如果您認為這很適合您,那麼您可以閱讀書籍並深入了解。

您可以使用現有的多線程結構的庫,可以編寫自己的庫,可以深入學習各種線程結構背後的一些數學主題。您可以用自己的興趣來驅動學習,最終可以可靠地構建和部署生產多線程代碼。這是一個過程,而不是一步一步的改變。

現在顯然,機器學習是一個更大,更多樣化的領域,但是我建議的通用步進策略將在以後的文章中進行闡述。

您不會從初學者到管理團隊並將機器學習系統投入生產。危險區域是真實的。您可以並且將會學到足夠危險的知識。但是,通過將權力運用到編程機器上而獲得的自律性(以及您的代碼審查,對等和指導的過程以及常識)也限制了那些真正的危險。

就像學習編程一樣,學習機器學習是學習不會結束的旅程,精通真的意味著持續的教育。學習閱讀方程式,將它們轉換為代碼,以及編寫自己的方程式以解決問題,如果您感興趣的話,可能會一直停下來。

資源資源

如果您想對此問題進行認真思考,我列出了一些資源。有點深,我相信我們可以引起一些好的討論。

  • 向上滾動並閱讀上面列出的StackOverflow問題的一些答案。那裡的答案會讓程式設計師望而卻步,除非他們不懂數學,但還有其他一些真正令人鼓舞的答案,它們確實可以使您振作起來。
  • 為什麼要成為數據科學家比您想像的要容易呢? Gigaom的一篇文章指出了案例研究,為分析者(像程式設計師)從頭開始從事數據科學並迅速提高國際競爭力提供了一般機會。
  • 編程需要數學嗎?有趣的是,我認為贊成和反對的論點非常相關且有用。

這是一篇收費很高的文章,我對您的想法非常感興趣。與朋友討論此問題時,我確實聽到了很多有關「技術人員」機器學習學徒的危險區域和進展選項的信息。我將在以後的文章中跟進這兩個主題。

你怎麼看?我提議的學習編程與程式設計師學習機器學習之間的相似性是否有實質性意義?

喜歡點下關注,你的關注是我寫作的最大支持


關鍵字: