神經網絡初學者指南:基於Scikit-Learn的Python模塊

2021-01-08 雷鋒網

編者按:這個帖子概述了使用 Scikit-learn 在 Python 中設置神經網絡的方法,其最新版本現在已經內置支持神經網絡模型。作者 Jose Portilla 是一名數據科學顧問和培訓師,目前在 Udemy 上教授在線課程。 他也是Pierian Data Inc.數據科學部門的主管。雷鋒網(公眾號:雷鋒網)編譯,未經許可不得轉載。

對於 Python 來說,最受歡迎的機器學習圖書館是 SciKit Learn。 前幾天最新版本(0.18)剛剛發布,現在已內置支持神經網絡模型。 對 Python 的基本理解對於弄明白這篇文章是必要的,有一些關於Sci-Kit Learn 的使用經驗也是十分有幫助的(但不是必要)。

另外,作為一個快速附註,我寫了一篇詳解版的姐妹文章,不過是以 R 語言編寫的(可點擊此處查看)。

| 神經網絡

神經網絡是一個試圖模仿自然生物神經網絡的學習模式的機器學習框架。 生物神經網絡具有相互連接的神經元,神經元帶有接受輸入信號的樹突,然後基於這些輸入,它們通過軸突向另一個神經元產生輸出信號。 我們將嘗試通過使用人工神經網絡(ANN)來模擬這個過程,我們現在將其稱為神經網絡。 創建神經網絡的過程從最基本的形式單個感知器開始。

| 感知器

讓我們通過探討感知器開始我們的討論吧。 感知器具有一個或多個輸入、偏置、激活函數和單個輸出。 感知器接收輸入,將它們乘以一些權重,然後將它們傳遞到激活函數以產生輸出。 有許多激活函數可供選擇,例如邏輯函數,三角函數,階躍函數等。我們還確保向感知器添加偏差,這避免了所有輸入可能等於零的問題(意味著沒有乘權重會有影響)。 檢查下面的圖表感知器的可視化: 

一旦我們有輸出,我們可以將其與已知標籤進行比較,並相應地調整權重(權重通常以隨機初始化值開始)。 我們繼續重複此過程,直到我們達到允許迭代的最大數量或可接受的錯誤率。

為了創建神經網絡,從疊加感知器層開始即可創建神經網絡的多層感知器模型。 將產生直接接收要素輸入的一個輸入層,一個將創建結果輸出的輸出層。 之間的任何圖層都稱為隱藏圖層,因為它們不直接「查看」要素輸入或輸出。 對於可視化可查看下面的圖表(來源:維基百科)。 


下面,讓我們開始實操,用 python 創建神經網絡吧!

| SciKit-Learn

為了跟得上這個教程的節奏,您需要安裝最新版本的 SciKit Learn。雖然通過 pip 或 conda 很容易安裝,但你可以參考官方的安裝文檔來了解完整的細節。 

| 數據

我們將使用 SciKit Learn 內置的乳腺癌數據集,如果具有腫瘤特徵的樣本均會被標記,並顯示腫瘤為惡性還是良性。 我們將嘗試創建一個神經網絡模型,它可以理解腫瘤的特點,並嘗試預測。讓我們繼續進行,從獲取數據開始吧!

這個對象就像字典一樣,包含著數據的描述信息,特點及目標:  

| 訓練測試分裂

讓我們把數據分成訓練和測試集,通過來自模式選擇中的  SciKit Learn's 的訓練測試分裂函數,這點便可以輕鬆做到。 

| 數據預處理

如果數據未被歸一化,則在最大迭代次數被準許之前,神經網絡可能難以聚集。 多層感知器對特徵縮放非常敏感,因此強烈建議您縮放數據。 請注意,必須對測試集應用相同的縮放以獲得有意義的結果。 目前有很多不同的數據標準化方法,我們將使用內置的 StandardScaler 進行標準化。 

| 訓練模型

現在該訓練我們的模型了。 通過估計對象, SciKit Learn 使這一切變得極其容易。 在這種情況下,我們將從 SciKit-Learn 的 neural_network 庫導入我們的估計器(多層感知器分類器模型)。

我們接下來將創建一個模型的實例,你可以定義很多參數和自定義,我們將只定義 hidden_layer_sizes。 對於此參數,您傳遞一個元組,其中在每一層包含你想要的神經元數量,其中元組中的第 n 個條目表示 MLP 模型的第 n 層中的神經元的數量。 有很多方法來選擇這些數字,但為了簡單起見,我們將選擇與我們的數據集中的特徵相同數量的神經元的三層:

現在已經建立了模型,我們可以將訓練數據放入其中,記住這個數據已經被處理和縮放: 

MLPClassifier(activation='relu', alpha=0.0001, batch_size='auto', beta_1=0.9,
      beta_2=0.999, early_stopping=False, epsilon=1e-08,
      hidden_layer_sizes=(30, 30, 30), learning_rate='constant',
      learning_rate_init=0.001, max_iter=200, momentum=0.9,
      nesterovs_momentum=True, power_t=0.5, random_state=None,
      shuffle=True, solver='adam', tol=0.0001, validation_fraction=0.1,
      verbose=False, warm_start=False)

