給定的資料在 「point_data.csv」檔案裡,這個資料總共包含了5個類別(由class_id來區分), 幷包括10個特徵。在這裡,我們需要搭建多層的神經網路,並利用這個網路來識別分類。
首先是匯入所有所需的library
# 匯入library
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
# todo 匯入跟keras相關的libraray
from keras.models import sequential
from keras.layers import dense, dropout
from keras.optimizers import sgd
# 以下是跟sklearn相關的庫
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import labelencoder,scale
from sklearn.metrics import f1_score, classification_report,confusion_matrix
1.匯入資料集filename = 'point_data.csv'
dataset = pd.read_csv(filename)
2.資料預處理
首先使用labelencoder對label進行標準化處理
encoder = labelencoder()
# 定義標籤y和特徵x
y = dataset.iloc[:, 2:3].values
x = dataset.iloc[:, 3:13].values
# todo: 對y做乙個簡單的轉換(不然會在keras部分會出錯)
y = encoder.fit_transform(y)
分割訓練資料與測試資料
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.20, random_state=42)
使用preprocessing.scale函式對資料進行歸一化
x_train = scale(x_train)
x_test = scale(x_test)
3.定義深度神經網路模型
模型總共包含4層hidden layer, 第一層包括50個hidden units, 第二層包括50個hidden units, 第三層包括60個hidden units,
第四層包括40個hidden units. 並在第一層hidden layer和第二層hidden layer之間新增乙個dropout layer (rate=0.2),在第二層和第三層hidden layer之間新增dropout layer(rate=0.2), 第三層和第四層之間新增dropout layer(rate=0.1)。
input_shape = (10,)
output_shape = 5
# todo: 定義深度學習模型
model = sequential()
model.add(dense(10, input_shape=input_shape, activation='relu'))
model.add(dense(50, activation='relu'))
model.add(dropout(rate=0.2))
model.add(dense(50, activation='relu'))
model.add(dropout(rate=0.2))
model.add(dense(60, activation='relu'))
model.add(dropout(rate=0.1))
model.add(dense(40, activation='relu'))
model.add(dense(output_shape, activation='softmax'))
# 輸出模型描述
定義sgd優化器,學習率為0.01
sgd = sgd(lr=0.01, decay=1e-6, momentum=0.9, nesterov=true)
義模型的compile函式,設定loss為sparse_categorical_crossentropy, 利用上面定義的sgd優化器,利用準確率作為評估標準。
model.compile(loss='sparse_categorical_crossentropy',optimizer=sgd, metrics=['accuracy'])
4.訓練模型
設定epoch為100, batch_size為100,並把訓練資料中的15%作為validation data(驗證集), 把中間的結果都賦給history變數(後面做分析用)
history = model.fit(x_train, y_train, epochs=100,batch_size=100,validation_split=0.15)
可以看到隨著模型的不斷訓練,損失函式降低到接近0.06,auc準確率可以達到97.7%
5.驗證模型
我們可以畫乙個圖來表示準確率的變化情況(分別在訓練資料和測試資料)
也可以畫乙個圖來表示loss的變化情況(分別在訓練資料和測試資料)
在測試資料上做評估
y_pred = model.predict(x_test)
score = model.evaluate(x_test, y_test, batch_size=100, verbose=1)
print(score)
print("baseline error: %.2f%%" % (100-score[1]*100))
繪製混淆矩陣
# **結果
test_class = model.predict_classes(x_test)
# 繪製矩陣
輸出在測試集上的precision, recall, f1-score
深度神經網路
關於卷積神經網路cnn,網路和文獻中有非常多的資料,我在工作 研究中也用了好一段時間各種常見的model了,就想著簡單整理一下,以備查閱之需。如果讀者是初接觸cnn,建議可以先看一看 deep learning 深度學習 學習筆記整理系列 中關於cnn的介紹 1 是介紹我們常說的lenet為例,相信...
深度神經網路非常善於識別物體
神經網路的複雜關係推理,什麼是關係推理?考慮下面的影象。幾乎不可能不把它當作物件 球體,立方體等等。我們可以根據構成影象畫素值的數百萬個數字來考慮它。或者影象中所有邊緣的角度。或者考慮每個10x10畫素區域。相反,我們直觀地根據它們識別影象的物件和原因。嘗試回答以下問題 大球體剩下的棕色金屬物體剩下...
機器學習,深度學習,神經網路,深度神經網路
先來說一下這幾者之間的關係 人工智慧包含機器學習,機器學習包含深度學習 是其中比較重要的分支 深度學習源自於人工神經網路的研究,但是並不完全等於傳統神經網路。所以深度學習可以說是在傳統神經網路基礎上的公升級。神經網路一般有輸入層 隱藏層 輸出層,一般來說隱藏層大於2的神經網路就叫做深度神經網路,深度...