python機(jī)器學(xué)習(xí)之神經(jīng)網(wǎng)絡(luò)(一)
python有專門的神經(jīng)網(wǎng)絡(luò)庫(kù),但為了加深印象,我自己在numpy庫(kù)的基礎(chǔ)上,自己編寫了一個(gè)簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)程序,是基于Rosenblatt感知器的,這個(gè)感知器建立在一個(gè)線性神經(jīng)元之上,神經(jīng)元模型的求和節(jié)點(diǎn)計(jì)算作用于突觸輸入的線性組合,同時(shí)結(jié)合外部作用的偏置,對(duì)若干個(gè)突觸的輸入求和后進(jìn)行調(diào)節(jié)。為了便于觀察,這里的數(shù)據(jù)采用二維數(shù)據(jù)。
目標(biāo)函數(shù)是訓(xùn)練結(jié)果的誤差的平方和,由于目標(biāo)函數(shù)是一個(gè)二次函數(shù),只存在一個(gè)全局極小值,所以采用梯度下降法的策略尋找目標(biāo)函數(shù)的最小值。
代碼如下:
import numpy as np import pylab as pl b=1 #偏置 a=0.3 #學(xué)習(xí)率 x=np.array([[b,1,3],[b,2,3],[b,1,8],[b,2,15],[b,3,7],[b,4,29],[b,4,8],[b,4,20]]) #訓(xùn)練數(shù)據(jù) d=np.array([1,1,-1,-1,1,-1,1,-1]) #訓(xùn)練數(shù)據(jù)類別 w=np.array([b,0,0]) #初始w def sgn(v): if v>=0: return 1 else: return -1 def comy(myw,myx): return sgn(np.dot(myw.T,myx)) def neww(oldw,myd,myx,a): return oldw+a*(myd-comy(oldw,myx))*myx for ii in range(5): #迭代次數(shù) i=0 for xn in x: w=neww(w,d[i],xn,a) i+=1 print w myx=x[:,1] #繪制訓(xùn)練數(shù)據(jù) myy=x[:,2] pl.subplot(111) x_max=np.max(myx)+15 x_min=np.min(myx)-5 y_max=np.max(myy)+50 y_min=np.min(myy)-5 pl.xlabel(u"x") pl.xlim(x_min,x_max) pl.ylabel(u"y") pl.ylim(y_min,y_max) for i in range(0,len(d)): if d[i]==1: pl.plot(myx[i],myy[i],'r*') else: pl.plot(myx[i],myy[i],'ro') #繪制測(cè)試點(diǎn) test=np.array([b,9,19]) if comy(w,test)>0: pl.plot(test[1],test[2],'b*') else: pl.plot(test[1],test[2],'bo') test=np.array([b,9,64]) if comy(w,test)>0: pl.plot(test[1],test[2],'b*') else: pl.plot(test[1],test[2],'bo') test=np.array([b,9,16]) if comy(w,test)>0: pl.plot(test[1],test[2],'b*') else: pl.plot(test[1],test[2],'bo') test=np.array([b,9,60]) if comy(w,test)>0: pl.plot(test[1],test[2],'b*') else: pl.plot(test[1],test[2],'bo') #繪制分類線 testx=np.array(range(0,20)) testy=testx*2+1.68 pl.plot(testx,testy,'g--') pl.show() for xn in x: print "%d %d => %d" %(xn[1],xn[2],comy(w,xn))

圖中紅色是訓(xùn)練數(shù)據(jù),藍(lán)色是測(cè)試數(shù)據(jù),圓點(diǎn)代表類別-1.星點(diǎn)代表類別1。由圖可知,對(duì)于線性可分的數(shù)據(jù)集,Rosenblatt感知器的分類效果還是不錯(cuò)的。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python機(jī)器學(xué)習(xí)實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)示例解析
- python機(jī)器學(xué)習(xí)之神經(jīng)網(wǎng)絡(luò)
- python機(jī)器學(xué)習(xí)之神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)
- python機(jī)器學(xué)習(xí)之神經(jīng)網(wǎng)絡(luò)(三)
- python機(jī)器學(xué)習(xí)之神經(jīng)網(wǎng)絡(luò)(二)
- Python機(jī)器學(xué)習(xí)應(yīng)用之基于LightGBM的分類預(yù)測(cè)篇解讀
- Python機(jī)器學(xué)習(xí)應(yīng)用之基于天氣數(shù)據(jù)集的XGBoost分類篇解讀
- Python機(jī)器學(xué)習(xí)應(yīng)用之決策樹分類實(shí)例詳解
- Python機(jī)器學(xué)習(xí)應(yīng)用之基于BP神經(jīng)網(wǎng)絡(luò)的預(yù)測(cè)篇詳解
相關(guān)文章
Python 定義分?jǐn)?shù)類實(shí)現(xiàn)其基本運(yùn)算(示例代碼)
這篇文章主要介紹了Python 定義分?jǐn)?shù)類實(shí)現(xiàn)其基本運(yùn)算,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06
Python集成開發(fā)環(huán)境Pycharm的使用及技巧
本文詳細(xì)講解了Python集成開發(fā)環(huán)境Pycharm的使用及技巧,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
Python實(shí)現(xiàn)的堆排序算法原理與用法實(shí)例分析
這篇文章主要介紹了Python實(shí)現(xiàn)的堆排序算法,簡(jiǎn)單描述了堆排序的原理,并結(jié)合實(shí)例形式分析了Python實(shí)現(xiàn)堆排序的相關(guān)操作技巧,代碼中備有較為詳細(xì)的注釋便于理解,需要的朋友可以參考下2017-11-11
Python+OpenCV實(shí)現(xiàn)分水嶺分割算法的示例代碼
分水嶺算法是用于分割的經(jīng)典算法,在提取圖像中粘連或重疊的對(duì)象時(shí)特別有用。本文將用Python+OpenCV實(shí)現(xiàn)這一算法,需要的可以參考一下2022-08-08
python安裝模塊如何通過(guò)setup.py安裝(超簡(jiǎn)單)
這篇文章主要介紹了python安裝模塊如何通過(guò)setup.py安裝,安裝方法其實(shí)很簡(jiǎn)單,感興趣的朋友跟隨腳本之家小編一起看看吧2018-05-05
教你用python提取txt文件中的特定信息并寫入Excel
這篇文章主要給大家介紹了如何利用python提取txt文件中的特定信息并寫入Excel的相關(guān)資料,Python是一個(gè)強(qiáng)大的語(yǔ)言,解決這點(diǎn)問(wèn)題非常簡(jiǎn)單,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-11-11
Python語(yǔ)法學(xué)習(xí)之線程的創(chuàng)建與常用方法詳解
本文主要介紹了線程的使用,線程是利用進(jìn)程的資源來(lái)執(zhí)行業(yè)務(wù),并且通過(guò)創(chuàng)建多個(gè)線程,對(duì)于資源的消耗相對(duì)來(lái)說(shuō)會(huì)比較低,今天就來(lái)看一看線程的使用方法具體有哪些吧2022-04-04

