使用深度神經網路完成對鳶尾花的分類
阿新 • • 發佈:2018-12-24
1.首先匯入鳶尾花的資料
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
dataset = pd.read_csv('Iris.csv')
2.使用seaborn對資料進行觀察
import seaborn as sns
sns.pairplot(dataset.iloc[:, 1:6], hue='Species')
3.生成測試資料
將前4列與第5列分別抽離成np array
X = dataset.iloc[:, 1:5].values y = dataset.iloc[:,5].values
此時X是這樣
但是y還是字串
所以我們要將y字串陣列轉換成整數陣列,在這裡我們可以使用sklearn的LabelEncoder庫
from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder()
y1 = encoder.fit_transform(y)
最後將y1轉成神經網路需要的陣列結構
Y = pd.get_dummies(y1).values
4.將訓練資料與測試資料做分割
from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.2, random_state=0)
5.建立神經網路模型
使用Sequential建立神經網路模型
模型一共4層
損失函式使用‘categorical_crossentropy’(比較適用於3種以上的分類的情況)
指定 metrics=[‘accuracy’],會在訓練結束後計算訓練資料在模型上的準確率
from keras.models import Sequential from keras.layers import Dense from keras.optimizers import Adam model = Sequential() model.add(Dense(10, input_shape=(4,), activation='relu')) model.add(Dense(8, activation='relu')) model.add(Dense(6, activation='relu')) model.add(Dense(3, activation='softmax')) model.compile(Adam(lr=0.04), 'categorical_crossentropy', metrics=['accuracy']) model.summary()
6.訓練模型
指定epochs=100,訓練資料會在模型中訓練100次
model.fit(X_train, y_train, epochs=100)
7.使用模型進行預測
y_pred = model.predict(X_test)
列印結果
浮點型別的資料不方便理解,所以使用np.argmax將資料轉為整數陣列
y_pred_class = np.argmax(y_pred, axis=1) //其實就是記錄每個陣列中值最大的數的index
以上就是得到預測資料的全過程,當然最後我們還是需要一個更直觀的方式來評估模型準確率
6.模型評估
from sklearn.metrics import classification_report
report = classification_report(y_test_class, y_pred_class)
print(report)
precision表示測試的資料是否都預測準確
recall表示需要查的資料是否都查到了
f1=2*(precision*recall)/(precision+recall)
support表示測試資料中屬於各個分類的測試資料各有多少個
由此可觀察到,此時測試資料在模型上的準確率達到了100%