我們可以在其中看到顯示模型中其他參數的默認值輸出。 嘗試用不同的數值多次操作,就能看到數據對模型的影響。

| 預測與評估

現在我們有一個模型,是時候使用它來獲得預測! 我們可以簡單地使用我們的擬合模型中的 predict()方法:

現在我們可以使用 SciKit-Learn 內置的指標,如分類報告和混淆矩陣來評估我們的模型執行得如何:


看上去只有三個案例被錯誤分類了,準確率達到 98 %(以及 98% 的精度和召回)。考慮到我們才寫了這麼少的代碼,效果還是相當不錯的。 然而,使用多層感知器模型的缺點在於,解釋模型本身存在著很多困難,而特徵的權重和偏差很難輕易解釋。

然而,如果希望在訓練模型後提取MLP權重和偏差,則需要使用其公共屬性 coefs_ 和 intercepts_。

coefs_ 是權重矩陣的列表,其中索引i 處的權重矩陣表示層 i 和層 i + 1 之間的權重。

intercepts_ 是偏差向量的列表,其中索引i 處的向量表示添加到層 i + 1 的偏差值。 

| 結論

希望你喜歡這個關於神經網絡的簡短討論,我們可以在學習中嘗試玩轉隱藏層和神經元的數量,看看它們如何影響結果。

想了解更多? 你可以在 Udemy 上查看我的 Python 數據科學和機器學習欄目。

via python

推薦閱讀:

大牛講堂 | 山世光博士:自動駕駛系統中的目標檢測技術

中國工程院院士李德毅:智能車產業化實踐與展望

雷鋒網原創文章,未經授權禁止轉載。詳情見轉載須知。

