1. 程式人生 > >周志華《機器學習》課後習題解答系列(六):Ch5.5

周志華《機器學習》課後習題解答系列(六):Ch5.5

這裡的程式設計基於Python-PyBrain。Pybrain是一個以神經網路為核心的機器學習包,相關內容可參考神經網路基礎 - PyBrain機器學習包的使用

5.5 BP演算法實現

這裡寫圖片描述
這裡寫圖片描述

實驗過程:基於PyBrain分別實現標準BP和累積BP兩種演算法下的BP網路訓練,並進行比較;

1.演算法分析

參考書上推導及演算法圖5.8,首先給出BP演算法的兩種版本示意如下:

Algorithms 1. 標準BP演算法
----
    輸入: 訓練集 D,學習率 η.
    過程: 
        1. 隨即初始化連線權與閾值 (ω,θ).
        2. Repeat:
        3.   for x_k,y_k in D:
        4.     根據當前引數計算出樣本誤差 E_k.
        5.     根據公式計算出隨機梯度項 g_k.
        6.     根據公式更新 (ω,θ).
        7.   end for
        8. until 達到停止條件
    輸出:(ω,θ) - 即相應的多層前饋神經網路.
----

Algorithms 2. 累積BP演算法
----
    輸入: 訓練集 D,學習率 η,迭代次數 n.
    過程: 
        1. 隨即初始化連線權與閾值 (ω,θ).
        2. Repeat:
        3.     根據當前引數計算出累積誤差 E.
        4.     根據公式計算出標準梯度項 g.
        5.     根據公式更新 (ω,θ).
        6.     n = n-1
        7. until n=0 or 達到停止條件
    輸出:(ω,θ) - 即相應的多層前饋神經網路.
----

可以看出,兩種演算法的本質區別類似於隨機梯度下降法標準梯度下降法的區別。pybrain包為我們實現這兩種不同的演算法提供了方便。我們只需要修改 pybrain.supervised.trainers 的初始化引數(如learningrate、batchlearning)並設定資料集遍歷次數 trainEpochs() 即可。

2.資料預處理

從表4.3的西瓜資料集3.0可以看到,樣本共有8個屬性變數和一個輸出變數。其中既有標稱變數(色澤~觸感、好瓜),也有連續變數(密度、含糖率)。

為了方便進行神經網路模型的搭建(主要是為對離散值進行數值計算),首先考慮對標稱變數進行數值編碼,這裡我們採用pandas.get_dummies()函式進行輸入的獨熱編碼

(轉化為啞變數的形式),採用pybrain.datasets.ClassificationDataSet的_convertToOneOfMany()進行輸出的獨熱編碼。關於獨熱編碼原理可參考One-hot_Wikipedia資料預處理之獨熱編碼(One-Hot Encoding)

對“西瓜資料集3.0”進行獨熱編碼:

編碼前:

編號  色澤  根蒂  敲聲  紋理  臍部  觸感     密度    含糖率 好瓜
0    1  青綠  蜷縮  濁響  清晰  凹陷  硬滑  0.697  0.460  是
1    2  烏黑  蜷縮  沉悶  清晰  凹陷  硬滑  0.774  0.376  是
2    3  烏黑  蜷縮  濁響  清晰  凹陷  硬滑  0.634  0.264  是
...

此時資料集大小[17,10],8輸入,1輸出。

編碼後:

編號     密度    含糖率  色澤_烏黑  色澤_淺白  色澤_青綠  根蒂_硬挺  根蒂_稍蜷  根蒂_蜷縮  敲聲_沉悶  ...   \
0    1  0.697  0.460      0      0      1      0      0      1      0  ...    
1    2  0.774  0.376      1      0      0      0      0      1      1  ...    
2    3  0.634  0.264      1      0      0      0      0      1      0  ...   
... 

紋理_模糊  紋理_清晰  紋理_稍糊  臍部_凹陷  臍部_平坦  臍部_稍凹  觸感_硬滑  觸感_軟粘  好瓜_否  好瓜_是  
0       0      1      0      1      0      0      1      0     0     1  
1       0      1      0      1      0      0      1      0     0     1  
2       0      1      0      1      0      0      1      0     0     1  
...

此時資料集大小[17,22],19輸入,2輸出。

3.模型訓練與測試

根據上面的資料,搭建一個19輸入,2輸出的前向反饋神經網路(BP network)。然後劃分訓練集與測試集,進行建模與驗證實驗。

