#!/usr/bin/env python
# -*- coding=utf-8 -*-
__author__ = "柯博文老師 Powen Ko, www.powenko.com"
from sklearn import datasets
from sklearn.model_selection import train_test_split
import tensorflow as tf
import numpy as np
iris = datasets.load_iris()
category=3
dim=4
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size = 0.2)
y_train2 = tf.keras.utils.to_categorical(y_train, num_classes = (category))
y_test2 = tf.keras.utils.to_categorical(y_test, num_classes = (category))
print("x_train[:4]", x_train[:4])
print("y_train[:4]", y_train[:4])
print("y_train2[:4]", y_train2[:4])
# 建立模型
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Dense(units = 10,
activation = tf.nn.relu,
input_dim = dim))
model.add(tf.keras.layers.Dense(units = 10,
activation = tf.nn.relu ))
model.add(tf.keras.layers.Dense(units = category,
activation = tf.nn.softmax ))
model.compile(optimizer = 'adam',
loss = tf.keras.losses.categorical_crossentropy,
metrics = ['accuracy'])
model.fit(x_train, y_train2,
epochs = 250,
batch_size = 16)
#測試
score = model.evaluate(x_test, y_test2, batch_size = 16)
print("score:", score)
Stage 1
# 顯示前四筆預測答案
predict = model.predict(x_test)
print("Ans:", np.argmax(predict[0]), np.argmax(predict[1]), np.argmax(predict[2]), np.argmax(predict[3]))
predict2 = model.predict(x_test)
predict2 = np.argmax(predict2, axis=1)
print("predict_classes: ", predict2) #顯示所有預測答案
print("y_test", y_test[:]) #顯示所有標準答案
#計算準確率
sum = 0
print(" 編號 預測 答案")
for i in range(len(y_test)):
print("%5d\\t%5d\\t%5d" % (i, predict2[i], y_test[i]))
if predict2[i] == y_test[i]:
sum += 1
print("準確率 = %.6f" % (sum/len(y_test)))
print("準確率 = %.4f%%" % (sum/len(y_test)*100))
Stage 2
#!/usr/bin/env python
# -*- coding=utf-8 -*-
__author__ = "柯博文老師 Powen Ko, www.powenko.com"
# from sklearn import datasets
from sklearn.model_selection import train_test_split
import tensorflow as tf
import pandas as pd
import numpy as np
file = 'iris.csv'
path = "C:\\Users\\USER\\Desktop\\112-2\\大數據統計分析AA\\finance\\" + file
D = pd.read_csv(path, encoding = 'ANSI', low_memory = False)
columns = ['SL', 'SW', 'PL', 'PW']
x_train, x_test, y_train, y_test = train_test_split(D[columns], D[ 'Target'], test_size = 0.2)
print(len(y_train))
print(len(y_test))
category = 3 # 鳶尾花有幾種 Label 答案 Y
dim = 4 # 鳶尾花有幾種 Feature 特徵 X
y_train2 = tf.keras.utils.to_categorical(y_train, num_classes = (category))
y_test2 = tf.keras.utils.to_categorical(y_test, num_classes = (category))
print("x_train[:4]", x_train[:4])
print("y_train[:4]", y_train[:4])
print("y_train2[:4]", y_train2[:4]) # 測試前四筆資料
# 建立模型
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Dense(units = 10,
activation = tf.nn.relu,
input_dim = dim))
model.add(tf.keras.layers.Dense(units = 10,
activation = tf.nn.relu ))
model.add(tf.keras.layers.Dense(units = category,
activation = tf.nn.softmax ))
model.compile(optimizer = 'adam',
loss = tf.keras.losses.categorical_crossentropy,
metrics = ['accuracy'])
#model.fit(x_train, y_train2,
# epochs = 250,
# batch_size = 16)
# 繪圖會用到history
history=model.fit(x_train, y_train2,
epochs=250,
batch_size=16)
#測試
score = model.evaluate(x_test, y_test2, batch_size = 16)
print("score:", score) # 輸出是 loss value & metrics values
# 顯示前四筆預測答案
predict = model.predict(x_test)
print("Ans:", np.argmax(predict[0]), np.argmax(predict[1]), np.argmax(predict[2]), np.argmax(predict[3]))
predict2 = model.predict(x_test)
predict2 = np.argmax(predict2, axis = 1)
print("predict_classes:", predict2)
# print(y_test2)
test2 = np.argmax(y_test2, axis = 1)
print("y_test", test2)
tem = 0
print(" 編號 預測 答案")
for i in range(len(y_test)):
print("%5d\\t%5d\\t%5d" % (i, predict2[i], test2[i]))
if predict2[i] == test2[i]:
tem += 1
print("準確率 = %.6f" % (tem/len(y_test)))
#繪圖
import matplotlib.pyplot as plt
print(history.history.keys())
plt.plot(history.history['accuracy']) # mean_absolute_error
plt.title('iris classification')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['train accuracy'], loc = 'lower right')
plt.show()
plt.plot(history.history['loss']) # mean_absolute_error
plt.title('iris classification')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train loss'], loc = 'upper right')
plt.show()