自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

感知器及其在Python中的實(shí)現(xiàn)

開發(fā) 后端
感知器的概念類似于大腦基本處理單元神經(jīng)元的工作原理。神經(jīng)元由許多由樹突攜帶的輸入信號、胞體和軸突攜帶的一個(gè)輸出信號組成。當(dāng)細(xì)胞達(dá)到特定閾值時(shí),神經(jīng)元會(huì)發(fā)出一個(gè)動(dòng)作信號。這個(gè)動(dòng)作要么發(fā)生,要么不發(fā)生。

 什么是感知器?

 

感知器及其在Python中的實(shí)現(xiàn)

 

生物神經(jīng)元示意圖

感知器的概念類似于大腦基本處理單元神經(jīng)元的工作原理。神經(jīng)元由許多由樹突攜帶的輸入信號、胞體和軸突攜帶的一個(gè)輸出信號組成。當(dāng)細(xì)胞達(dá)到特定閾值時(shí),神經(jīng)元會(huì)發(fā)出一個(gè)動(dòng)作信號。這個(gè)動(dòng)作要么發(fā)生,要么不發(fā)生。

類似地,感知器具有許多輸入(通常稱為特征),這些輸入被饋送到產(chǎn)生一個(gè)二元輸出的線性單元中。因此,感知器可用于解決二元分類問題,其中樣本將被識別為屬于預(yù)定義的兩個(gè)類之一。

算法

 

感知器及其在Python中的實(shí)現(xiàn)

 

感知器原理圖

由于感知器是二元類器(0/1),我們可以將它們的計(jì)算定義如下:

 

感知器及其在Python中的實(shí)現(xiàn)

 

讓我們回想一下,兩個(gè)長度為n的向量的點(diǎn)積由下式給出:

 

感知器及其在Python中的實(shí)現(xiàn)

 

函數(shù)f(x)= b + w.x是權(quán)重和特征向量的線性組合。 因此,感知器是線性分類器-一種使用線性預(yù)測器函數(shù)進(jìn)行預(yù)測的算法。

權(quán)重表示x中每個(gè)特征xᵢ 對機(jī)器學(xué)習(xí)模型行為的有效性。特征xᵢ的權(quán)重wᵢ越高,對輸出的影響就越大。偏差“ b”類似于線性方程式中的截距,它是一個(gè)常數(shù),可以幫助機(jī)器學(xué)習(xí)模型以最適合數(shù)據(jù)的方式進(jìn)行調(diào)整。偏差項(xiàng)假設(shè)虛擬輸入特征系數(shù)x₀= 1。

可以使用以下算法訓(xùn)練模型:

 

感知器及其在Python中的實(shí)現(xiàn)

 

Python實(shí)現(xiàn)

