對機器學習很感興趣,以後也想努力朝這個方向發展。這學期選修了學校研究生的機器學習課程,瞬間感覺到了自己的渺小。有什麼適合小白入門的好教材好方法。


一定多看,多讀,多寫。學習最好的辦法就是認真,只要用心,一切都是很簡單的

最初出現在Quora上:「獲得和分享知識的地方,使人們能夠向他人學習,更好地了解世界。」

谷歌的Brain研究工程師Eric Jang在Quora上回答:

學習機器學習沒有單一的「最佳途徑」,你應該找到一個適合你的系統。 有些人更喜歡以課程的方式來學習,有些人喜歡按照自己的節奏閱讀書籍,有些人則希望直接參与編碼實操。2012年,我從Andrew Ng的機器學習Coursera課程開始,當時幾乎不知道什麼是線性代數,也不了解統計學和機器學習。請注意,儘管這個課程涵蓋了神經網路,但它並不是一門深入學習的課程。但是我真的很喜歡這門機器學習課程,說白了只不過是數值優化而已。

如果在線課程對你來說太慢,最好的整合資源可能是Goodfellow、Bengio和Courville的深度學習書籍。這裡面有幾章專門介紹基本知識(類似於Ng的課程中包含的內容),然後直接跳轉到實際的DNNs。

統計數學上嚴格的背景並不需要做有用的深度學習工作,但它確實有助於制定關於模型為什麼不起作用的假設。 墨菲的概率機器學習教科書是機器學習的重要基礎(也有很棒的圖表!)

在閱讀完DL book後,就可以通過自己實施一些例子來「專註」進入深度學習的一個子領域或是子子領域。 一些示例如下:

貝葉斯深度學習(將神經網路與圖形模型相結合)深度強化學習(AlphaGo, atariai -playing AI, Robotics)生成模型(GAN,PixelCNN,VAE)深度學習理論計算機視覺NLP/Speech (translation, captioning, seq2seq models)Symbolic reasoning (e.g. proof-solving)重複性神經網路(如LSTMs)

在過去的幾年裡,深度學習領域已經有了顯著的擴展,在短時間內探索深度學習的所有子領域是不現實的。建議深入到一個特定的子領域,一旦你掌握了一個領域,就更容易學習其他的子領域。除了它們都利用深度學習的表現力來學習端到端的任務,而且是一種普遍的實驗風格(而不在是理論計算機科學)。

目前,最有趣的深度學習論文是在TensorFlow, Pytorch, Torch, Keras,或Theano中公開實現的,所以你可以快速建立一種直覺,看看是否可以改進現有的模型(例如,做一個更好的ResNet)。可能現在不應該從頭開始在Python中實現自己的神經網路包,但是從中獲得一些小細節對工作是非常重要的。


隨著人工智慧的火熱,數據科學領域逐漸被人們所熟知,相信你肯定也聽說過諸如一些機器學習,深度學習之類讓人聽不懂的術語,而隨著概念的火熱,想進入人工智慧這個領域的人越來越多,原因無他,隨著這個領域的火爆未來的發展機會,發展潮流乃至薪資都是非常可人的,但是許多人雖然想進入這個領域,卻發現無從下手,或者說已經了解了人工智慧這個概念想開始學習機器學習,卻不知道如何入門的人,今天就講述一下,機器學習應該怎麼樣入門。

數據挖掘要了解機器學習,首先就不得不談到數據挖掘,所謂數據挖掘,是指在數據中挖掘有價值的信息,最早定義的數據挖掘是KDD的一個步驟,後隨著挖掘的應用場景不斷豐富,其技術有了長足的發展,如今的數據挖掘,其概念無論從內涵還是外延角度而言都已獨立成為一門學科。數據挖掘的特徵是對客觀世界的抽象,演算法則是對事物運行規律內嵌邏輯的還原,演算法作用於特徵從而無限逼近客觀事物運行規律的過程則是機器學習或者數據挖掘的過程。數據挖掘演算法分類

但凡從數據中進行有價值信息的挖掘,均可稱為數據挖掘,時至今日,數據挖掘核心演算法主要可分為數理統計分析演算法和機器學習演算法兩大類

  • 數理統計分析演算法核心演算法理論基於統計學相關理論,所有模型均經過嚴格數學理論驗證,建模過程本質上是由現有模型理論出發向外求的過程機器學習演算法和數理統計分析演算法不同,機器學習演算法側重於學習的過程,即利用數據訓練模型,具體問題具體分析