實現說明,在pybrain中:splitWithProportion函式可直接劃分資料;buildNetwork函式可用於搭建BP神經網路;BackpropTrainer用於生成訓練模版並可基於此進行訓練,改變相關引數可分別實現標準BP演算法和累積BP演算法;

  1. 生成模型,pybrain預設的是Sigmoid啟用函式,其非常適用於二分類,另外還有一種啟用函式十分適用於多分類(包括二分類),即Softmax function。這裡我們將輸出進行了獨熱編碼, 因此考慮採用Softmax作為輸出層的啟用函式,然後採用勝者通吃(winner-takes-all)法則確定分類結果。

    模型生成樣例程式碼:

    n_h = 5 # hidden layer nodes number
    net = buildNetwork(19, n_h, 2, outclass = SoftmaxLayer)
  2. 標準BP演算法學習神經網路:

    樣例程式碼:

    trainer = BackpropTrainer(net, trndata)
    trainer.trainEpochs(1)
  3. 累積BP演算法學習神經網路樣例程式碼(50次迭代):

    樣例程式碼:

    trainer = BackpropTrainer(net, trndata, batchlearning=True)
    trainer.trainEpochs(50) 

    此外還可以繪製出累積BP演算法引數學習過程的收斂曲線,檢視詳細程式碼

  4. 兩種演算法比較:

    進行一次訓練,然後基於測試集預測,得出兩種方法的預測精度如下:

    標準BP演算法: epoch:    1  test error: 50.00%
    累積BP演算法: epoch:   50  test error: 25.00%
    

    可以看出,本次實驗累積BP演算法優於前者,但一次實驗說服力不夠,於是我們進行多次實驗得出預測結果平均精度比較如下:

    標準BP演算法:
    25.00%  75.00%  75.00%  75.00%  50.00%  50.00% ... 
    average error rate: 47.50%
    
    累積BP演算法:
    25.00%  75.00%  50.00%  50.00%  25.00%  50.00% ...
    average error rate: 38.75%
    

    從結果可以看出,累積BP演算法精度總體還是優於標準BP演算法。但在實驗過程中我們注意到,累積BP演算法的執行時間遠大於標準BP演算法。

    進一步地,我們注意到,由於資料集限制(樣本量太少),模型精度很差。

4.參考

本文涉及到的一些重要參考如下:

相關推薦

機器學習課後習題解答系列Ch5.5

這裡的程式設計基於Python-PyBrain。Pybrain是一個以神經網路為核心的機器學習包,相關內容可參考神經網路基礎 - PyBrain機器學習包的使用 5.5 BP演算法實現 實驗過程:基於PyBrain分別實現標準

機器學習課後習題解答系列Ch5.8

SOM神經網路實驗 注:本題程式分別基於Python和Matlab實現(這裡檢視完整程式碼和資料集)。 1 基礎概述 1.1 SOM網路概念 SOM(Self-Organizing Map,自組織對映)網路是一種無監督的競爭型神經

機器學習課後習題解答系列Ch5.10

