日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
感知器及其在Python中的實現(xiàn)

 什么是感知器?

 

 

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

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

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

算法

 

 

感知器原理圖

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

 

 

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

 

 

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

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

可以使用以下算法訓練模型:

 

 

Python實現(xiàn)

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

 

 
 
 
  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() 

 

 

 

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

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

 

 
 
 
  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() 

 

 

 

 

 

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

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

如果樣本分類錯誤,則權值將由向相反方向移動的增量更新。因此,如果再次對樣本進行分類,結果就會“錯誤較少”。我們將任何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) 

 

 

 

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

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

 

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

 

 

 

局限性

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

 


本文題目:感知器及其在Python中的實現(xiàn)
本文路徑:http://m.5511xx.com/article/coshopj.html