只需十四步:從零開始掌握 Python 機器學習(附資源)

分享一篇來自機器之心的文章。關於機器學習的起步,講的仍是很清楚的。原文連接在:只需十四步:從零開始掌握Python機器學習(附資源)html

Python 能夠說是如今最流行的機器學習語言,並且你也能在網上找到大量的資源。你如今也在考慮從 Python 入門機器學習嗎?本教程或許能幫你成功上手,從 0 到 1 掌握 Python 機器學習,至於後面再從 1 到 100 變成機器學習專家,就要看你本身的努力了。本教程原文分爲兩個部分,機器之心在本文中將其進行了整合,原文可參閱:suo.im/KUWgl suo.im/96wD3。本教程的做者爲 KDnuggets 副主編兼數據科學家 Matthew Mayo。

「開始」每每是最難的,尤爲是當選擇太多的時候,一我的每每很難下定決定作出選擇。本教程的目的是幫助幾乎沒有 Python 機器學習背景的新手成長爲知識淵博的實踐者,並且這個過程當中僅須要使用免費的材料和資源便可。這個大綱的主要目標是帶你瞭解那些數量繁多的可用資源。毫無疑問,資源確實有不少,但哪些纔是最好的呢?哪些是互補的呢?以怎樣的順序學習這些資源纔是最合適的呢?python

首先,我假設你並非如下方面的專家:git

  • 機器學習
  • Python
  • 任何 Python 的機器學習、科學計算或數據分析庫

固然,若是你對前兩個主題有必定程度的基本瞭解就更好了,但那並非必要的,在早期階段多花一點點時間瞭解一下就好了。程序員

 

基礎篇

 

第一步:基本 Python 技能

若是咱們打算利用 Python 來執行機器學習,那麼對 Python 有一些基本的瞭解就是相當重要的。幸運的是,由於 Python 是一種獲得了普遍使用的通用編程語言,加上其在科學計算和機器學習領域的應用,因此找到一個初學者教程並不十分困難。你在 Python 和編程上的經驗水平對於起步而言是相當重要的。github

首先,你須要安裝 Python。由於咱們後面會用到科學計算和機器學習軟件包,因此我建議你安裝 Anaconda。這是一個可用於 Linux、OS X 和 Windows 上的工業級的 Python 實現,完整包含了機器學習所需的軟件包,包括 numpy、scikit-learn 和 matplotlib。其也包含了 iPython Notebook,這是一個用在咱們許多教程中的交互式環境。我推薦安裝 Python 2.7。算法

若是你不懂編程,我建議你從下面的免費在線書籍開始學習,而後再進入後續的材料:數據庫

若是你有編程經驗,但不懂 Python 或還很初級,我建議你學習下面兩個課程:編程

  • 谷歌開發者 Python 課程(強烈推薦視覺學習者學習):
  • Python 科學計算入門(來自 UCSB Engineering 的 M. Scott Shell)(一個不錯的入門,大約有 60 頁):

若是你要 30 分鐘上手 Python 的快速課程,看下面:數組

固然,若是你已是一位經驗豐富的 Python 程序員了,這一步就能夠跳過了。即使如此,我也建議你常使用 Python 文檔:安全

第二步:機器學習基礎技巧

KDnuggets 的 Zachary Lipton 已經指出:如今,人們評價一個「數據科學家」已經有不少不一樣標準了。這其實是機器學習領域領域的一個寫照,由於數據科學家大部分時間乾的事情都牽涉到不一樣程度地使用機器學習算法。爲了有效地創造和得到來自支持向量機的洞見,很是熟悉核方法(kernel methods)是否必要呢?固然不是。就像幾乎生活中的全部事情同樣,掌握理論的深度是與實踐應用相關的。對機器學習算法的深度瞭解超過了本文探討的範圍,它一般須要你將很是大量的時間投入到更加學術的課程中去,或者至少是你本身要進行高強度的自學訓練。

好消息是,對實踐來講,你並不須要得到機器學習博士般的理論理解——就想要成爲一個高效的程序員並沒必要要進行計算機科學理論的學習。

