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())

  執行結果: