[轉]感知器演算法

來源:互聯網
上載者:User

標籤:調整   缺點   start   std   結束   分享   nts   details   http   

 原文地址:http://blog.csdn.net/u014403897/article/details/45024609感知器演算法2015-04-13 13:26 521人閱讀 評論(0) 收藏 舉報 分類:機器學習(10) 

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

引例:判斷一個人是否長得帥??? 有如下feature: 身高,體重,三圍,顏值,學習成績(帥的人學習成績好的少...為何要這麼一個扯淡的特徵下面會講解)等等。

假設有一個標準:每一個評分項給予多少分的權重,當所有feature與權重相乘的和大於某一個值的時候,那這個人就是帥哥!!

例子: 180*5+150*3+....>1000 帥哥! 小於則.....

感知器任務:通過已知的執行個體調節權重,使其能夠預測出未知執行個體的結果。

符號表示:

if       (w1*x1+w2*x2+.......>b) return true

else        return false

由於b是常數,我們可以將b表示為-w0×X0,則可以表示為

 

if       (w1*x1+w2*x2+.......+w0×x0>0) return true

else        return false

訓練方法:

當預測值等於我們期待的結果時: 什麼也不用做

但當其小於的時候,說明我們增加的權值小了,贏補上一個正數數 例如所有xi××2的和數學表達推導如下:

w1*x1+a*x1*x1+w2*x2+a*x2*x2+......  住:a為學習速率因子,會影響學習速率

w的更新值相當於wi=wi+a×xi

當其大於時候應改為減號,歸結起來應為如下運算式:

wi=wi+a*(y-h(x))*xi

虛擬碼表示:

 

[cpp] view plain copy 
  1. while(迴圈結束條件)  {#此處可設為讓樣本迴圈執行多少次  
  2.     delta_w[ ]={0};  
  3.     for(每個樣本){  
  4.         for(每個特徵 i){  
  5.             delta_w[i]+=a*(y-h(x))*wi;  
  6.         }  
  7.     }  
  8.      for(每個特徵 i){  
  9.             更新w權值  
  10.             wi+=dealta_w[i]  
  11.         }  
  12. }  

問題:

 

1.迭代的停止條件是什嗎?

答:自己定,可以是某個驗證集取得理想結果的時候,或是向上述例子,單純是迴圈多少次

2.當訓練時候遇到正確樣本會發生什嗎?

答:什麼也不發生,當預測結果正確時候,就假定是最好感知器

3.每次迭代調整w或是所有樣本迭代完全後調整w(上例)有區別嗎?

答:區別不大,也許w權值會有所變化,但實際效果沒多大區別。

4.某輪迭代後結果一定變好嗎?

答:不一定,但總體趨勢是變好的!

5.a的作用和取值問題

答:作用是控制學習速率,一般選0-1之間,過大不能學習到最優值,過小沒有什麼變化~~

C語言實現代碼如下:

 

[cpp] view plain copy 
  1. //此為預測函數  
  2. //註:此處x0皆為1,至少需要是一個定值  
  3. int predict(double x[ ] ,double w[ ],int feature){  
  4.     int sum=0;  
  5.     for(int i=0;i<feature;i++){  
  6.         sum+=w[i]*x[i];  
  7.     }  
  8.     if(sum>0) return 1;  
  9.     else return 0;  
  10. }  
  11. //此為調參函數  
  12. void train(double train_set[ ][ ],int y[ ],double w[ ],int feature_num,int sample_num,int a,int iterator_num){  
  13.     while(iterator_num--){  
  14.         double* dw=new double[feature_num];  
  15.         for(int i=0;i<sample_num;i++){  
  16.             for(int j=0;j<feature_num;j++){  
  17.                 dw[j]+=a*(y-predict(train_set[i]))*train_set[i][j];  
  18.             }  
  19.         }  
  20.     }  
  21.     for(int j=0,j<feature_num;j++){  
  22.         w[j]+=dw[j];  
  23.     }  
  24. }  

最佳化方法:找出訓練後結果最好的一組w

 

                    由一個計數器,吧每次最好的記錄即可!

缺點:只能解決線性可分問題

通過升維度來解決!但是並不一定能取得很好效果,如增加學習成績這種特徵...

更好的解決方案以後再討論!

[轉]感知器演算法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.