人們對吳恩達在 Coursera 上的機器學習課程內容每每好評如潮;然而,個人建議是瀏覽前一個學生在線記錄的課堂筆記。跳過特定於 Octave(一個相似於 Matlab 的與你 Python 學習無關的語言)的筆記。必定要明白這些都不是官方筆記,可是能夠從它們中把握到吳恩達課程材料中相關的內容。固然若是你有時間和興趣,你如今就能夠去 Coursera 上學習吳恩達的機器學習課程:

除了上面提到的吳恩達課程,若是你還須要須要其它的,網上還有不少各種課程供你選擇。好比我就很喜歡 Tom Mitchell,這裏是他最近演講的視頻(一塊兒的還有 Maria-Florina Balcan),很是平易近人。

目前你不須要全部的筆記和視頻。一個有效地方法是當你以爲合適時,直接去看下面特定的練習題,參考上述備註和視頻恰當的部分,

第三步:科學計算 Python 軟件包概述

好了,咱們已經掌握了 Python 編程並對機器學習有了必定的瞭解。而在 Python 以外,還有一些經常使用於執行實際機器學習的開源軟件庫。廣義上講,有不少所謂的科學 Python 庫(scientific Python libraries)可用於執行基本的機器學習任務(這方面的判斷確定有些主觀性):

學習這些庫的一個好方法是學習下面的材料:

在本教程的後面你還會看到一些其它的軟件包,好比基於 matplotlib 的數據可視化庫 Seaborn。前面提到的軟件包只是 Python 機器學習中經常使用的一些核心庫的一部分,可是理解它們應該能讓你在後面遇到其它軟件包時不至於感到困惑。

下面就開始動手吧!

第四步:使用 Python 學習機器學習

首先檢查一下準備狀況

  • Python:就緒
  • 機器學習基本材料:就緒
  • Numpy:就緒
  • Pandas:就緒
  • Matplotlib:就緒

如今是時候使用 Python 機器學習標準庫 scikit-learn 來實現機器學習算法了。

 

scikit-learn 流程圖

下面許多的教程和訓練都是使用 iPython (Jupyter) Notebook 完成的,iPython Notebook 是執行 Python 語句的交互式環境。iPython Notebook 能夠很方便地在網上找到或下載到你的本地計算機。

一樣也請注意,如下的教程是由一系列在線資源所組成。若是你感受課程有什麼不合適的,能夠和做者交流。咱們第一個教程就是從 scikit-learn 開始的,我建議大家在繼續完成教程前能夠按順序看一看如下的文章。

下面是一篇是對 scikit-learn 簡介的文章,scikit-learn 是 Python 最經常使用的通用機器學習庫,其覆蓋了 K 近鄰算法:

下面的會更加深刻、擴展的一篇簡介,包括了從著名的數據庫開始完成一個項目:

下一篇關注於在 scikit-learn 上評估不一樣模型的策略,包括訓練集/測試集的分割方法:

第五步:Python 上實現機器學習的基本算法

在有了 scikit-learn 的基本知識後,咱們能夠進一步探索那些更加通用和實用的算法。咱們從很是出名的 K 均值聚類(k-means clustering)算法開始,它是一種很是簡單和高效的方法,能很好地解決非監督學習問題:

接下來咱們能夠回到分類問題,並學習曾經最流行的分類算法:

在瞭解分類問題後,咱們能夠繼續看看連續型數值預測:

咱們也能夠利用迴歸的思想應用到分類問題中,即 logistic 迴歸:

第六步:Python 上實現進階機器學習算法

咱們已經熟悉了 scikit-learn,如今咱們能夠了解一下更高級的算法了。首先就是支持向量機,它是一種依賴於將數據轉換映射到高維空間的非線性分類器。

隨後,咱們能夠經過 Kaggle Titanic 競賽檢查學習做爲集成分類器的隨機森林:

降維算法常常用於減小在問題中所使用的變量。主成份分析法就是非監督降維算法的一個特殊形式:

在進入第七步以前,咱們能夠花一點時間考慮在相對較短的時間內取得的一些進展。

首先使用 Python 及其機器學習庫,咱們不只已經瞭解了一些最多見和知名的機器學習算法(k 近鄰、k 均值聚類、支持向量機等),還研究了強大的集成技術(隨機森林)和一些額外的機器學習任務(降維算法和模型驗證技術)。除了一些基本的機器學習技巧,咱們已經開始尋找一些有用的工具包。

咱們會進一步學習新的必要工具。

第七步:Python 深度學習

 

神經網絡包含不少層

