BP神經網路演算法 ID3決策樹演算法
阿新 • • 發佈:2022-03-27
# -*- coding: utf-8 -*- """ Created on Sun Mar 27 17:49:56 2022 @author: Administrator """ import pandas as pd from keras.models import Sequential from keras.layers.core import Dense, Activation # 引數初始化 inputfile = 'bankloan.xls' data = pd.read_excel(inputfile) # 匯入資料 x = data.iloc[:,:8].values y= data.iloc[:,8].values # 建立模型 model = Sequential() # 建立模型 model.add(Dense(input_dim = 8, units = 8)) model.add(Activation('relu')) # 用relu函式作為啟用函式,能夠大幅提供準確度 model.add(Dense(input_dim = 8, units = 1)) model.add(Activation('sigmoid')) # 由於是0-1輸出,用sigmoid函式作為啟用函式 model.compile(loss = 'mean_squared_error', optimizer = 'adam') # 編譯模型。由於我們做的是二元分類,所以我們指定損失函式為binary_crossentropy,以及模式為binary # 另外常見的損失函式還有mean_squared_error、categorical_crossentropy等,請閱讀幫助檔案。 # 求解方法我們指定用adam,還有sgd、rmsprop等可選 model.fit(x, y, epochs= 1000, batch_size = 10) # 訓練模型,學習一千次 #yp = model.predict_classes(x).reshape(len(y)) # 分類預測 import numpy as np predict_x=model.predict(x) classes_x=np.argmax(predict_x,axis=1) yp = classes_x.reshape(len(y)) score = model.evaluate(x, y, batch_size=128) #分類預測精確度 print(score) from cm_plot import * # 匯入自行編寫的混淆矩陣視覺化函式 cm_plot(y,yp).show() # 顯示混淆矩陣視覺化結果
# -*- coding: utf-8 -*- """ Created on Sun Mar 27 17:49:56 2022 @author: Administrator """ def cm_plot(y, yp): from sklearn.metrics import confusion_matrix cm = confusion_matrix(y, yp) import matplotlib.pyplot as plt plt.matshow(cm, cmap=plt.cm.Greens) plt.colorbar() for x in range(len(cm)): for y in range(len(cm)): plt.annotate(cm[x,y], xy=(x, y), horizontalalignment='center', verticalalignment='center') plt.ylabel('True label') plt.xlabel('Predicted label') return plt
二、ID3決策樹演算法
# -*- coding: utf-8 -*- """ Created on Sun Mar 27 17:49:56 2022 @author: Administrator """ import pandas as pd # 引數初始化 filename = 'bankloan.xls' data_tr = pd.read_excel(filename) #print(data_tr) # 匯入資料 #訓練資料 #讀取資料 x_tr = data_tr.iloc[:,:8].astype(int) y_tr = data_tr.iloc[:,8].astype(int) from sklearn.tree import DecisionTreeClassifier as DTC dtc = DTC(criterion='entropy') # 建立決策樹模型,基於資訊熵 dtc.fit(x_tr, y_tr) # 訓練模型 # 匯入相關函式,視覺化決策樹。 # 匯出的結果是一個dot檔案,需要安裝Graphviz才能將它轉換為pdf或png等格式。 from sklearn.tree import export_graphviz x = pd.DataFrame(x_tr) string1 = ''' edge [fontname="NSimSun"]; node [ fontname="NSimSun" size="15,15"]; { ''' string2 = '}' with open("dt1.dot", 'w') as f: export_graphviz(dtc, feature_names = x.columns, out_file = f) f.close() from IPython.display import Image from sklearn import tree import pydotplus dot_data = tree.export_graphviz(dtc, out_file=None, #regr_1 是對應分類器 feature_names=data_tr.columns[:8], #對應特徵的名字 class_names=data_tr.columns[8], #對應類別的名字 filled=True, rounded=True, special_characters=True) #手動修改樹結構的字型型別,以免出來的圖片出現中文亂碼 dot_data = dot_data.replace('helvetica', 'MicrosoftYaHei') graph = pydotplus.graph_from_dot_data(dot_data) graph.write_png('p.png') #儲存影象 Image(graph.create_png()) #顯示決策樹圖片 import matplotlib.pyplot as plt img = plt.imread('p.png') fig = plt.figure('show picture') plt.imshow(img)