熱線電話:13121318867

登錄
首頁精彩閱讀R語言與機器學習學習筆記1(分類算法)
R語言與機器學習學習筆記1(分類算法)
2015-12-17
收藏

R語言機器學習學習筆記1(分類算法)

人工神經網絡(ANN),簡稱神經網絡,是一種模仿生物神經網絡的結構和功能的數學模型或計算模型。神經網絡由大量的人工神經元聯結進行計算。大多數情況下人工神經網絡能在外界信息的基礎上改變內部結構,是一種自適應系統?,F代神經網絡是一種非線性統計性數據建模工具,常用來對輸入和輸出間復雜的關系進行建模,或用來探索數據的模式。

     人工神經網絡從以下四個方面去模擬人的智能行為:

  • 物理結構:人工神經元將模擬生物神經元的功能

  • 計算模擬:人腦的神經元有局部計算和存儲的功能,通過連接構成一個系統。人工神經網絡中也有大量有局部處理能力的神經元,也能夠將信息進行大規模并行處理

  • 存儲與操作:人腦和人工神經網絡都是通過神經元的連接強度來實現記憶存儲功能,同時為概括、類比、推廣提供有力的支持

  • 訓練:同人腦一樣,人工神經網絡將根據自己的結構特性,使用不同的訓練、學習過程,自動從實踐中獲得相關知識

       神經網絡是一種運算模型,由大量的節點(或稱“神經元”,或“單元”)和之間相互聯接構成。每個節點代表一種特定的輸出函數,稱為激勵函數。每兩個節點間的連接都代表一個對于通過該連接信號的加權值,稱之為權重,這相當于人工神經網絡的記憶。網絡的輸出則依網絡的連接方式,權重值和激勵函數的不同而不同。而網絡自身通常都是對自然界某種算法或者函數的逼近,也可能是對一種邏輯策略的表達。


一、感知器

        感知器相當于神經網絡的一個單層,由一個線性組合器和一個二值閾值原件構成:


     構成ANN系統的單層感知器:

  • 感知器以一個實數值向量作為輸入,計算這些輸入的線性組合,如果結果大于某個閾值,就輸出1,否則輸出‐1。

  • 感知器函數可寫為:sign(w*x)有時可加入偏置b,寫為sign(w*x b)

  • 學習一個感知器意味著選擇權w0,…,wn的值。所以感知器學習要考慮的候選假設空間H就是所有可能的實數值權向量的集合

     算法訓練步驟:

1、定義變量與參數x(輸入向量),w(權值向量),b(偏置),y(實際輸出),d(期望輸出),a(學習率參數)

2、初始化,n=0,w=0

3、輸入訓練樣本,對每個訓練樣本指定其期望輸出:A類記為1,B類記為-1

4、計算實際輸出y=sign(w*x b)

5、更新權值向量w(n 1)=w(n) a[d-y(n)]*x(n),0<a<1

6、判斷,若滿足收斂條件,算法結束,否則返回3

      注意,其中學習率a為了權值的穩定性不應過大,為了體現誤差對權值的修正不應過小,說到底,這是個經驗問題。

      從前面的敘述來看,感知器對于線性可分的例子是一定收斂的,對于不可分問題,它沒法實現正確分類。這里與我們前面講到的支持向量機的想法十分的相近,只是確定分類直線的辦法有所不同??梢赃@么說,對于線性可分的例子,支持向量機找到了“最優的”那條分類直線,而單層感知器找到了一條可行的直線。

      我們以鳶尾花數據集為例,由于單層感知器是一個二分類器,所以我們將鳶尾花數據也分為兩類,“setosa”與“versicolor”(將后兩類均看做第2類),那么數據按照特征:花瓣長度與寬度做分類。

運行下面的代碼:

[plain] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片
  1. #感知器訓練結果:  

  2. a<-0.2  

  3. w<-rep(0,3)  

  4. iris1<-t(as.matrix(iris[,3:4]))  

  5. d<-c(rep(0,50),rep(1,100))  

  6. e<-rep(0,150)  

  7. p<-rbind(rep(1,150),iris1)  

  8. max<-100000  

  9. eps<-rep(0,100000)  

  10. i<-0  

  11. repeat{  

  12.    v<-w%*%p;  

  13.    y<-ifelse(sign(v)>=0,1,0);  

  14.    e<-d-y;  

  15.    eps[i 1]<-sum(abs(e))/length(e)  

  16.    if(eps[i 1]<0.01){  

  17.        print("finish:");  

  18.        print(w);  

  19.        break;  

  20.    }  

  21.    w<-w a*(d-y)%*%t(p);  

  22.    i<-i 1;  

  23.    if(i>max){  

  24.        print("max time loop");  

  25.        print(eps[i])  

  26.        print(y);  

  27.        break;  

  28.    }  

  29. }  

  30. #繪圖程序  

  31. plot(Petal.Length~Petal.Width,xlim=c(0,3),ylim=c(0,8),  

  32. data=iris[iris$Species=="virginica",])  

  33. data1<-iris[iris$Species=="versicolor",]  

  34. points(data1$Petal.Width,data1$Petal.Length,col=2)  

  35. data2<-iris[iris$Species=="setosa",]  

  36. points(data2$Petal.Width,data2$Petal.Length,col=3)  

  37. x<-seq(0,3,0.01)  

  38. y<-x*(-w[2]/w[3])-w[1]/w[3]  

  39. lines(x,y,col=4)  

  40. #繪制每次迭代的平均絕對誤差  

  41. plot(1:i,eps[1:i],type="o")  

      分類結果如圖:



       這是運行了7次得到的結果。與我們前面的支持向量機相比,顯然神經網絡的單層感知器分類不是那么的可信,有些弱。

      我們可以嘗試來做交叉驗證,可以發現交叉驗證結果并不理想。