深度學習無處不在。深度學習創建在幾十年前的神經網絡的基礎上,可是最近的進步始於幾年前,並極大地提升了深度神經網絡的認知能力,引發了人們的普遍興趣。若是你對神經網絡還不熟悉,KDnuggets 有不少文章詳細介紹了最近深度學習大量的創新、成就和讚許。

最後一步並不打算把全部類型的深度學習評論一遍,而是在 2 個先進的當代 Python 深度學習庫中探究幾個簡單的網絡實現。對於有興趣深挖深度學習的讀者,我建議從下面這些免費的在線書籍開始:

1.Theano

連接:

Theano 是咱們講到的第一個 Python 深度學習庫。看看 Theano 做者怎麼說:

Theano 是一個 Python 庫,它可使你有效地定義、優化和評估包含多維數組的數學表達式。

下面關於運用 Theano 學習深度學習的入門教程有點長,可是足夠好,描述生動,評價很高:

2.Caffe

連接:

另外一個咱們將測試驅動的庫是 Caffe。再一次,讓咱們從做者開始:

Caffe 是一個深度學習框架,由表達、速度和模塊性建構,Bwekeley 視覺與學習中心和社區工做者共同開發了 Caf fe。

這個教程是本篇文章中最好的一個。咱們已經學習了上面幾個有趣的樣例,但沒有一個可與下面這個樣例相競爭,其可經過 Caffe 實現谷歌的 DeepDream。這個至關精彩!掌握教程以後,能夠嘗試使你的處理器自如運行,就看成是娛樂。

我並無保證說這會很快或容易,可是若是你投入了時間並完成了上面的 7 個步驟,你將在理解大量機器學習算法以及經過流行的庫(包括一些在目前深度學習研究領域最前沿的庫)在 Python 中實現算法方面變得很擅長。

進階篇

 

機器學習算法

本篇是使用 Python 掌握機器學習的 7 個步驟系列文章的下篇,若是你已經學習了該系列的上篇,那麼應該達到了使人滿意的學習速度和熟練技能;若是沒有的話,你也許應該回顧一下上篇,具體花費多少時間,取決於你當前的理解水平。我保證這樣作是值得的。快速回顧以後,本篇文章會更明確地集中於幾個機器學習相關的任務集上。因爲安全地跳過了一些基礎模塊——Python 基礎、機器學習基礎等等——咱們能夠直接進入到不一樣的機器學習算法之中。此次咱們能夠根據功能更好地分類教程。

第1步:機器學習基礎回顧&一個新視角

上篇中包括如下幾步:

1. Python 基礎技能

2. 機器學習基礎技能

3. Python 包概述

4. 運用 Python 開始機器學習:介紹&模型評估

5. 關於 Python 的機器學習主題:k-均值聚類、決策樹、線性迴歸&邏輯迴歸

6. 關於 Python 的高階機器學習主題:支持向量機、隨機森林、PCA 降維

7. Python 中的深度學習

如上所述,若是你正準備從頭開始,我建議你按順序讀完上篇。我也會列出全部適合新手的入門材料,安裝說明包含在上篇文章中。

然而,若是你已經讀過,我會從下面最基礎的開始:

若是你正在尋找學習機器學習基礎的替代或補充性方法,剛好我能夠把正在看的 Shai Ben-David 的視頻講座和 Shai Shalev-Shwartz 的教科書推薦給你:

  • Shai Ben-David 的機器學習介紹視頻講座,滑鐵盧大學。地址:
  • 理解機器學習:從理論到算法,做者 Shai Ben-David & Shai Shalev-Shwartz。地址:

記住,這些介紹性資料並不須要所有看完才能開始我寫的系列文章。視頻講座、教科書及其餘資源可在如下狀況查閱:當使用機器學習算法實現模型時或者當合適的概念被實際應用在後續步驟之中時。具體狀況本身判斷。

第2步:更多的分類

咱們重新材料開始,首先鞏固一下咱們的分類技術並引入一些額外的算法。雖然本篇文章的第一部分涵蓋決策樹、支持向量機、邏輯迴歸以及合成分類隨機森林,咱們仍是會添加 k-最近鄰、樸素貝葉斯分類器和多層感知器。

 

Scikit-learn 分類器

