?九月?份了,車神哥又回歸了校園
?冬天?還會遠(yuǎn)嗎
?推薦一首最近很?喜歡?的歌?
?No Fear In My Heart -樸樹?
由于最近在寫一篇相關(guān)的論文,就說說其中遇到的一些問題吧~
之前做過一個對minisom的第三方開源庫的介紹,可以點(diǎn)擊看這里。
對相應(yīng)的代碼添加了注釋:
導(dǎo)入各種庫吧
# 導(dǎo)入庫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,這很簡單就不解釋了
# 傳入數(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 # 返回值
由于代碼不是很長,就沒有按照模塊來寫了
然后是導(dǎo)入源文件及其標(biāo)簽。
說實(shí)話,在現(xiàn)實(shí)項(xiàng)目中,想要找到不同特征的標(biāo)簽是真的真的真的太難了!!!
不要問為什么,當(dāng)你實(shí)踐你就知道了~
# 導(dǎo)入原始數(shù)據(jù)# 1.導(dǎo)入訓(xùn)練和測試數(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
再讀取每個sheet中的不同特征名稱,我的數(shù)據(jù)集是這樣,如果你沒有特征名稱,最好對其進(jìn)行標(biāo)記,這樣會更加有效。
# 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)簽名稱feat = [] # 設(shè)置空矩陣# 循環(huán)將特征名稱添加到feat矩陣中for tz in range(feature_names.shape[0]): tezh = feature_names[tz] feat.append(tezh) # 逐步添加進(jìn)featfeature_names = feat # 賦值給feature_namesprint("特征名稱:", feature_names)
由于我的源文件會有很多個sheet,所以需要對每一個sheet進(jìn)行訓(xùn)練及測試,再進(jìn)行保存操作,如果你只要一個數(shù)據(jù)表的話,可以對此進(jìn)行相應(yīng)的改進(jìn)。
# 按照每一個數(shù)據(jù)Sheet讀取每一層的數(shù)據(jù)# 讀取文件數(shù)據(jù)集workbook = xlrd.open_workbook(datafile) # 打開數(shù)據(jù)文件sheets = workbook.sheet_names() # 讀取原始數(shù)據(jù)的數(shù)據(jù)表sheet名SheetNames = [] # 設(shè)置空矩陣# 循環(huán)輸出for sheetname in tqdm(sheets): print("表格的名稱是:", sheetname) SheetNames.append(sheetname) # 循環(huán)添加進(jìn)空矩陣SheetNames中print("原始數(shù)據(jù)表的表單名稱為:", SheetNames)num_n = pd.DataFrame(SheetNames).shape[0] # 獲取表單的個數(shù)print("表單的個數(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è)置開始的時(shí)間
接下來也是對我的每一個表單進(jìn)行循環(huán)遍歷訓(xùn)練及其測試的過程,如果只需要進(jìn)行一次,那么只需要取消循環(huán)過程,更改其中的一些變量即可。
其中包含SOM的訓(xùn)練及測試,權(quán)值矩陣、map、聚類結(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)練集、測試集 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)練集和測試集劃分比例,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)練樣本個數(shù):{} 測試樣本個數(shù):{}".format(N, X_test.shape[0])) print("輸出網(wǎ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個API """ som.pca_weights_init(X_train) # PCA降維初始化 som.train_batch(X_train, max_iter, verbose=False) # train_batch 每次按順序取一個樣本,用過最后一個樣本后跳回第一個樣本,循環(huán)直到迭代次數(shù)滿足max_iter winmap = som.labels_map(X_train, y_train) # 求取獲勝神經(jīng)元 # 判斷樣本的類別 def classify(som,data,winmap): from numpy import sum as npsum # 導(dǎo)入庫 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) # 若不滿足上面的條件則將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è)置圖像大小 # 背景上畫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è)置對應(yīng)字典 for cnt, xx in enumerate(X_train): # 迭代獲取X_train訓(xùn)練數(shù)據(jù) w = som.winner(xx) # getting the winner # 在樣本Heat的地方畫上標(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)軸的移動,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)元個數(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]變量存儲圖像,可以是浮點(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("開始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("開始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的庫訓(xùn)練起來比Matlab快了不知道多少倍,?yyds?!!!
九月,加油吧!!!
?堅(jiān)持讀Paper,堅(jiān)持做筆記,堅(jiān)持學(xué)習(xí)?!!!
?To Be No.1??哈哈哈哈
?創(chuàng)作不易?,過路能?關(guān)注、收藏、點(diǎn)個贊?三連就最好不過了
?( ′???` )
?
『
我是這耀眼的瞬間,是劃過天邊的剎那火焰.
』
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/119411.html
摘要:要學(xué)習(xí)深度學(xué)習(xí),那么首先要熟悉神經(jīng)網(wǎng)絡(luò),簡稱的一些基本概念。網(wǎng)絡(luò)徑向基函數(shù)網(wǎng)絡(luò)是一種單隱層前饋神經(jīng)網(wǎng)絡(luò),它使用徑向基函數(shù)作為隱層神經(jīng)元激活函數(shù),而輸出層則是對隱層神經(jīng)元輸出的線性組合。 閱讀目錄1. 神經(jīng)元模型2. 感知機(jī)和神經(jīng)網(wǎng)絡(luò)3. 誤差逆?zhèn)鞑ニ惴?. 常見的神經(jīng)網(wǎng)絡(luò)模型5. 深度學(xué)習(xí)6. 參考內(nèi)容目前,深度學(xué)習(xí)(Deep Learning,簡稱DL)在算法領(lǐng)域可謂是大紅大紫,現(xiàn)在不只是...
摘要:多加了這兩層卷積層和匯集層是卷積神經(jīng)網(wǎng)絡(luò)和普通舊神經(jīng)網(wǎng)絡(luò)的主要區(qū)別。卷積神經(jīng)網(wǎng)絡(luò)的操作過程那時(shí),卷積的思想被稱作權(quán)值共享,也在年和關(guān)于反向傳播的延伸分析中得到了切實(shí)討論。 導(dǎo)讀:這是《神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)簡史》第二部分,這一部分我們會了解BP算法發(fā)展之后一些取得迅猛發(fā)展的研究,稍后我們會看到深度學(xué)習(xí)的關(guān)鍵性基礎(chǔ)。神經(jīng)網(wǎng)絡(luò)獲得視覺隨著訓(xùn)練多層神經(jīng)網(wǎng)絡(luò)的謎題被揭開,這個話題再一次變得空前熱門,羅森...
摘要:模塊在的面積上整合以及電源管理電路,可應(yīng)用于智能顯示,樓宇對講,醫(yī)療電子,語音識別家電應(yīng)用以及物聯(lián)網(wǎng)智能網(wǎng)關(guān)等領(lǐng)域核心優(yōu)勢默認(rèn)配置,超小尺寸。 系列: Sigmstar SSD201 名稱: IDO-SOM2D01 IDO-SOM2D01 是基于 SigmaStar SSD201 SoC(A...
摘要:谷歌在年國際消費(fèi)電子展以及今年的開發(fā)峰會上首次展示了他們的,然后于三月份發(fā)布了。樹莓派上性能的局限性不幸的是,業(yè)余愛好者最喜歡樹莓派無法充分發(fā)揮加速器的功能和速度。使用端口,目前的樹莓派設(shè)備沒有或,而只能使用速度較慢的。 Edge AI是什么?它為何如此重要? 傳統(tǒng)意義上,AI解決方案需要強(qiáng)大的并行計(jì)算處理能力,長期以來,AI服務(wù)都是通過聯(lián)網(wǎng)在線的云端基于服務(wù)器的計(jì)算來提供服務(wù)。但是具...
摘要:本文依據(jù)對簡稱白皮書和官方教程的理解,從系統(tǒng)和代碼實(shí)現(xiàn)角度講解的內(nèi)部實(shí)現(xiàn)原理。這一點(diǎn)是和包括在內(nèi)的符號編程框架較大的不同。的做法是引入了來處理。這樣就幾乎讓本身成為一門獨(dú)立的語言。當(dāng)為是,執(zhí)行操作當(dāng)為時(shí),執(zhí)行操作。支持的控制算子有和等。 摘要2015年11月9日,Google發(fā)布深度學(xué)習(xí)框架TensorFlow并宣布開源,并迅速得到廣泛關(guān)注,在圖形分類、音頻處理、推薦系統(tǒng)和自然語言處理等場景...
閱讀 1960·2021-09-07 09:59
閱讀 2524·2019-08-29 16:33
閱讀 3697·2019-08-29 16:18
閱讀 2855·2019-08-29 15:30
閱讀 1682·2019-08-29 13:52
閱讀 2045·2019-08-26 18:36
閱讀 539·2019-08-26 12:19
閱讀 704·2019-08-23 15:23