python機(jī)器學(xué)習(xí)之神經(jīng)網(wǎng)絡(luò)
手寫數(shù)字識(shí)別算法
import pandas as pd import numpy as np from sklearn.neural_network import MLPRegressor #從sklearn的神經(jīng)網(wǎng)絡(luò)中引入多層感知器 data_tr = pd.read_csv('BPdata_tr.txt') # 訓(xùn)練集樣本 data_te = pd.read_csv('BPdata_te.txt') # 測(cè)試集樣本 X=np.array([[0.568928884039633],[0.379569493792951]]).reshape(1, -1)#預(yù)測(cè)單個(gè)樣本 #參數(shù):hidden_layer_sizes中間層的個(gè)數(shù) activation激活函數(shù)默認(rèn)relu f(x)= max(0,x)負(fù)值全部舍去,信號(hào)相應(yīng)正向傳播效果好 #random_state隨機(jī)種子,max_iter最大迭代次數(shù),即結(jié)束,learning_rate_init學(xué)習(xí)率,學(xué)習(xí)速度,步長(zhǎng) model = MLPRegressor(hidden_layer_sizes=(10,), activation='relu',random_state=10, max_iter=8000, learning_rate_init=0.3) # 構(gòu)建模型,調(diào)用sklearn實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)算法 model.fit(data_tr.iloc[:, :2], data_tr.iloc[:, 2]) # 模型訓(xùn)練(將輸入數(shù)據(jù)x,結(jié)果y放入多層感知器擬合建立模型) .iloc是按位置取數(shù)據(jù) pre = model.predict(data_te.iloc[:, :2]) # 模型預(yù)測(cè)(測(cè)試集數(shù)據(jù)預(yù)測(cè),將實(shí)際結(jié)果與預(yù)測(cè)結(jié)果對(duì)比) pre1 = model.predict(X)#預(yù)測(cè)單個(gè)樣本,實(shí)際值0.467753075712819 err = np.abs(pre - data_te.iloc[:, 2]).mean()# 模型預(yù)測(cè)誤差(|預(yù)測(cè)值-實(shí)際值|再求平均) print("模型預(yù)測(cè)值:",pre,end='\n______________________________\n') print('模型預(yù)測(cè)誤差:',err,end='\n++++++++++++++++++++++++++++++++\n') print("單個(gè)樣本預(yù)測(cè)值:",pre1,end='\n++++++++++++++++++++++++++++++++\n') #查看相關(guān)參數(shù)。 print('權(quán)重矩陣:','\n',model.coefs_) #list,length n_layers - 1,列表中的第i個(gè)元素表示對(duì)應(yīng)于層i的權(quán)重矩陣。 print('偏置矩陣:','\n',model.intercepts_) #list,length n_layers - 1,列表中的第i個(gè)元素表示對(duì)應(yīng)于層i + 1的偏置矢量。
數(shù)字手寫識(shí)別系統(tǒng)
#數(shù)字手寫識(shí)別系統(tǒng),DBRHD和MNIST是數(shù)字手寫識(shí)別的數(shù)據(jù)集 import numpy as np # 導(dǎo)入numpy工具包 from os import listdir # 使用listdir模塊,用于訪問本地文件 from sklearn.neural_network import MLPClassifier #從sklearn的神經(jīng)網(wǎng)絡(luò)中引入多層感知器 #自定義函數(shù),將圖片轉(zhuǎn)換成向量 def img2vector(fileName): retMat = np.zeros([1024], int) # 定義返回的矩陣,大小為1*1024 fr = open(fileName) # 打開包含32*32大小的數(shù)字文件 lines = fr.readlines() # 讀取文件的所有行 for i in range(32): # 遍歷文件所有行 for j in range(32): # 并將01數(shù)字存放在retMat中 retMat[i * 32 + j] = lines[i][j] return retMat #自定義函數(shù),獲取數(shù)據(jù)集 def readDataSet(path): fileList = listdir(path) # 獲取文件夾下的所有文件 numFiles = len(fileList) # 統(tǒng)計(jì)需要讀取的文件的數(shù)目 dataSet = np.zeros([numFiles, 1024], int) # 用于存放所有的數(shù)字文件juzheng hwLabels = np.zeros([numFiles, 10]) # 用于存放對(duì)應(yīng)的one-hot標(biāo)簽(每個(gè)文件都對(duì)應(yīng)一個(gè)10列的矩陣) for i in range(numFiles): # 遍歷所有的文件 filePath = fileList[i] # 獲取文件名稱/路徑 digit = int(filePath.split('_')[0]) # 通過文件名獲取標(biāo)簽,split返回分割后的字符串列表 hwLabels[i][digit] = 1.0 # 將對(duì)應(yīng)的one-hot標(biāo)簽置1 .one-hot編碼,又稱獨(dú)熱編碼、一位有效編碼.one-hot向量將類別變量轉(zhuǎn)換為機(jī)器學(xué)習(xí)算法易于利用的一種形式的過程,這個(gè)向量的表示為一項(xiàng)屬性的特征向量,也就是同一時(shí)間只有一個(gè)激活點(diǎn)(不為0),這個(gè)向量只有一個(gè)特征是不為0的,其他都是0,特別稀疏。 dataSet[i] = img2vector(path + '/' + filePath) # 讀取文件內(nèi)容 return dataSet, hwLabels #讀取訓(xùn)練數(shù)據(jù),并訓(xùn)練模型 train_dataSet, train_hwLabels = readDataSet('trainingDigits') #參數(shù):hidden_layer_sizes中間層的個(gè)數(shù),activation激活函數(shù) logistic:f(x)=1/(1+exp(-x))將值映射在一個(gè)0~1的范圍內(nèi)。 #solver權(quán)重優(yōu)化的求解器adam默認(rèn),用于較大的數(shù)據(jù)集,lbfgs用于小型的數(shù)據(jù)集收斂的更快效果更好。max_iter迭代次數(shù)越多越準(zhǔn)確 clf = MLPClassifier(hidden_layer_sizes=(50,),activation='logistic', solver='adam',learning_rate_init=0.001, max_iter=700) clf.fit(train_dataSet, train_hwLabels)#數(shù)據(jù)集,標(biāo)簽,擬合 # 讀取測(cè)試數(shù)據(jù)對(duì)測(cè)試集進(jìn)行預(yù)測(cè) dataSet, hwLabels = readDataSet('testDigits') res = clf.predict(dataSet) #預(yù)測(cè)結(jié)果是標(biāo)簽([numFiles, 10]的矩陣) print("測(cè)試數(shù)據(jù)",dataSet,'\n___________________________________\n') print("測(cè)試標(biāo)簽",hwLabels,'\n++++++++++++++++++++++++++++++++++++++++\n') print("測(cè)試結(jié)果",res) error_num = 0 # 統(tǒng)計(jì)預(yù)測(cè)錯(cuò)誤的數(shù)目 num = len(dataSet) # 測(cè)試集的數(shù)目 for i in range(num): # 遍歷預(yù)測(cè)結(jié)果 # 比較長(zhǎng)度為10的數(shù)組,返回包含01的數(shù)組,0為不同,1為相同 # 若預(yù)測(cè)結(jié)果與真實(shí)結(jié)果相同,則10個(gè)數(shù)字全為1,否則不全為1 if np.sum(res[i] == hwLabels[i]) < 10: error_num += 1 print("Total num:", num, " Wrong num:",error_num, " WrongRate:", error_num / float(num))
可視化MNIST是數(shù)字手寫識(shí)別的數(shù)據(jù)集
from keras.datasets import mnist#導(dǎo)入數(shù)字手寫識(shí)別系統(tǒng)的數(shù)據(jù)集 import matplotlib.pyplot as plt (X_train, y_train), (X_test, y_test) = mnist.load_data() #以2*2(2行2列)圖的方式展現(xiàn) plt.subplot(221) plt.imshow(X_train[1], cmap=plt.get_cmap('gray_r'))#白底黑字 plt.subplot(222) plt.imshow(X_train[2], cmap=plt.get_cmap('gray'))#黑底白字 plt.subplot(223) plt.imshow(X_train[3], cmap=plt.get_cmap('gray')) plt.subplot(224) plt.imshow(X_train[4], cmap=plt.get_cmap('gray')) # show the plot plt.show()
到此這篇關(guān)于python機(jī)器學(xué)習(xí)之神經(jīng)網(wǎng)絡(luò)的文章就介紹到這了,更多相關(guān)python神經(jīng)網(wǎng)絡(luò)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python機(jī)器學(xué)習(xí)實(shí)現(xiàn)神經(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í)之神經(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技能之?dāng)?shù)據(jù)導(dǎo)出excel的實(shí)例代碼
本篇文章主要介紹了python技能之導(dǎo)出excel的實(shí)例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08Python使用Rich?type和TinyDB構(gòu)建聯(lián)系人通訊錄
這篇文章主要為大家介紹了Python使用Rich?type和TinyDB構(gòu)建聯(lián)系人通訊錄應(yīng)用程序,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08numpy array找出符合條件的數(shù)并賦值的示例代碼
本文主要介紹了numpy array找出符合條件的數(shù)并賦值的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05python反射機(jī)制內(nèi)置函數(shù)及場(chǎng)景構(gòu)造詳解
這篇文章主要為大家介紹了python反射機(jī)制內(nèi)置函數(shù)及場(chǎng)景構(gòu)造示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11基于Python模擬瀏覽器發(fā)送http請(qǐng)求
這篇文章主要介紹了基于Python模擬瀏覽器發(fā)送http請(qǐng)求,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11關(guān)于python中readlines函數(shù)的參數(shù)hint的相關(guān)知識(shí)總結(jié)
今天給大家?guī)淼氖顷P(guān)于Python函數(shù)的相關(guān)知識(shí),文章圍繞著python中readlines函數(shù)的參數(shù)hint展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06Python實(shí)現(xiàn)常見坐標(biāo)系的相互轉(zhuǎn)換
WGS84坐標(biāo)系、GCJ02坐標(biāo)系、BD09坐標(biāo)系和Web?墨卡托投影坐標(biāo)系是我們常見的四個(gè)坐標(biāo)系。這篇文章為大家整理了這四個(gè)坐標(biāo)系之間相互轉(zhuǎn)換的方法,需要的可以參考一下2023-02-02