?九月?份了,車(chē)神哥又回歸了校園
?冬天?還會(huì)遠(yuǎn)嗎
?推薦一首最近很?喜歡?的歌?
?No Fear In My Heart -樸樹(shù)?
由于最近在寫(xiě)一篇相關(guān)的論文,就說(shuō)說(shuō)其中遇到的一些問(wèn)題吧~
之前做過(guò)一個(gè)對(duì)minisom的第三方開(kāi)源庫(kù)的介紹,可以點(diǎn)擊看這里。
對(duì)相應(yīng)的代碼添加了注釋?zhuān)?/p>
導(dǎo)入各種庫(kù)吧
# 導(dǎo)入庫(kù)from sklearn.model_selection import train_test_splitfrom sklearn.metrics import classification_reportimport numpy as npimport matplotlib.pyplot as pltfrom matplotlib.patches import Patchimport pandas as pdfrom minisom import MiniSomimport mathimport xlrdfrom icecream import icfrom tqdm import tqdmfrom openpyxl import load_workbookimport openpyxlfrom time import time
第一步是導(dǎo)入數(shù)據(jù)的Function,這很簡(jiǎn)單就不解釋了
# 傳入數(shù)據(jù)成DataFrame的矩陣格式def loaddata(datafile, num_name): df = pd.read_excel(datafile, sheet_name=num_name, index_col=0) # 導(dǎo)入數(shù)據(jù) return df # 返回值
由于代碼不是很長(zhǎng),就沒(méi)有按照模塊來(lái)寫(xiě)了
然后是導(dǎo)入源文件及其標(biāo)簽。
說(shuō)實(shí)話,在現(xiàn)實(shí)項(xiàng)目中,想要找到不同特征的標(biāo)簽是真的真的真的太難了!??!
不要問(wèn)為什么,當(dāng)你實(shí)踐你就知道了~
# 導(dǎo)入原始數(shù)據(jù)# 1.導(dǎo)入訓(xùn)練和測(cè)試數(shù)據(jù)集datafile = "*********.xls" # 原始數(shù)據(jù)文件名# 2.導(dǎo)入標(biāo)簽數(shù)據(jù)y = pd.DataFrame(pd.read_csv("label****.csv")) # 讀取你的標(biāo)簽數(shù)據(jù)或者原有的標(biāo)簽是最好的yy = [] # 設(shè)置空矩陣# 循環(huán)將標(biāo)簽導(dǎo)入yy矩陣中for iy in range(y.shape[0]): Uy = y.iloc[iy, 0] yy.append(int(Uy))y = yy # 賦值給y
再讀取每個(gè)sheet中的不同特征名稱(chēng),我的數(shù)據(jù)集是這樣,如果你沒(méi)有特征名稱(chēng),最好對(duì)其進(jìn)行標(biāo)記,這樣會(huì)更加有效。
# 3.讀取特征標(biāo)簽feature_names = pd.DataFrame(pd.read_excel(datafile, index_col=0)).columns # 取數(shù)據(jù)的列:特征標(biāo)簽class_names = [0, 1] # 標(biāo)簽名稱(chēng)feat = [] # 設(shè)置空矩陣# 循環(huán)將特征名稱(chēng)添加到feat矩陣中for tz in range(feature_names.shape[0]): tezh = feature_names[tz] feat.append(tezh) # 逐步添加進(jìn)featfeature_names = feat # 賦值給feature_namesprint("特征名稱(chēng):", feature_names)
由于我的源文件會(huì)有很多個(gè)sheet,所以需要對(duì)每一個(gè)sheet進(jìn)行訓(xùn)練及測(cè)試,再進(jìn)行保存操作,如果你只要一個(gè)數(shù)據(jù)表的話,可以對(duì)此進(jìn)行相應(yīng)的改進(jìn)。
# 按照每一個(gè)數(shù)據(jù)Sheet讀取每一層的數(shù)據(jù)# 讀取文件數(shù)據(jù)集workbook = xlrd.open_workbook(datafile) # 打開(kāi)數(shù)據(jù)文件sheets = workbook.sheet_names() # 讀取原始數(shù)據(jù)的數(shù)據(jù)表sheet名SheetNames = [] # 設(shè)置空矩陣# 循環(huán)輸出for sheetname in tqdm(sheets): print("表格的名稱(chēng)是:", sheetname) SheetNames.append(sheetname) # 循環(huán)添加進(jìn)空矩陣SheetNames中print("原始數(shù)據(jù)表的表單名稱(chēng)為:", SheetNames)num_n = pd.DataFrame(SheetNames).shape[0] # 獲取表單的個(gè)數(shù)print("表單的個(gè)數(shù)為:", num_n)# 設(shè)置空數(shù)據(jù)表1dff = pd.DataFrame(columns=["title", "content"]) # 添加列名dff.to_excel("SOM_Result.xlsx") # 保存到"SOM_Result.xlsx"## 設(shè)置空數(shù)據(jù)表2dff2 = pd.DataFrame(columns=["title1", "content1"]) # 添加列名dff2.to_excel("SOM_label_result.xlsx") # 保存到"SOM_label_result.xlsx"start_time = time() # 記錄設(shè)置開(kāi)始的時(shí)間
接下來(lái)也是對(duì)我的每一個(gè)表單進(jìn)行循環(huán)遍歷訓(xùn)練及其測(cè)試的過(guò)程,如果只需要進(jìn)行一次,那么只需要取消循環(huán)過(guò)程,更改其中的一些變量即可。
其中包含SOM的訓(xùn)練及測(cè)試,權(quán)值矩陣、map、聚類(lèi)結(jié)果的可視化,精確度等操作。
for i_c in range(num_n): if i_c < num_n: print("程序目前處在第%r層數(shù)." % SheetNames[i_c]) XMat = loaddata(datafile, num_name=SheetNames[i_c]) # 返回得到浮點(diǎn)型矩陣 # 設(shè)置空數(shù)據(jù)表1 dff = pd.DataFrame(columns=["title", "content"]) # 添加列名 dff.to_excel("SOM_Result_"+ SheetNames[i_c] +".xlsx") # 保存到"SOM_Result.xlsx" ## 設(shè)置空數(shù)據(jù)表2 dff2 = pd.DataFrame(columns=["title1", "content1"]) # 添加列名 dff2.to_excel("SOM_label_result_"+ SheetNames[i_c] +".xlsx") # 保存到"SOM_label_result.xlsx" X = XMat.values # 將DataFrame格式改為np.array矩陣 # 劃分訓(xùn)練集、測(cè)試集 7:3 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0) # X為原始數(shù)據(jù),y為標(biāo)簽數(shù)據(jù),test_size為訓(xùn)練集和測(cè)試集劃分比例,random_state為選擇隨機(jī)打亂的方式,可設(shè)置為0或1方式 N = X_train.shape[0] #樣本數(shù)量 M = X_train.shape[1] #維度/特征數(shù)量 """ 設(shè)置超參數(shù) """ size = math.ceil(np.sqrt(5 * np.sqrt(N))) # 經(jīng)驗(yàn)公式:決定輸出層尺寸 print("訓(xùn)練樣本個(gè)數(shù):{} 測(cè)試樣本個(gè)數(shù):{}".format(N, X_test.shape[0])) print("輸出網(wǎng)格最佳邊長(zhǎng)為:", size) max_iter = 1000 # 迭代次數(shù) # Initialization and training(初始化及其訓(xùn)練) size為神經(jīng)元數(shù),M為輸入維度/特征數(shù)量, learning——rate為學(xué)習(xí)率 som = MiniSom(size, size, M, sigma=3, learning_rate=0.5, neighborhood_function="bubble") # Neighborhood_function’近鄰函數(shù)‘可選的設(shè)置有"gaussian"、"mexican_hat"、"bubble". 調(diào)參的時(shí)候可以都試一遍,看效果 """ 初始化權(quán)值,有2個(gè)API """ som.pca_weights_init(X_train) # PCA降維初始化 som.train_batch(X_train, max_iter, verbose=False) # train_batch 每次按順序取一個(gè)樣本,用過(guò)最后一個(gè)樣本后跳回第一個(gè)樣本,循環(huán)直到迭代次數(shù)滿(mǎn)足max_iter winmap = som.labels_map(X_train, y_train) # 求取獲勝神經(jīng)元 # 判斷樣本的類(lèi)別 def classify(som,data,winmap): from numpy import sum as npsum # 導(dǎo)入庫(kù) default_class = npsum(list(winmap.values())).most_common()[0][0] # 獲取獲勝神經(jīng)元的值 result = [] # 設(shè)置空矩陣 for d in data: # 循環(huán)迭代 win_position = som.winner(d) # 獲勝神經(jīng)元的權(quán)值位置 if win_position in winmap: # 判斷是否屬于獲勝神經(jīng)元 result.append(winmap[win_position].most_common()[0][0]) # 將其添加進(jìn)空矩陣result中 else: result.append(default_class) # 若不滿(mǎn)足上面的條件則將default_class添加進(jìn)result中 print("輸出result結(jié)果:", result) return result # 返回值 # 輸出混淆矩陣 y_pred = classify(som, X_test, winmap) # 調(diào)用classify函數(shù) print(classification_report(y_test, np.array(y_pred))) # 輸出混淆矩陣 # 繪制各種圖 # U-Matrix heatmap = som.distance_map() #生成U-Matrix plt.imshow(heatmap, cmap="bone_r") #miniSom案例中用的pcolor函數(shù),需要調(diào)整坐標(biāo) plt.colorbar() # 顏色卡 plt.figure(figsize=(9, 9)) # 設(shè)置圖像大小 # 背景上畫(huà)U-Matrix heatmap = som.distance_map() # 熱力圖 plt.pcolor(heatmap, cmap="bone_r") # plotting the distance map as background 設(shè)置樣式 # 定義不同標(biāo)簽的圖案標(biāo)記 markers = ["o", "s"] # 設(shè)置圖案樣式 colors = ["C0", "C1"] # 定義不同標(biāo)簽圖案的顏色 category_color = {"Normal": "C0", "fault": "C1", } # 設(shè)置對(duì)應(yīng)字典 for cnt, xx in enumerate(X_train): # 迭代獲取X_train訓(xùn)練數(shù)據(jù) w = som.winner(xx) # getting the winner # 在樣本Heat的地方畫(huà)上標(biāo)記 plt.plot(w[0]+.5, w[1]+.5, markers[y_train[cnt]], markerfacecolor="None", markeredgecolor=colors[y_train[cnt]], markersize=12, markeredgewidth=2) # plot繪制圖像,markerfacecolor:標(biāo)記顏色,markersize:標(biāo)記尺寸,markeredgewidth:標(biāo)記寬度 plt.axis([0, size, 0, size]) # 設(shè)置坐標(biāo)系 ax = plt.gca() # 進(jìn)行坐標(biāo)軸的移動(dòng),gca就是get current axes ax.invert_yaxis() #顛倒y軸方向 legend_elements = [Patch(facecolor=clr, edgecolor="w", label=l) for l, clr in category_color.items()] plt.legend(handles=legend_elements, loc="center left", bbox_to_anchor=(1, .95)) # 設(shè)置圖像界面細(xì)節(jié) # plt.show() # 顯示圖 label_name_map_number = {"Normal":0,"Fault":1} # 神經(jīng)元占比餅圖 from matplotlib.gridspec import GridSpec plt.figure(figsize=(9, 9)) # 設(shè)置圖像界面大小 the_grid = GridSpec(size, size) # 神經(jīng)元個(gè)數(shù) for position in winmap.keys(): # 迭代獲取獲勝神經(jīng)元位置 label_fracs = [winmap[position][label] for label in [0,1]] # 獲取標(biāo)簽 plt.subplot(the_grid[position[1], position[0]], aspect=1) # 表示把顯示界面分割成the_grid[position[1]*position[0]的網(wǎng)格 patches, texts = plt.pie(label_fracs) # 用于繪制餅圖 plt.text(position[0]/100, position[1]/100, str(len(list(winmap[position].elements()))), color="black", fontdict={"weight": "bold", "size": 15}, va="center", ha="center") # 給圖中加標(biāo)簽 plt.legend(patches, class_names, loc="center right", bbox_to_anchor=(-1, 9), ncol=3) # 顯示圖中的各種標(biāo)簽 # plt.show() # 輸出顯示圖像 # 權(quán)重?zé)崃D plt.figure(figsize=(10, 10)) # 設(shè)置圖像大小 for i, f in enumerate(feature_names): # 迭代循環(huán)獲取feature_names特征 plt.subplot(4, 4, i+1) # 表示把顯示界面分割成 4*4 的網(wǎng)格 plt.title(f) # 設(shè)置標(biāo)題 W = som.get_weights() # 獲得權(quán)重?cái)?shù)據(jù) plt.imshow(W[:,:,i], cmap="coolwarm") # 輸出熱力圖,W[:,:,i]變量存儲(chǔ)圖像,可以是浮點(diǎn)型數(shù)組、unit8數(shù)組以及PIL圖像,參數(shù)cmap用于設(shè)置熱圖的Colormap,代表熱力塊的樣式顏色 plt.colorbar() # colorbar,顏色卡尺 plt.xticks(np.arange(size+1)) # 設(shè)置主圖的橫坐標(biāo)的刻度字體大小 plt.yticks(np.arange(size+1)) # 設(shè)置主圖的縱坐標(biāo)的刻度字體大小 # plt.show() # 輸出顯示圖像 # 保存result——label print("開(kāi)始SOM標(biāo)簽Result保存!") df_winmap = pd.DataFrame.from_dict(winmap, orient="index") # 讀取轉(zhuǎn)換winmap ic(df_winmap) # 輸出顯示df_winmap writer1 = pd.ExcelWriter("SOM_label_result_"+ SheetNames[i_c] +".xlsx", engine="openpyxl") # 讀取"SOM_label_result.xlsx" book1 = load_workbook(writer1.path) # 獲取文件路徑 writer1.book = book1 # 賦值 df_winmap.to_excel(excel_writer=writer1, sheet_name=str(SheetNames[i_c])) # 建立為數(shù)據(jù)表 writer1.save() # 保存數(shù)據(jù)表 writer1.close() # 關(guān)閉數(shù)據(jù)表 print("SOM標(biāo)簽Result保存結(jié)束!") # 保存result_data print("開(kāi)始SOM最終Result坐標(biāo)保存!") winner = som.win_map(X_train, return_indices=True) # 獲取SOM的獲勝神經(jīng)元結(jié)果 my_df = pd.DataFrame.from_dict(winner, orient="index") # 轉(zhuǎn)換輸出賦值給my_df ic(my_df) # 顯示輸出 writer = pd.ExcelWriter("SOM_Result_"+ SheetNames[i_c] +".xlsx", engine="openpyxl") # 建立數(shù)據(jù)表"SOM_Result.xlsx" book = load_workbook(writer.path) # 獲取文件路徑 writer.book = book # 賦值 my_df.to_excel(excel_writer=writer, sheet_name=str(SheetNames[i_c])) # 保存數(shù)據(jù)表 writer.save() # 保存操作 writer.close() # 關(guān)閉操作 print("SOM最終Result坐標(biāo)保存結(jié)束!")
大體的流程就是這樣了,minisom的庫(kù)訓(xùn)練起來(lái)比Matlab快了不知道多少倍,?yyds??。。?/p>
九月,加油吧!?。?/strong>
?堅(jiān)持讀Paper,堅(jiān)持做筆記,堅(jiān)持學(xué)習(xí)??。?!
?To Be No.1??哈哈哈哈
?創(chuàng)作不易?,過(guò)路能?關(guān)注、收藏、點(diǎn)個(gè)贊?三連就最好不過(guò)了
?( ′???` )
?
『
我是這耀眼的瞬間,是劃過(guò)天邊的剎那火焰.
』
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/119411.html
摘要:要學(xué)習(xí)深度學(xué)習(xí),那么首先要熟悉神經(jīng)網(wǎng)絡(luò),簡(jiǎn)稱(chēng)的一些基本概念。網(wǎng)絡(luò)徑向基函數(shù)網(wǎng)絡(luò)是一種單隱層前饋神經(jīng)網(wǎng)絡(luò),它使用徑向基函數(shù)作為隱層神經(jīng)元激活函數(shù),而輸出層則是對(duì)隱層神經(jīng)元輸出的線性組合。 閱讀目錄1. 神經(jīng)元模型2. 感知機(jī)和神經(jīng)網(wǎng)絡(luò)3. 誤差逆?zhèn)鞑ニ惴?. 常見(jiàn)的神經(jīng)網(wǎng)絡(luò)模型5. 深度學(xué)習(xí)6. 參考內(nèi)容目前,深度學(xué)習(xí)(Deep Learning,簡(jiǎn)稱(chēng)DL)在算法領(lǐng)域可謂是大紅大紫,現(xiàn)在不只是...
摘要:多加了這兩層卷積層和匯集層是卷積神經(jīng)網(wǎng)絡(luò)和普通舊神經(jīng)網(wǎng)絡(luò)的主要區(qū)別。卷積神經(jīng)網(wǎng)絡(luò)的操作過(guò)程那時(shí),卷積的思想被稱(chēng)作權(quán)值共享,也在年和關(guān)于反向傳播的延伸分析中得到了切實(shí)討論。 導(dǎo)讀:這是《神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)簡(jiǎn)史》第二部分,這一部分我們會(huì)了解BP算法發(fā)展之后一些取得迅猛發(fā)展的研究,稍后我們會(huì)看到深度學(xué)習(xí)的關(guān)鍵性基礎(chǔ)。神經(jīng)網(wǎng)絡(luò)獲得視覺(jué)隨著訓(xùn)練多層神經(jīng)網(wǎng)絡(luò)的謎題被揭開(kāi),這個(gè)話題再一次變得空前熱門(mén),羅森...
摘要:模塊在的面積上整合以及電源管理電路,可應(yīng)用于智能顯示,樓宇對(duì)講,醫(yī)療電子,語(yǔ)音識(shí)別家電應(yīng)用以及物聯(lián)網(wǎng)智能網(wǎng)關(guān)等領(lǐng)域核心優(yōu)勢(shì)默認(rèn)配置,超小尺寸。 系列: Sigmstar SSD201 名稱(chēng): IDO-SOM2D01 IDO-SOM2D01 是基于 SigmaStar SSD201 SoC(A...
摘要:谷歌在年國(guó)際消費(fèi)電子展以及今年的開(kāi)發(fā)峰會(huì)上首次展示了他們的,然后于三月份發(fā)布了。樹(shù)莓派上性能的局限性不幸的是,業(yè)余愛(ài)好者最喜歡樹(shù)莓派無(wú)法充分發(fā)揮加速器的功能和速度。使用端口,目前的樹(shù)莓派設(shè)備沒(méi)有或,而只能使用速度較慢的。 Edge AI是什么?它為何如此重要? 傳統(tǒng)意義上,AI解決方案需要強(qiáng)大的并行計(jì)算處理能力,長(zhǎng)期以來(lái),AI服務(wù)都是通過(guò)聯(lián)網(wǎng)在線的云端基于服務(wù)器的計(jì)算來(lái)提供服務(wù)。但是具...
摘要:本文依據(jù)對(duì)簡(jiǎn)稱(chēng)白皮書(shū)和官方教程的理解,從系統(tǒng)和代碼實(shí)現(xiàn)角度講解的內(nèi)部實(shí)現(xiàn)原理。這一點(diǎn)是和包括在內(nèi)的符號(hào)編程框架較大的不同。的做法是引入了來(lái)處理。這樣就幾乎讓本身成為一門(mén)獨(dú)立的語(yǔ)言。當(dāng)為是,執(zhí)行操作當(dāng)為時(shí),執(zhí)行操作。支持的控制算子有和等。 摘要2015年11月9日,Google發(fā)布深度學(xué)習(xí)框架TensorFlow并宣布開(kāi)源,并迅速得到廣泛關(guān)注,在圖形分類(lèi)、音頻處理、推薦系統(tǒng)和自然語(yǔ)言處理等場(chǎng)景...
閱讀 2000·2021-09-07 09:59
閱讀 2547·2019-08-29 16:33
閱讀 3732·2019-08-29 16:18
閱讀 2886·2019-08-29 15:30
閱讀 1713·2019-08-29 13:52
閱讀 2079·2019-08-26 18:36
閱讀 570·2019-08-26 12:19
閱讀 733·2019-08-23 15:23