我們考慮用于實(shí)現(xiàn)感知器的機(jī)器學(xué)習(xí)數(shù)據(jù)集是鳶尾花數(shù)據(jù)集。這個(gè)數(shù)據(jù)集包含描述花的4個(gè)特征,并將它們歸類為屬于3個(gè)類中的一個(gè)。我們剝離了屬于類' Iris-virginica '的數(shù)據(jù)集的最后50行,只使用了兩個(gè)類' Iris-setosa '和' Iris-versicolor ',因?yàn)檫@些類是線性可分的,算法通過最終找到最優(yōu)權(quán)重來收斂到局部最小值。

 

  1. import numpy as np 
  2. import pandas as pd 
  3. import matplotlib.pyplot as plt 
  4. def load_data(): 
  5.     URL_='https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data' 
  6.     data = pd.read_csv(URL_, header = None) 
  7.     print(data) 
  8.      
  9.     # make the dataset linearly separable 
  10.     data = data[:100] 
  11.     data[4] = np.where(data.iloc[:, -1]=='Iris-setosa', 0, 1) 
  12.     data = np.asmatrix(data, dtype = 'float64'
  13.     return data 
  14. data = load_data() 

 

感知器及其在Python中的實(shí)現(xiàn)

 

 

將具有兩個(gè)特征的數(shù)據(jù)集可視化,我們可以看到,通過在它們之間畫一條直線,可以清楚地分隔數(shù)據(jù)集。

我們的目標(biāo)是編寫一個(gè)算法來找到這條線并正確地對所有這些數(shù)據(jù)點(diǎn)進(jìn)行分類。

 

  1. plt.scatter(np.array(data[:50,0]), np.array(data[:50,2]), marker='o', label='setosa'
  2. plt.scatter(np.array(data[50:,0]), np.array(data[50:,2]), marker='x', label='versicolor'
  3. plt.xlabel('petal length'
  4. plt.ylabel('sepal length'
  5. plt.legend() 
  6. plt.show() 

 

 

感知器及其在Python中的實(shí)現(xiàn)

 

 

感知器及其在Python中的實(shí)現(xiàn)

 

現(xiàn)在我們實(shí)現(xiàn)上面提到的算法,看看它是如何工作的。我們有4個(gè)特征,因此每個(gè)特征有4個(gè)權(quán)重。請記住,我們定義了一個(gè)偏置項(xiàng)w₀,假設(shè)x₀= 1,使其總共具有5個(gè)權(quán)重。

我們將迭代次數(shù)定義為10。這是超參數(shù)之一。在每次迭代時(shí),算法都會(huì)為所有數(shù)據(jù)點(diǎn)計(jì)算類別(0或1),并隨著每次錯(cuò)誤分類更新權(quán)重。

如果樣本分類錯(cuò)誤,則權(quán)值將由向相反方向移動(dòng)的增量更新。因此,如果再次對樣本進(jìn)行分類,結(jié)果就會(huì)“錯(cuò)誤較少”。我們將任何label≤0歸類為“0”(Iris-setosa),其它歸類為“1”(Iris-versicolor)。

 

  1. def perceptron(data, num_iter): 
  2.     features = data[:, :-1] 
  3.     labels = data[:, -1] 
  4.      
  5.     # set weights to zero 
  6.     w = np.zeros(shape=(1, features.shape[1]+1)) 
  7.      
  8.     misclassified_ = []  
  9.    
  10.     for epoch in range(num_iter): 
  11.         misclassified = 0 
  12.         for x, label in zip(features, labels): 
  13.             x = np.insert(x,0,1) 
  14.             y = np.dot(w, x.transpose()) 
  15.             target = 1.0 if (y > 0) else 0.0 
  16.              
  17.             delta = (label.item(0,0) - target) 
  18.              
  19.             if(delta): # misclassified 
  20.                 misclassified += 1 
  21.                 w += (delta * x) 
  22.          
  23.         misclassified_.append(misclassified) 
  24.     return (w, misclassified_) 
  25.               
  26. num_iter = 10 
  27. w, misclassified_ = perceptron(data, num_iter) 

 

 

感知器及其在Python中的實(shí)現(xiàn)

 

現(xiàn)在,讓我們繪制每次迭代中分類錯(cuò)誤的樣本數(shù)。我們可以看到該算法在第4次迭代中收斂。也就是說,所有樣本在第4次通過數(shù)據(jù)時(shí)都已正確分類。

感知器的一個(gè)特性是,如果數(shù)據(jù)集是線性可分離的,那么該算法一定會(huì)收斂!

 

  1. epochs = np.arange(1, num_iter+1) 
  2. plt.plot(epochs, misclassified_) 
  3. plt.xlabel('iterations'
  4. plt.ylabel('misclassified'
  5. plt.show() 

 

 

感知器及其在Python中的實(shí)現(xiàn)

 

局限性

  1. 僅當(dāng)數(shù)據(jù)集可線性分離時(shí),單層感知器才有效。
  2. 該算法僅用于二元分類問題。但是,我們可以通過在每個(gè)類中引入一個(gè)感知器來擴(kuò)展算法以解決多類分類問題。

 

責(zé)任編輯:華軒 來源: 今日頭條
相關(guān)推薦

2020-09-08 13:02:00

Python神經(jīng)網(wǎng)絡(luò)感知器

2021-02-20 08:42:37

Python感知器機(jī)器學(xué)習(xí)

2021-01-07 10:33:26

Python感知器機(jī)器學(xué)習(xí)

2022-09-11 15:02:22

機(jī)器學(xué)習(xí)算法感知器

2010-08-20 12:01:02

SNMP管理框架

2011-12-15 01:11:07

ibmdw

2020-11-13 12:52:35

機(jī)器學(xué)習(xí)生產(chǎn)產(chǎn)品

2009-06-04 20:36:03

CheckStyle的Eclipse中的集成

2023-10-11 22:37:44

測試左移服務(wù)器

2022-03-24 10:23:51

時(shí)間輪方法任務(wù)

2014-09-30 09:20:13

SDN openflow NFV

2018-07-20 05:44:33

藍(lán)牙5物聯(lián)網(wǎng)通信

2017-05-24 09:43:42

2023-12-26 08:22:30

光纖綜合布線

2020-05-13 15:10:04

矩陣乘法深度學(xué)習(xí)人工智能-

2023-05-07 07:56:53

Python方式

2022-11-03 15:22:15

數(shù)據(jù)結(jié)構(gòu)Python

2022-09-05 15:18:23

HDF單鏈表嵌入式系統(tǒng)

2022-09-29 08:00:00

人工智能運(yùn)輸公平性

2023-03-02 08:26:36

RedisAVL紅黑樹
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號