k-最近鄰(kNN)是一個簡單分類器和懶惰學習者的示例,其中全部計算都發生在分類時間上(而不是提早在訓練步驟期間發生)。kNN 是非參數的,經過比較數據實例和 k 最近實例來決定如何分類。

樸素貝葉斯是基於貝葉斯定理的分類器。它假定特徵之間存在獨立性,而且一個類中任何特定特徵的存在與任何其它特徵在同一類中的存在無關。

多層感知器(MLP)是一個簡單的前饋神經網絡,由多層節點組成,其中每一個層與隨後的層徹底鏈接。多層感知器在 Scikit-learn 版本 0.18 中做了介紹。

首先從 Scikit-learn 文檔中閱讀 MLP 分類器的概述,而後使用教程練習實現。

  • 神經網絡模型(監督式),Scikit-learn 文檔。地址:
  • Python 和 Scikit-learn 的神經網絡初學者指南 0.18!做者 Jose Portilla。地址:

第3步:更多聚類

咱們如今接着講聚類,一種無監督學習形式。上篇中,咱們討論了 k-means 算法; 咱們在此介紹 DBSCAN 和指望最大化(EM)。

 

Scikit-learn聚類算法

首先,閱讀這些介紹性文章; 第一個是 k 均值和 EM 聚類技術的快速比較,是對新聚類形式的一個很好的繼續,第二個是對 Scikit-learn 中可用的聚類技術的概述:

  • 聚類技術比較:簡明技術概述,做者 Matthew Mayo。地址:
  • 在玩具數據集中比較不一樣的聚類算法,Scikit-learn 文檔。地址:

指望最大化(EM)是機率聚類算法,並所以涉及肯定實例屬於特定聚類的機率。EM 接近統計模型中參數的最大似然性或最大後驗估計(Han、Kamber 和 Pei)。EM 過程從一組參數開始迭代直到相對於 k 聚類的聚類最大化。

首先閱讀關於 EM 算法的教程。接下來,看看相關的 Scikit-learn 文檔。最後,按照教程使用 Python 本身實現 EM 聚類。

若是高斯混合模型初看起來使人困惑,那麼來自 Scikit-learn 文檔的這一相關部分應該能夠減輕任何多餘的擔憂:

高斯混合對象實現指望最大化(EM)算法以擬合高斯模型混合。

基於密度且具備噪聲的空間聚類應用(DBSCAN)經過將密集數據點分組在一塊兒,並將低密度數據點指定爲異常值來進行操做。

首先從 Scikit-learn 的文檔中閱讀並遵循 DBSCAN 的示例實現,而後按照簡明的教程學習:

第4步:更多的集成方法

上篇只涉及一個單一的集成方法:隨機森林(RF)。RF 做爲一個頂級的分類器,在過去幾年中取得了巨大的成功,但它確定不是惟一的集成分類器。咱們將看看包裝、提高和投票。

 

給我一個提高

首先,閱讀這些集成學習器的概述,第一個是通用性的;第二個是它們與 Scikit-learn 有關:

而後,在繼續使用新的集成方法以前,請經過一個新的教程快速學習隨機森林:

包裝、提高和投票都是不一樣形式的集成分類器,所有涉及建構多個模型; 然而,這些模型由什麼算法構建,模型使用的數據,以及結果如何最終組合起來,這些都會隨着方案而變化。

  • 包裝:從同一分類算法構建多個模型,同時使用來自訓練集的不一樣(獨立)數據樣本——Scikit-learn 實現包裝分類器
  • 提高:從同一分類算法構建多個模型,一個接一個地連接模型,以提升每一個後續模型的學習——Scikit-learn 實現 AdaBoost
  • 投票:構建來自不一樣分類算法的多個模型,而且使用標準來肯定模型如何最好地組合——Scikit-learn 實現投票分類器

那麼,爲何要組合模型?爲了從一個特定角度處理這個問題,這裏是誤差-方差權衡的概述,具體涉及到提高,如下是 Scikit-learn 文檔:

  • 單一評估器 vs 包裝:誤差-方差分解,Scikit-learn 文檔。地址:

如今你已經閱讀了關於集成學習器的一些介紹性材料,而且對幾個特定的集成分類器有了基本瞭解,下面介紹如何從 Machine Learning Mastery 中使用 Scikit-learn 在 Python 中實現集成分類器:

  • 使用 Scikit-learn 在 Python 中實現集成機器學習算法,做者 Jason Brownlee。地址:

