1. 程式人生 > >使用深度神經網路完成對鳶尾花的分類

使用深度神經網路完成對鳶尾花的分類

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%