1. 程式人生 > 其它 >BP神經網路演算法 ID3決策樹演算法

BP神經網路演算法 ID3決策樹演算法

# -*- 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)