數理統計分析一般流程

基於數理統計原理進行的分析,現在稱作數理統計分析,也是數據挖掘的一個分支,如線性回歸、時間序列等演算法,至今仍然是使用最廣泛的演算法

數理統計分析一般遵循假設檢驗-建模參數選擇-構建模型-建設檢驗評估模型-參數調優這五個步驟。機器學習一般流程機器學習的定義:一個計算機程序可以從經驗E中學習某些類型的任務T和性能度量P,而且它在任務T中的性能(用P度量)可以隨著經驗E的提高而提高

機器學習鼻祖:感知機理論

隨著計算機運算能力不斷提升,數理統計分析大行其道。但人們並不止步於此,50年代就被提出的感知機理論在80年代再次進入公眾視野,人們開始嘗試使用計算機訓練多層感知機,也就是現在所謂的神經網路。

神經網路演算法的計算機實踐是成功的,這即是神經網路演算法本身諸多優秀特性所導致,也是計算機運算讓神經網路迭代運算如虎添翼演算法分類從演算法理論層面來說,數理統計是基於統計學原理設計的一系列演算法,大多是基於少量樣本的統計推斷,其演算法雖然大多誕生實踐較早,但在當今數據環境中仍然能夠發揮巨大價值。機器學習是需要更多的計算資源及數據量支撐,計算前無需預設過多條件,運算過程會不斷迭代,直至收斂。從演算法應用情景來分的話可以分為三個方面:
  • 有監督學習:在有標籤數據上執行的分類、回歸或者預測類演算法。無監督學習:在無標籤的數據上執行聚類、頻繁項挖掘等演算法。半監督學習、強化學習…

數據挖掘常用演算法

數理統計

機器學習有監督學習線性回歸、邏輯回歸、時間序列、嶺回歸、貝葉斯網路KNN、決策樹、神經網路、支持向量機無監督學習假設檢驗、參數估計聚類分析、協同過濾、關聯規則機器學習演算法分類演算法大類

代表演算法

距離類模型KNN、K-Means線性方程模型線性回歸、嶺回歸、Lasso、彈性網、邏輯回歸規則類模型樹模型、Apriori、FP-Growth條件概率模型樸素貝葉斯、貝葉斯網路強學習器

支持向量機、神經網路

集成演算法Bagging、Boosting演算法學習的三重境界學習演算法有三種境界:
  1. 掌握演算法入口出口理解原理,靈活調優融會貫通,設計演算法

第一重境界,將演算法本身當做黑箱,在不知道演算法具體原理的情況下能夠掌握演算法的基本應用情景(有監督、無監督),以及演算法的基本使用情景,能夠調包實現演算法。

第二重境界則是能夠深入了解、掌握演算法原理,並在此基礎上明白演算法實踐過程中的關鍵技術、核心參數,最好能夠利用編程語言手動實現演算法,能夠解讀演算法執行結果,並在理解原理的基礎上對通過調參對演算法進行優化最後一重境界,實際上也是演算法(研發)工程師的主要工作任務,即能夠結合業務場景、自身數學基礎來進行有針對性的演算法研發,此部分工作不僅需要紮實的演算法基本原理知識,也需要紮實的編程能力。機器學習的學習安排理論基礎講完,接下來就是要介紹一下我們應該如何的去安排我們如何去學習機器學習了,當前主流的數據挖掘演算法——機器學習大類演算法並非完全由一個個獨立的演算法所組成,機器學習演算法內部有諸多相通之處,核心思想高度一致,彼此之間處理手段也有相互借鑒的地方,因此教學過程不僅對將各個演算法的核心原理、編程語言實現方法進行講解,還需要對更為一般的機器學習方法論進行系統的講解。我們的學習任務也分為三個階段:

  1. 演算法入門演算法大爆炸高階演算法

第一階段

第一階段主要是進行演算法入門,主要學習的是兩點:核心演算法和機器學習方法論
  • 核心演算法:基於距離的模型:KNN最近鄰分類器、聚類分析(K-Means、DBSCAN和層次聚類)機器學習方法論:基於距離的機器學習模型評估指標、加權距離與優化方法、學習曲線、交叉驗證方法等