卷積神經網路實驗 - 手寫字元識別 注:本題程實現基於python-theano(這裡檢視完整程式碼和資料集)。 1. 基礎知識回顧 1.1. 核心思想 卷積神經網路(Convolutional Neural Network, C

機器學習課後習題解答系列Ch5.7

5.7. RBF神經網路實驗 注:本題程式基於Python實現(這裡檢視完整程式碼和資料集)。 1. RBF網路基礎 RBF網路採用RBF(Radial Basis Function函式)作為隱層神經元啟用函式,是一種區域性逼近神經

機器學習課後習題解答系列Ch2

本章概要 本章講述了模型評估與選擇(model evaluation and selection)的相關知識: 2.1 經驗誤差與過擬合(empirical error & overfitting) 精度accuracy、訓練誤差(經驗誤差)

機器學習課後習題解答系列目錄

對機器學習一直很感興趣,也曾閱讀過李航老師的《統計學習導論》和Springer的《統計學習導論-基於R應用》等相關書籍,但總感覺自己缺乏深入的理解和系統的實踐。最近從實驗室角落覓得南京大學周志華老師《機器學習》一書,隨意翻看之間便被本書內容文筆深深吸引,如獲至寶

機器學習課後習題解答系列Ch4

本章概要 本章講述決策樹(decision tree),相關內容包括: 決策樹生成(construction) 子決策(sub-decision)、遞迴生成演算法(basic algorithm)、最優劃分屬性、純度(purity)、

機器學習課後習題解答系列Ch3.3

思路概要 程式設計實現對率迴歸: * 採用sklearn邏輯斯蒂迴歸庫函式實現,通過檢視混淆矩陣,繪製決策區域來檢視模型分類效果; * 自己程式設計實現,從極大化似然函數出發,採用梯度下降法得到最優引數,然後嘗試了隨機梯度下降法來優化過程。

機器學習課後習題解答系列Ch6

本章概要 本章講述支援向量機(Support Vector Machine,SVM),相關內容包括: 支援向量分類器(SVM classifier) 支援向量(support vector)、間隔(margin)、最大間隔(maximum

Hulu機器學習問題與解答系列 | 第PCA算法

iad 效果 其中 struct 並不是 系統資源 gic 文章 協方差 好久不見,Hulu機器學習問題與解答系列又又又更新啦! 你可以點擊菜單欄的“機器學習”,回顧本系列前幾期的全部內容,並留言發表你的感悟與想法,說不定會在接下來的文章中看到你的感言噢~ 今天

機器學習總結

Lecture3 線性模型 基本形式 一般向量形式: 優點: 線性迴歸 廣義線性模型 對數機率迴歸 由對數機率函式確定 $\boldsymbol{\omega}$ 和 $b$

機器學習 筆記

第1章 1.4歸納偏好 學習演算法自身的歸納偏好與問題是否相配,往往會起到決定作用。 對於上面這句話:你的輸入資料被怎麼處理,最終得到什麼結果,我認為偏好指的就是這個處理的過程。線性非線性?那些feature忽略掉?怎麼利用這些資料?更具體一些,你用網路處理,還是傳統方法,資料的分佈和你

機器學習 效能度量

2.5 效能度量 效能度量(performance measure)是衡量模型泛化能力的評價標準,在對比不同模型的能力時,使用不同的效能度量往往會導致不同的評判結果。本節除2.5.1外,其它主要介紹分類模型的效能度量。 2.5.1 最常見的效能度量 在迴歸任務中,即預測連續值的問題,最常

機器學習

盜用weka 緒論 1.2基本術語 學習任務大致分為兩類: 監督學習:分類、迴歸 無監督學習:聚類 泛化:訓練得到的模型適用於新樣本的能力 機器學習領域最重要的國際學術會議是國際機器學習會議 (ICML)、國

機器學習筆記

http://blog.sina.cn/dpool/blog/s/blog_cfa68e330102ycy9.html?md=gd https://www.cnblogs.com/shiwanghualuo/p/7192678.html 首先的階段由卷積層和池化層組成,卷積的節點組織在特徵對映塊

[機器學習]ID3決策樹 詳細計算流程 機器學習 筆記 原創Excel手算方法

1.用到的主要三條熵公式: 1.1 資訊熵 詳情見夏農資訊理論 概率越平衡 事件所含有的資訊量越大 1.2 條件熵 代表某一屬性下不同分類的資訊熵之和 1.3 資訊增益 等於資訊熵減去條件熵,從數值上,越大的資訊增益在資訊熵一定的情況下,代表條件熵越小,條件熵越

-機器學習-筆記- 強化學習

#### 任務與獎賞 ####   “強化學習”(reinforcement learning)可以講述為在任務過程中不斷摸索,然後總結出較好的完成任務策略。   強化學習任務通常用馬爾可夫決策過程(Markov Decision Process,簡稱M

機器學習筆記

新人一枚,既是機器學習的初學者,也是首次發部落格。謹以此記錄我的學習體會,做一些總結。望與大家共同學習、共同進步。文中若有內容錯誤或有措詞不嚴謹之處,望大家不吝指出。謝謝! 機器學習中的基本概念 基本術語 根據上圖我們可以用一個三維空間來了解以

機器學習讀後總結 第10、11章

降維與度量學習 什麼是降維學習 降維是一種分類演算法,它是一種解決維數災難的重要途徑。例如二維資料經過投影變為一維資料從而更好的表徵資料的特徵,然後再進行識別;這就利用了降維的方法。 K鄰近學習 k近鄰學習是一種監督學習演算法,它給定測試樣本,基於某種距離度量找出與訓練集

機器學習讀後總結 第三章

線性模型 基本形式 線性模型試圖學得一個通過屬性的線性組合來進行預測的函式,即f(x)=w1x1+w2x2+…+wdxd+b,w和b學得之後,模型就得以確定,而w直觀表達了各屬性在預測中的重要性。線性迴歸 線性迴歸試圖學得一個線性模型以儘可能準確的預測實值輸出標記。線性迴歸