第5步:梯度提高

下一步咱們繼續學習集成分類器,探討一個當代最流行的機器學習算法。梯度提高最近在機器學習中產生了顯著的影響,成爲了 Kaggle 競賽中最受歡迎和成功的算法之一。

 

給我一個梯度提高

首先,閱讀梯度提高的概述:

接下來,瞭解爲何梯度提高是 Kaggle 競賽中「最制勝」的方法:

雖然 Scikit-learn 有本身的梯度提高實現,咱們將稍做改變,使用 XGBoost 庫,咱們提到過這是一個更快的實現。

如下連接提供了 XGBoost 庫的一些額外信息,以及梯度提高(出於必要):

如今,按照這個教程把全部匯聚起來:

  • Python 中 XGBoost 梯度提高樹的實現指南,做者 Jesse Steinweg-Woods。地址:

你還能夠按照這些更簡潔的示例進行強化:

第6步:更多的降維

降維是經過使用過程來得到一組主變量,將用於模型構建的變量從其初始數減小到一個減小數。

有兩種主要形式的降維:

下面是一對經常使用的特徵提取方法。

 

主成分分析(PCA)是一種統計步驟,它使用正交變換將可能相關變量的一組觀測值轉換爲一組稱爲主成分的線性不相關變量值。主成分的數量小於或等於原始變量的數量。這種變換以這樣的方式定義,即第一主成分具備最大可能的方差(即考慮數據中儘量多的變率)

以上定義來自 PCA 維基百科條目,若是感興趣可進一步閱讀。可是,下面的概述/教程很是完全:

線性判別分析(LDA)是 Fisher 線性判別的泛化,是統計學、模式識別和機器學習中使用的一種方法,用於發現線性組合特徵或分離兩個或多個類別的對象或事件的特徵。所獲得的組合能夠用做線性分類器,或者更常見地,用做後續分類以前的降維。

LDA 與方差分析(ANOVA)和迴歸分析密切相關,它一樣嘗試將一個因變量表示爲其餘特徵或測量的線性組合。然而,ANOVA 使用分類獨立變量和連續因變量,而判別分析具備連續的獨立變量和分類依賴變量(即類標籤)。

上面的定義也來自維基百科。下面是完整的閱讀:

  • 線性判別分析——直至比特,做者 Sebastian Raschka。地址:

你對 PCA 和 LDA 對於降維的實際差別是否感到困惑?Sebastian Raschka 作了以下澄清:

線性判別分析(LDA)和主成分分析(PCA)都是一般用於降維的線性轉換技術。PCA 能夠被描述爲「無監督」算法,由於它「忽略」類標籤,而且其目標是找到使數據集中的方差最大化的方向(所謂的主成分)。與 PCA 相反,LDA 是「監督的」而且計算表示使多個類之間的間隔最大化的軸的方向(「線性判別式」)。

有關這方面的簡要說明,請閱讀如下內容:

  • LDA 和 PCA 之間的降維有什麼區別?做者 Sebastian Raschka。地址:

第 7 步:更多的深度學習

上篇中提供了一個學習神經網絡和深度學習的入口。若是你的學習到目前比較順利並但願鞏固對神經網絡的理解,並練習實現幾個常見的神經網絡模型,那麼請繼續往下看。

 

首先,看一些深度學習基礎材料:

  • 深度學習關鍵術語及解釋,做者 Matthew Mayo
  • 理解深度學習的 7 個步驟,做者 Matthew Mayo。地址:

接下來,在 Google 的機器智能開源軟件庫 TensorFlow(一個有效的深度學習框架和現今幾乎是最好的神經網絡工具)嘗試一些簡明的概述/教程:

最後,直接從 TensorFlow 網站試用這些教程,它實現了一些最流行和常見的神經網絡模型:

此外,目前一篇關於 7 個步驟掌握深度學習的文章正在寫做之中,重點介紹使用位於 TensorFlow 頂部的高級 API,以增模型實現的容易性和靈活性。我也將在完成後在這兒添加一個連接。

相關的:


你想更深刻了解學習Python知識體系,你能夠看一下咱們花費了一個多月整理了上百小時的幾百個知識點體系內容:

【超全整理】《Python自動化全能開發從入門到精通》筆記全放送

相關文章
相關標籤/搜索