相關焦點

  • Python粉都應該知道的開源機器學習框架:Scikit-learn入門指南
    對Python語言有所了解的科研人員可能都知道SciPy——一個開源的基於Python的科學計算工具包。目前Scikit-learn已經實現的算法包括:支持向量機(SVM),最近鄰,邏輯回歸,隨機森林,決策樹以及多層感知器(MLP)神經網絡等等。需要指出的是,由於Scikit-learn本身不支持深度學習,也不支持GPU加速,因此這裡對於MLP的實現並不適合於處理大規模問題。有相關需求的讀者可以查看同樣對Python有良好支持的Keras和Theano等框架。
  • CDA承接的全球頂級機器學習Scikit-learn 中文社區上線啦!
    Scikit-learn作為機器學習的入門工具庫,深受初學者的喜愛。但是由於官方文檔是英文撰寫,限制了很多機器學習愛好者的學習過程。因此,專業、規範、實時的Scikit-learn中文學習社區,一直以來都是國內學習者所急需。
  • Scikit-learn玩得很熟了?這些功能你都知道嗎?
    Scikit-learn是Python所有的機器學習程序包中,你必須掌握的最重要的一個包,它包含各種分類算法,回歸算法和聚類算法,其中包括支持向量機、隨機森林、梯度提升、k均值和基於密度的聚類算法(DBSCAN),且旨在與Python數值庫NumPy和科學庫SciPy進行相互配合。它通過一個接口,提供了一系列的有監督和無監督算法。
  • 開源機器學習框架:Scikit-learn API簡介
    目前Scikit-learn已經實現的算法包括:支持向量機(SVM),最近鄰,邏輯回歸,隨機森林,決策樹以及多層感知器(MLP)神經網絡等等。需要指出的是,由於Scikit-learn本身不支持深度學習,也不支持GPU加速,因此這裡對於MLP的實現並不適合於處理大規模問題。有相關需求的讀者可以查看同樣對Python有良好支持的Keras和Theano等框架。
  • WePay機器學習反欺詐實踐:Python+scikit-learn+隨機森林
    構建機器學習算法注意事項在WePay,我們採用Python建立整個機器學習的流程,採用流行的scikit-learn開源學習機器學習工具包。如果你還沒有使用過scikit-learn,我強烈建議你嘗試。
  • 如何在Apache Pyspark中運行Scikit-learn模型
    在本文中,我們將了解如何在Apache Pyspark中運行Scikit-learn模型,並討論有關每個步驟的細節。如果您已經準備好了機器學習模型,則可以直接跳到「 pyspark wrapper」部分,也可以通過以下步驟創建一個簡單的scikit learn機器學習模型。
  • 令人讚嘆的8個Python新手工具!
    2、 Scikit-learnscikit-learn是一個建立在Scipy基礎上的用於機器學習的Python模塊。其中scikit-learn是最有名的,是開源的,任何人都可以免費地使用這個庫或者進行二次開發。它是一個非常強大的工具,能為庫的開發提供高水平的支持和嚴格的管理。它也得到了很多第三方工具的支持,有豐富的功能適用於各種用例。
  • 利用Spark 和 scikit-learn 將你的模型訓練加快 100 倍
    當我們使用 Spark 進行數據處理時,我們首選的機器學習框架是 scikit-learn。隨著計算機變得越來越便宜,機器學習解決方案的上市時間變得越來越關鍵,我們探索了加快模型訓練的各種方法。其中一個解決方案是將 Spark 和 scikit-learn 中的元素組合到我們自己的混合解決方案中。
  • 乾貨| 請收下這份2018學習清單:150個最好的機器學習,NLP和Python...
    multi-task/index.htmlNLP1、NLP《基於神經網絡模型的自然語言處理》(小學一年級~上冊)(Yoav Goldberg)http://u.cs.biu.ac.il/~yogo/nnlp.pdf自然語言處理權威指南(monkeylearn.com)https
  • ...請收下這份2018學習清單:150個最好的機器學習,NLP和Python教程
    實現感知器算法(machinelearningmastery.com)http://machinelearningmastery.com/implement-perceptron-algorithm-scratch-python/小學生用python實現一個神經網絡(wildml.com
  • 乾貨 | 請收下這份2018學習清單:150個最好的機器學習,NLP和Python教程
    實現感知器算法(machinelearningmastery.com)http://machinelearningmastery.com/implement-perceptron-algorithm-scratch-python/ 小學生用python實現一個神經網絡(wildml.com)http://www.wildml.com/2015/
  • 數據工程師需要掌握的 18 個 Python 庫
    它有一套完全仿照MATLAB的函數形式的繪圖接口,在matplotlib.pyplot模塊中。這套函數接口方便MATLAB用戶過度到matplotlib。數據建模Scikit-learnscikit-learn包含眾多頂級機器學習算法,主要有六大基本功能,分別是分類、回歸、聚類、數據降維、模型選擇和數據預處理。scikit-learn擁有非常活躍的用戶社區,基本上其所有的功能都有非常詳盡的文檔供用戶查閱。可以研讀scikit-learn的用戶指南及文檔,對其算法的使用有更充分的了解。
  • Python模塊NumPy,Pandas,matplotlib的中文文檔
    今天比較忙所以不能寫長文了作為一名數據工程師需要熟練掌握python中的這些numpy,matplotlib,pandas,sklearn,seaborn,statsmodel.模塊但是由於這些模塊的文檔都是英文的可能一些英文不好的同學學起來會比較的困難,所以我從網上給大家找到一些中文的文檔
  • 一文概述用 python 的 scikit-image 模塊進行圖像分割
    近日,工程師 Parul Pandey 發表了一篇博文,在博文中,她介紹了用 python 的 scikit-image 庫進行圖像分割的方法。具體涉及 scikit-image 的安裝,圖像導入以及用監督算法和無監督算法進行圖像分割的方法。雷鋒網 AI 科技評論編譯整理如下。
  • Python機器學習5:使用scikit-learn實現三種集成學習Bagging算法
    在這篇文章中,將主要講解Bagging算法的常見三種模型,並介紹如何使用scikit-learn實現這三種模型。後面幾篇文章將講解Boosting和Majority Voting算法。Bagging算法Bagging算法指的是利用數據集訓練多個子模型,然後對多個子模型進行綜合,最終對所有子模型預測結果取平均值,作為最終的模型預測結果。
  • 使用scikit-learn進行特徵選擇
    scikit-learn中提供了用於特徵選擇的模塊feature_selection,主要方法包括方差移除法,卡方檢驗法,基於L1的特徵選擇和基於樹的特徵選擇
  • 學會用Python結合人工智慧嘗試預測股票,下一個股神就是你!
    預備條件:假設您熟悉python,並且已經在系統中安裝了python 3。本教程中使用了jupyter筆記本。您可以使用自己喜歡的IDE。使用的數據集:本教程中使用的數據集是基於Tushare獲取的股票信息。更多股票代碼可以用下面的搜索工具獲取。
  • 2019年必知的10大頂級Python庫
    Keras 被認為是 python 中最酷的機器學習庫之一。它提供了一種更容易表達神經網絡的機制。Keras 還為編譯模型、處理數據集、圖形可視化等提供了一些最佳實用程序。在後端,Keras 在內部使用 Theano 或 TensorFlow。也可以使用一些最流行的神經網絡,如 CNTK。
  • 最好的Python機器學習庫
    我只花了幾分鐘了解了一下它的核心功能,就已經知道Tensorflow值得我花更多的時間讓我來實現我的網絡設計,而不僅僅是通過API來使用。scikit-learnscikit-learn絕對是其中一個,如果不是最流行的,那麼也算得上是所有語言中流行的機器學習庫之一。它擁有大量的數據挖掘和數據分析功能,使其成為研究人員和開發者的首選庫。
  • 高清圖解:神經網絡、機器學習、數據科學一網打盡|附PDF
    今天,新智元要為大家推薦一個超實用、顏值超高的神經網絡+機器學習+數據科學和Python的完全圖解,文末附有高清PDF版連結,支持下載、列印,推薦大家可以做成滑鼠墊、桌布,或者印成手冊等隨手攜帶,隨時翻看。