第二階段

第二階段是演算法大爆炸,在有了第一階段基本演算法思維培養和基本方法論掌握的基礎上,第二階段將對當前主流機器學習演算法進行講解學習,也是分為核心演算法和機器學習方法論。
  • 核心演算法:樹模型:包括ID3、C4.5、CART等;回歸分析:包括線性回歸、嶺回歸、Lasso、廣義線性回歸(邏輯回歸)等;貝葉斯分類器;關聯規則:包括Apriori、FP-Growth、PrefixSpan等機器學習方法論:機器學習演算法一般流程、常用凸函數優化方法(梯度下降、最小二乘法、坐標軸下降、擬牛頓法等)、概率分類問題模型評估指標(ROC、AUC)、感知機模型基本原理

第三階段

第三階段也就是最後一個階段是學習講解當前機器學習演算法的高階演算法部分,主要包括由感知機模型衍生而來的兩個模型:神經網路和SVM,以及一些常用的集成方法。此部分所謂高級演算法,即指其基本原理要更加艱深,也指其使用過程難度更大。
  • 核心演算法:神經網路,多層感知機模型;SVM,包括線性SVM分類器、高斯核SVM分類器;集成演算法:Bagging和Boosting兩大類演算法,包括AdaBoost、隨機森林等。機器學習方法論:偏倚-方差評估體系、核函數方法、SMO演算法原理等

演算法

以上就是我么學習機器學習的三個階段,接下來我們簡單的討論而言,在各種領域中,演算法是何物。
  • 在計算機領域中,演算法用來調整語法結構、數據結構,從而優化程序執行效率;在數學領域中,演算法指的是在根據一定條件構建的模型是否有解、是否存在最優解,及獲取解的過程而在數據分析、數據挖掘或機器學習領域,演算法用於捕捉數據背後隱藏的客觀規律,去解決和實際業務高度相關的某些問題。某些時候演算法是為了調整數據結構、降低程序的時間複雜度,提高計算機執行效率(如FP-Growth),多數時候演算法是為了解決最優化問題(如最小二乘法、梯度下降等),更多時候演算法就是一個數學模型,作用於特定的數據,產出特定的結論,解決特定的問題。

機器學習的一般流程

機器學習的一般流程是分為六個步驟:

  1. 提出問題:回歸、分類,還是探索數據結構
  2. 底層核心邏輯,如自變數加權求和預測因變數
  3. 構建演算法體系或演算法方程,如

4. 設置模型超參數,然後根據問題構造損失函數,損失函數是一個包含模型參數的方程

5. 利用最優化演算法求解損失函數極值,常用最小二乘法、梯度下降、牛頓法、坐標軸下降演算法等,在求解損失函數極值的過程就是求解方程參數值的過程構建模型評估指標,尋找模型優化途徑,模型調參。

6. 構建模型評估指標,尋找模型優化途徑,模型調參。演算法理論、編程語言與演算法庫接下來我們討論一下演算法理論、編程語言和演算法庫這三者的關係。首先,演算法理論是此三者中最核心的知識內容,掌握演算法基本理論、擁有演算法素養和演算法思維才能根據需求及數據情況合理選擇選法、根據模型結果進行演算法調優,併合理解讀模型結果;其次,演算法需要利用計算機來執行,因此我們需要將演算法中的人類邏輯轉化為計算機邏輯交付計算機執行,此過程需要用到編程語言,但其只是演算法實踐的工具最終,演算法庫將進一步封裝演算法底層執行過程,提供整潔而統一的介面給用戶使用,從而降低演算法使用門檻。學習目標最後我們樹立一下我們有關機器學習的學習目標:
  • 掌握常用演算法的核心原理掌握機器學習一般方法論了解常用演算法的優化方法樹立數據挖掘思想和機器學習思想

以上就是有關機器學習入門的步驟希望大家在看完之後可以明白什麼是機器學習,並且堅定的在這條道路上走下去,緊跟時代的潮流,早日找到自己滿意的一份領域內的工作,謝謝。

最後附上Scikit-learn中文文檔:scikit-learn中文社區

