Python中怎么實(shí)現(xiàn)一個(gè)感知器

這篇文章將為大家詳細(xì)講解有關(guān)Python中怎么實(shí)現(xiàn)一個(gè)感知器,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

成都地區(qū)優(yōu)秀IDC服務(wù)器托管提供商(創(chuàng)新互聯(lián)).為客戶提供專業(yè)的遂寧托管服務(wù)器,四川各地服務(wù)器托管,遂寧托管服務(wù)器、多線服務(wù)器托管.托管咨詢專線:18980820575

什么是感知器?

Python中怎么實(shí)現(xiàn)一個(gè)感知器

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

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

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

算法

Python中怎么實(shí)現(xiàn)一個(gè)感知器

感知器原理圖

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

Python中怎么實(shí)現(xiàn)一個(gè)感知器

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

Python中怎么實(shí)現(xiàn)一個(gè)感知器

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

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

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

Python中怎么實(shí)現(xiàn)一個(gè)感知器

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)重來收斂到局部最小值。

import numpy as np import pandas as pd import matplotlib.pyplot as plt def load_data():     URL_='https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'     data = pd.read_csv(URL_, header = None)     print(data)          # make the dataset linearly separable     data = data[:100]     data[4] = np.where(data.iloc[:, -1]=='Iris-setosa', 0, 1)     data = np.asmatrix(data, dtype = 'float64')     return data data = load_data()
Python中怎么實(shí)現(xiàn)一個(gè)感知器

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

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

plt.scatter(np.array(data[:50,0]), np.array(data[:50,2]), marker='o', label='setosa') plt.scatter(np.array(data[50:,0]), np.array(data[50:,2]), marker='x', label='versicolor') plt.xlabel('petal length') plt.ylabel('sepal length') plt.legend() plt.show()
Python中怎么實(shí)現(xiàn)一個(gè)感知器
Python中怎么實(shí)現(xiàn)一個(gè)感知器

現(xiàn)在我們實(shí)現(xiàn)上面提到的算法,看看它是如何工作的。我們有4個(gè)特征,因此每個(gè)特征有4個(gè)權(quán)重。請(qǐng)記住,我們定義了一個(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)的增量更新。因此,如果再次對(duì)樣本進(jìn)行分類,結(jié)果就會(huì)“錯(cuò)誤較少”。我們將任何label≤0歸類為“0”(Iris-setosa),其它歸類為“1”(Iris-versicolor)。

def perceptron(data, num_iter):     features = data[:, :-1]     labels = data[:, -1]          # set weights to zero     w = np.zeros(shape=(1, features.shape[1]+1))          misclassified_ = []         for epoch in range(num_iter):         misclassified = 0         for x, label in zip(features, labels):             x = np.insert(x,0,1)             y = np.dot(w, x.transpose())             target = 1.0 if (y > 0) else 0.0                          delta = (label.item(0,0) - target)                          if(delta): # misclassified                 misclassified += 1                 w += (delta * x)                  misclassified_.append(misclassified)     return (w, misclassified_)               num_iter = 10 w, misclassified_ = perceptron(data, num_iter)
Python中怎么實(shí)現(xiàn)一個(gè)感知器

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

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

epochs = np.arange(1, num_iter+1) plt.plot(epochs, misclassified_) plt.xlabel('iterations') plt.ylabel('misclassified') plt.show()
Python中怎么實(shí)現(xiàn)一個(gè)感知器

關(guān)于Python中怎么實(shí)現(xiàn)一個(gè)感知器就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

本文題目:Python中怎么實(shí)現(xiàn)一個(gè)感知器
當(dāng)前URL:http://muchs.cn/article16/pdgcgg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、定制網(wǎng)站、網(wǎng)站排名微信小程序、動(dòng)態(tài)網(wǎng)站、網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司