二、線性神經網絡

      盡管當訓練樣例線性可分時,感知器法則可以成功地找到一個權向量,但如果樣例不是線性可分時它將不能收斂。因此,人們設計了另一個訓練法則來克服這個不足,稱為delta法則。

     如果訓練樣本不是線性可分的,那么delta法則會收斂到目標概念的最佳近似。

     delta法則的關鍵思想是使用梯度下降來搜索可能權向量的假設空間,以找到最佳擬合訓練樣例的權向量。

     我們將算法描述如下:

1、定義變量與參數。x(輸入向量),w(權值向量),b(偏置),y(實際輸出),d(期望輸出),a(學習率參數)(為敘述簡便,我們可以將偏置并入權值向量中)

2、初始化w=0

3、輸入樣本,計算實際輸出與誤差。e(n)=d-x*w(n)

4、調整權值向量w(n 1)=w(n) a*x*e(n)

5、判斷是否收斂,收斂結束,否則返回3

         Hayjin證明,只要學習率a<2/maxeign, delta法則按方差收斂。其中maxeigen為x’x的最大特征值。故我們這里使用1/maxeign作為a的值。

       我們還是以上面的鳶尾花數據為例來說這個問題。運行代碼:

[plain] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片
  1. p<-rbind(rep(1,150),iris1)  

  2. d<-c(rep(0,50),rep(1,100))  

  3. w<-rep(0,3)  

  4. a<-1/max(eigen(t(p)%*%p)$values)  

  5. max<-1000  

  6. e<-rep(0,150)  

  7. eps<-rep(0,1000)  

  8. i<-0  

  9. for(i in 1:max){  

  10.    v<-w%*%p;  

  11.    y<-v;  

  12.    e<-d-y;  

  13.    eps[i 1]<-sum(e^2)/length(e)  

  14.    w<-w a*(d-y)%*%t(p);  

  15.    if(i==max)  

  16.        print(w)  

  17. }  




       得到分類直線:




      相比感知器分類而言已經好了太多了,究其原因不外乎傳遞函數由二值閾值函數變為了線性函數,這也就是我們前面提到的delta法則會收斂到目標概念的最佳近似。增量法則漸近收斂到最小誤差假設,可能需要無限的時間,但無論訓練樣例是否線性可分都會收斂。

       為了明了這一點我們考慮鳶尾花數據后兩類花的分類(這里我們將前兩類看做一類),使用感知器:

使用線性分類器:


       但是要解釋的一點是,收斂并不意味著分類效果更好,要解決線性不可分問題需要的是添加非線性輸入或者增加神經元。我們以Minsky & Papert (1969)提出的異或例子為例說明這一點。



使用線性神經網絡,代碼與上面完全相同,略。

第一個神經元輸出:

權值: [,1]     [,2]    [,3]

[1,]    0.75   0.5    -0.5

測試: [,1]   [,2]   [,3]   [,4]

[1,]       1      0       1      1

第二個神經元輸出:

權值: [,1]     [,2]     [,3]

[1,]    0.75    -0.5    0.5

測試: [,1]   [,2]   [,3]  [,4]

[1,]        1      1       0    1

求解異或邏輯(相同取0,不同取1)有結果:(代碼xor(c(1,0,1,1),c(1,1,0,1)))

[1] FALSE  TRUE TRUE   FALSE

即0,1,1,0,分類正確。

       最后再說一點,Delta規則只能訓練單層網絡,但這不會對其功能造成很大的影響。從理論上說,多層神經網絡并不比單層神經網絡更強大,他們具有同樣的能力。

三、BP神經網絡

1、sigmoid函數分類

        回顧我們前面提到的感知器,它使用示性函數作為分類的辦法。然而示性函數作為分類器它的跳點讓人覺得很難處理,幸好sigmoid函數y=1/(1 e^-x)有類似的性質,且有著光滑性這一優良性質。我們通過下圖可以看見sigmoid函數的圖像:


Sigmoid函數有著計算代價不高,易于理解與實現的優點但也有著欠擬合,分類精度不高的特性,我們在支持向量機一章中就可以看到sigmoid函數差勁的分類結果。

2、BP神經網絡結構

       BP (Back Propagation)神經網絡,即誤差反傳誤差反向傳播算法的學習過程,由信息的正向傳播和誤差的反向傳播兩個過程組成。由下圖可知,BP神經網絡是一個三層的網絡:

  • 輸入層(input layer):輸入層各神經元負責接收來自外界的輸入信息,并傳遞給中間層各神經元;

  • 隱藏層(Hidden Layer):中間層是內部信息處理層,負責信息變換,根據信息變化能力的需求,中間層可以設計為單隱層或者多隱層結構;最后一個隱層傳遞到輸出層各神經元的信息,經進一步處理后,完成一次學習的正向傳播處理過程;

  • 輸出層(Output Layer):顧名思義,輸出層向外界輸出信息處理結果

數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