對於剛剛接觸的同學來講,參與Kaggle、阿里雲天池等數據科學競賽平台的項目和比賽是最好的學習方式。希望你能記住,機器學習只看書是永遠也學不會的,必須參與項目、參與比賽,在實踐中學習。搞清楚如何數據分析、 如何做數據清洗?、如何做特徵工程、如何做特徵選擇、如何選擇合適的機器學習模型、如何調參數。

參與比賽有一個重要的好處就是讓你100%地清楚哪些演算法在實際應用中更有效。現在很多人往往是看過了周志華的西瓜書,就覺得自己懂機器學習了,這是很可笑的。最典型的例子就是很多人覺得SVM是最好用的分類器。包括很多發過會議論文的同學,其實也是停留在理論的烏托邦,而且論文的results部分有多real也很難判斷。做比賽你可以拿到工業界的數據,而且這些數據都是頭部互聯網大廠的實際業務數據,所以在實戰的過程中,我們可以逐漸井底之蛙蛻變為翱翔在天空的雄鷹,很清楚地知道哪些演算法好用,哪些方法靠譜,哪些人在吹逼和忽悠。

我曾經在GitHub開源了我的數據科學競賽經驗,裡面也談了很多關於如何學習機器學習知識和學習編程語言的經驗。

yzkang/My-Data-Competition-Experience?

github.com

更詳細的文字版本在這裡:

David K:數據科學競賽:你從未見過的究極進化秘笈?

zhuanlan.zhihu.com圖標

可以先學一些卷積神經網路的基礎知識,然後用Keras、TFLearn編程實現,跑一跑程序。

卷積神經網路

卷積神經網路有非常多的變體,可以繼續深入學習,掌握殘差網路、殘差收縮網路等較新的結構。

殘差網路

殘差收縮網路[1][2]主要適合強雜訊、高冗餘的數據,主要歸功於自適應軟閾值化的部分。

深度殘差收縮網路

參考

  1. ^10分鐘看懂深度殘差收縮網路 https://www.cnblogs.com/uizhi/p/12239690.html
  2. ^M. Zhao, S. Zhong, X. Fu, B. Tang, M. Pecht, Deep residual shrinkage networks for fault diagnosis, IEEE Transactions on Industrial Informatics, vol. 16, no. 7, pp. 4681-4690, 2020. http://ieeexplore.ieee.org/document/8850096/


如果是初學者,建議一邊實踐一邊學理論知識。

  1. 可以先學習 《機器學習實戰》

機器學習實戰 (豆瓣)?

book.douban.com圖標

這本書從小數據集開始, 從零實現一些常用的機器學習演算法,讓讀者了解機器學習的來龍去脈,比較適合入門。

2. 如果看書比較枯燥的話, 也可以通過一些視頻課程進行學習,

Python3入門機器學習_經典演算法與應用-慕課網實戰?

coding.imooc.com圖標

這個視頻課程裡面, 從零實現了sklearn 常用的機器學習演算法, 雖然是簡化版實現, 但是對理解機器學習常用框架演算法很有幫助。

3. 吳恩達的機器學習視頻, 也是入門機器學習的必看視頻。

[中英字幕]吳恩達機器學習系列課程_嗶哩嗶哩 (゜-゜)つロ 乾杯~-bilibili?

www.bilibili.com圖標

4. 有了以上的基礎, 可以繼續學習一些機器學習理論知識。這個時候可以看看西瓜書了。

機器學習 (豆瓣)?

book.douban.com圖標

5. 接下來可以學習一下深度學習的內容 《深度學習入門》 這本書沒有使用任何深度學習框架, 用python 搭建了完整的卷積神經網路, 可以深入了解神經網路的實現原理,以後再學習更複雜的框架時,有一個紮實的基礎。

深度學習入門 (豆瓣)?

book.douban.com圖標

6. 有了一些基礎知識以後, 可以學習一些實戰課程

機器學習實戰:基於Scikit-Learn和TensorFlow (豆瓣)?

book.douban.com圖標Python深度學習 (豆瓣)?

book.douban.com圖標

7. 最後可以在Kaggle 做一些比賽題目,一開始可以先找一些自己感興趣的數據集, 學習一下別人的解決方法,慢慢嘗試自己來實踐。

https://www.kaggle.com?

www.kaggle.com

機器學習需要很多的動手實踐, 實踐過程中慢慢積累理論知識,希望能幫助到你。


推薦閱讀:
相关文章