国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - python實現感知器算法詳解

python實現感知器算法詳解

2020-12-26 00:38修煉之路 Python

這篇文章主要為大家詳細介紹了python實現感知器算法詳解,具有一定的參考價值,感興趣的小伙伴們可以參考一下

在1943年,沃倫麥卡洛可與沃爾特皮茨提出了第一個腦神經元的抽象模型,簡稱麥卡洛可-皮茨神經元(McCullock-Pitts neuron)簡稱MCP,大腦神經元的結構如下圖。麥卡洛可和皮茨將神經細胞描述為一個具備二進制輸出的邏輯門。樹突接收多個輸入信號,當輸入信號累加超過一定的值(閾值),就會產生一個輸出信號。弗蘭克羅森布拉特基于MCP神經元提出了第一個感知器學習算法,同時它還提出了一個自學習算法,此算法可以通過對輸入信號和輸出信號的學習,自動的獲取到權重系數,通過輸入信號與權重系數的乘積來判斷神經元是否被激活(產生輸出信號)。

python實現感知器算法詳解

一、感知器算法

我們將輸入信號定義為一個x向量,x=(x1,x2,x3..),將權重定義為ω=(ω1,ω2,ω3...)其中ω0的值為,將z定義為為兩個向量之間的乘積,所以輸出z=x1*ω1 + x2*ω2+....,然后將z通過激勵(激活)函數,作為真正的輸出。其中激活函數是一個分段函數,下圖是一個階躍函數,當輸入信號大于0的時候輸出為1,小于0的時候輸出為0,這里的階躍函數閾值設置為0了。定義激活函數為Φ(z),給激活函數Φ(z)設定一個閾值θ,當激活函數的輸出大于閾值θ的時候,將輸出劃分為正類(1),小于閾值θ的時候將輸出劃分為負類(-1)。如果,將閾值θ移到等式的左邊z=x1*ω1+x2*ω2+....+θ,我們可以將θ看作為θ=x0*ω0,其中輸出x0為1,ω0為-θ。將閾值θ移到等式的左邊之后,就相當于激活函數的閾值由原來的θ變成了0。

python實現感知器算法詳解

感知器算法的工作過程:

1、將權重ω初始化為零或一個極小的隨機數。

2、迭代所有的訓練樣本(已知輸入和輸出),執行如下操作:

a、通過權重和已知的輸入計算輸出

b、通過a中的輸出與已知輸入的輸出來更新權重

python實現感知器算法詳解

權重的更新過程,如上圖的公式,其中ω與x都是相對應的(當ω為ω0的時候,x為1),η為學習率介于0到1之間的常數,其中y為輸入所對應的輸出,后面的y(打不出來)為a中所計算出來的輸出。通過迭代對權重的更新,當遇到類標預測錯誤的情況下,權重的值會趨于正類別和負類別的方向。

python實現感知器算法詳解

第一個公式表示的是,當真實的輸出為1的情況下,而預測值為-1,所以我們就需要增加權重來使得預測值往1靠近。

第二個公式表示的是,當真實的輸出為-1的情況下,而預測值為1,所以我們就需要減少權重來使得預測值往-1靠近。

注意:感知器收斂的前提是兩個類別必須是線性可分的,且學習率足夠小。如果兩個類別無法通過一個線性決策邊界進行劃分,我們可以設置一個迭代次數或者一個判斷錯誤樣本的閾值,否則感知器算法會一直運行下去。

python實現感知器算法詳解

最后,用一張圖來表示感知器算法的工作過程

python實現感知器算法詳解

二、python實現感知器算法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import numpy as np
 
class Perceptron(object):
  '''''
  輸入參數:
  eta:學習率,在0~1之間,默認為0.01
  n_iter:設置迭代的次數,默認為10
  屬性:
  w_:一維數組,模型的權重
  errors_:列表,被錯誤分類的數據
  '''
  #初始化對象
  def __init__(self,eta=0.01,n_iter=10):
    self.eta = eta
    self.n_iter = n_iter
  #根據輸入的x和y訓練模型
  def fit(self,x,y):
    #初始化權重
    self.w_ = np.zeros(1 + x.shape[1])
    #初始化錯誤列表
    self.errors_=[]
    #迭代輸入數據,訓練模型
    for _ in range(self.n_iter):
      errors = 0
      for xi,target in zip(x,y):
        #計算預測與實際值之間的誤差在乘以學習率
        update = self.eta * (target - self.predict(xi))
        #更新權重
        self.w_[1:] += update * xi
        #更新W0
        self.w_[0] += update * 1
        #當預測值與實際值之間誤差為0的時候,errors=0否則errors=1
        errors += int(update != 0)
      #將錯誤數據的下標加入到列表中
      self.errors_.append(errors)
    return self
  #定義感知器的傳播過程
  def net_input(self,x):
    #等價于sum(i*j for i,j in zip(x,self.w_[1:])),這種方式效率要低于下面
    return np.dot(x,self.w_[1:]) + self.w_[0]
  #定義預測函數
  def predict(self,x):
    #類似于三元運算符,當self.net_input(x) >= 0.0 成立時返回1,否則返回-1
    return np.where(self.net_input(x) >= 0.0 , 1 , -1)

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://blog.csdn.net/sinat_29957455/article/details/78820084

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产伦精品一区二区三区四区视频 | 国产a区 | 99久久亚洲一区二区三区青草 | www一区二区 | 日本一级淫片免费看 | 午夜电影网址 | 综合激情网站 | 狠狠综合 | 一区二区视频 | 激情毛片 | 久久av资源 | 日本久久久 | 亚洲一区视频 | 国产精品久久久久久久久久久久久久久久 | 中文字幕亚洲欧美日韩在线不卡 | 欧美电影网站 | 深夜网址| 国产精品国产精品国产专区不片 | 欧美精品一二区 | 成人久久久精品乱码一区二区三区 | 黄色在线 | 狠狠操狠狠干 | 日韩有码一区二区三区 | 亚洲精品一区二区三区不 | 成人欧美一区二区三区在线播放 | 综合伊人 | 一区中文字幕 | 日韩欧美在线一区 | 国产人成精品一区二区三 | 成人福利电影 | 大片免费播放在线观看视频 | 日韩成人在线电影 | 亚洲激情一区二区 | 高清视频一区 | 高清一区在线 | 一区自拍 | 99视频在线免费观看 | 二区视频 | 在线观看免费黄色 | 欧美成人免费 | 国产免费爽爽视频在线观看 |