神經網路和決策樹
阿新 • • 發佈:2022-03-27
1、神經網路
'''神經網路測試''' import pandas as pd from keras.models import Sequential from keras.layers.core import Dense, Activation import numpy as np # 引數初始化 inputfile = 'C:/Users/86183/Desktop/data/bankloan.xls' data = pd.read_excel(inputfile) x_test = data.iloc[:,:8].values y_test = 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_test, y_test, epochs= 1000, batch_size = 10) predict_x=model.predict(x_test) classes_x=np.argmax(predict_x,axis=1) yp = classes_x.reshape(len(y_test)) 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 cm_plot(y_test,yp).show()# 顯示混淆矩陣視覺化結果 score = model.evaluate(x_test,y_test,batch_size=128) # 模型評估 print(score)
執行結果
2、決策樹
# -*- coding: utf-8 -*- # 程式碼5-2 import pandas as pd # 引數初始化 filename = 'C:/Users/86183/Desktop/data/bankloan.xls' data = pd.read_excel(filename) # 匯入資料 # 資料是類別標籤,要將它轉換為資料 # 用1來表示“好”“是”“高”這三個屬性,用-1來表示“壞”“否”“低” x = data.iloc[:,:8].astype(int) y = data.iloc[:,8].astype(int) from sklearn.tree import DecisionTreeClassifier as DTC dtc = DTC(criterion='entropy') # 建立決策樹模型,基於資訊熵 dtc.fit(x, y) # 訓練模型 # 匯入相關函式,視覺化決策樹。 # 匯出的結果是一個dot檔案,需要安裝Graphviz才能將它轉換為pdf或png等格式。 from sklearn.tree import export_graphviz x = pd.DataFrame(x) """ string1 = ''' edge [fontname="NSimSun"]; node [ fontname="NSimSun" size="15,15"]; { ''' string2 = '}' """ with open("C:/Users/86183/Desktop/data/tree.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.columns[:8], #對應特徵的名字 class_names=data.columns[8], #對應類別的名字 filled=True, rounded=True, special_characters=True) graph = pydotplus.graph_from_dot_data(dot_data) graph.write_png('C:/Users/86183/Desktop/data/example.png') #儲存影象 Image(graph.create_png())
結果