#目的:模型預測糖尿病(輸出兩個向量) #1.載入tensorflow(含keras)等函數庫 import numpy as np import pandas as pd import tensorflow as tf #2.指定亂數種子參數=10(可自行指定不同的參數種子值) #目的:讓每次的執行結果,可以在相同亂數起始值下,進行比較 np.random.seed(10) #3.載入糖尿病資料集(讀入自己電腦硬碟的csv檔案) #在colaboratory的python讀入自己的個人電腦硬碟裡的diabetes.csv ####################################上傳diabetes.csv from google.colab import files uploaded = files.upload() for fn in uploaded.keys(): print('User uploaded file "{name}" with length {length} bytes'.format( name=fn, length=len(uploaded[fn]))) # 確認diabetes.csv是否已上載 !ls *.* -l ########################## #4.把csv檔案讀入成dataframe結構資料(use Pandas to read diabetes.csv) df = pd.read_csv("./diabetes.csv") #5.df.values指令,可以把dataframe轉成Numppy陣列資料(dataset) dataset = df.values #6.函數random.shuffle(dataset),可以把dataset陣列,打亂資料次序,成隨機次序(使用亂數打亂資料) np.random.shuffle(dataset) #7.將資料分割成輸入的訓練資料X,和標籤資料Y #特徵資料集 = X = 前8個欄位(0~7) = 訓練資料用 #標籤資料集 = Y = 第9個欄位(8) = 目標值 X = dataset[:, 0:8] Y = dataset[:, 8] #8.特徵標準化 X -= X.mean(axis=0) X /= X.std(axis=0) # One-hot編碼 #from tensorflow.keras.utils import to_categorical #Y = to_categorical(Y) Y = tf.keras.utils.to_categorical(Y) #9.把資料集分割成訓練資料集,測試資料集 #前690筆,是訓練用資料 X_train, Y_train = X[:690], Y[:690] #最後78筆(690以後筆數),是測試用資料 X_test, Y_test = X[690:], Y[690:] #9.定義模型(加入三層網絡) model = tf.keras.models.Sequential() model.add(tf.keras.layers.Dense(10, input_shape=(8,), activation="relu")) model.add(tf.keras.layers.Dense(6, activation="relu")) model.add(tf.keras.layers.Dense(2, activation="softmax")) #10.顯示神經網絡模型的摘要資訊 #model.summary() #11.編譯模型 #目的:把上面keras建立好的四層神經網絡,編譯成低階的tensorflow計算圖
model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["accuracy"]) #12.訓練模型 model.fit(X, Y, epochs=150, batch_size=10, verbose=0) #13.評估模型的效能 loss, accuracy = model.evaluate(X, Y) #14.印出模型的準確度 print("準確度 = {:.2f}".format(accuracy)) #進行預測(使用X_test,預測Y_pred) Y_pred = model.predict(X_test, batch_size=10) print('若2個輸出向量,第一筆驗證資料集X_test[0]的預測值 = ', Y_pred[0])