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