Keras MLP 進(jìn)行回歸預(yù)測(cè)

2023-05-29 16:08 更新

在本章中,讓我們編寫一個(gè)簡(jiǎn)單的基于 MLP 的 ANN 來進(jìn)行回歸預(yù)測(cè)。到目前為止,我們只做了基于分類的預(yù)測(cè)。現(xiàn)在,我們將嘗試通過分析先前(連續(xù))值及其影響因素來預(yù)測(cè)下一個(gè)可能值。

回歸 MLP 可以表示如下:

回歸MLP

該模型的核心特征如下:

  1. 輸入層由 (13,) 個(gè)值組成。
  2. 第一層,Dense由 64 個(gè)單元和帶有“普通”內(nèi)核初始化程序的“relu”激活函數(shù)組成。
  3. 第二層,Dense由 64 個(gè)單元和“relu”激活函數(shù)組成。
  4. 輸出層,Dense由 1 個(gè)單元組成。
  5. 使用 mse 作為損失函數(shù)。
  6. 使用 RMSprop 作為優(yōu)化器。
  7. 使用 accracy 作為指標(biāo)。
  8. 使用 128 作為批量大小。
  9. 使用 500 作為紀(jì)元。

第 1 步 - 導(dǎo)入模塊

導(dǎo)入必要的模塊。

import keras 


from keras.datasets import boston_housing 
from keras.models import Sequential 
from keras.layers import Dense 
from keras.optimizers import RMSprop 
from keras.callbacks import EarlyStopping 
from sklearn import preprocessing 
from sklearn.preprocessing import scale

第 2 步 - 加載數(shù)據(jù)

導(dǎo)入波士頓住房數(shù)據(jù)集。

(x_train, y_train), (x_test, y_test) = boston_housing.load_data()
  • boston_housing是Keras提供的數(shù)據(jù)集。它代表波士頓地區(qū)住房信息的集合,每個(gè)信息有 13 個(gè)特征。

第 3 步 - 處理數(shù)據(jù)

根據(jù)我們的模型更改數(shù)據(jù)集,以便我們可以輸入我們的模型。可以使用以下代碼更改數(shù)據(jù):

x_train_scaled = preprocessing.scale(x_train) 
scaler = preprocessing.StandardScaler().fit(x_train) 
x_test_scaled = scaler.transform(x_test)

這里,我們使用 sklearn.preprocessing.scale 函數(shù)對(duì)訓(xùn)練數(shù)據(jù)進(jìn)行了標(biāo)準(zhǔn)化preprocessing.StandardScaler().fit函數(shù)返回一個(gè)標(biāo)量,其中包含訓(xùn)練數(shù)據(jù)的歸一化均值和標(biāo)準(zhǔn)差,我們可以使用 scalar.transform 函數(shù)將其應(yīng)用于測(cè)試數(shù)據(jù)。這將使用與訓(xùn)練數(shù)據(jù)相同的設(shè)置對(duì)測(cè)試數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化。

第 4 步 - 創(chuàng)建模型

創(chuàng)建實(shí)際模型。

model = Sequential() 
model.add(Dense(64, kernel_initializer = 'normal', activation = 'relu',
input_shape = (13,))) 
model.add(Dense(64, activation = 'relu')) model.add(Dense(1))

第 5 步 - 編譯模型

使用選定的損失函數(shù)、優(yōu)化器和指標(biāo)來編譯模型。

model.compile(
   loss = 'mse', 
   optimizer = RMSprop(), 
   metrics = ['mean_absolute_error']
)

第 6 步 - 訓(xùn)練模型

使用fit()方法訓(xùn)練模型。

history = model.fit(
   x_train_scaled, y_train,    
   batch_size=128, 
   epochs = 500, 
   verbose = 1, 
   validation_split = 0.2, 
   callbacks = [EarlyStopping(monitor = 'val_loss', patience = 20)]
)

在這里,我們使用了回調(diào)函數(shù) EarlyStopping。此回調(diào)的目的是監(jiān)控每個(gè) epoch 期間的損失值,并將其與之前的 epoch 損失值進(jìn)行比較,以找到訓(xùn)練中的改進(jìn)。如果耐心時(shí)間沒有改善,那么整個(gè)過程將停止。

執(zhí)行應(yīng)用程序?qū)⑻峁┮韵滦畔⒆鳛檩敵?

Train on 323 samples, validate on 81 samples Epoch 1/500 2019-09-24 01:07:03.889046: I 
tensorflow/core/platform/cpu_feature_guard.cc:142] 
Your CPU supports instructions that this 
TensorFlow binary was not co mpiled to use: AVX2 323/323 
[==============================] - 0s 515us/step - loss: 562.3129 
- mean_absolute_error: 21.8575 - val_loss: 621.6523 - val_mean_absolute_erro 
r: 23.1730 Epoch 2/500 
323/323 [==============================] - 0s 11us/step - loss: 545.1666 
- mean_absolute_error: 21.4887 - val_loss: 605.1341 - val_mean_absolute_error 
: 22.8293 Epoch 3/500 
323/323 [==============================] - 0s 12us/step - loss: 528.9944 
- mean_absolute_error: 21.1328 - val_loss: 588.6594 - val_mean_absolute_error 
: 22.4799 Epoch 4/500 
323/323 [==============================] - 0s 12us/step - loss: 512.2739 
- mean_absolute_error: 20.7658 - val_loss: 570.3772 - val_mean_absolute_error 
: 22.0853 Epoch 5/500
323/323 [==============================] - 0s 9us/step - loss: 493.9775 
- mean_absolute_error: 20.3506 - val_loss: 550.9548 - val_mean_absolute_error: 21.6547 
.......... 
.......... 
.......... 
Epoch 143/500 
323/323 [==============================] - 0s 15us/step - loss: 8.1004 
- mean_absolute_error: 2.0002 - val_loss: 14.6286 - val_mean_absolute_error: 
2. 5904 Epoch 144/500 
323/323 [==============================] - 0s 19us/step - loss: 8.0300 
- mean_absolute_error: 1.9683 - val_loss: 14.5949 - val_mean_absolute_error: 
2. 5843 Epoch 145/500 
323/323 [==============================] - 0s 12us/step - loss: 7.8704 
- mean_absolute_error: 1.9313 - val_loss: 14.3770 - val_mean_absolute_error: 2. 4996

第 7 步 - 評(píng)估模型

使用測(cè)試數(shù)據(jù)評(píng)估模型。

score = model.evaluate(x_test_scaled, y_test, verbose = 0) 
print('Test loss:', score[0]) 
print('Test accuracy:', score[1])

執(zhí)行上述代碼將輸出以下信息 -

Test loss: 21.928471583946077 Test accuracy: 2.9599233234629914

第 8 步 - 預(yù)測(cè)

最后,使用測(cè)試數(shù)據(jù)預(yù)測(cè)如下 -

prediction = model.predict(x_test_scaled) 
print(prediction.flatten()) 
print(y_test)

上述應(yīng)用程序的輸出如下 -

[ 7.5612316 17.583357 21.09344 31.859276 25.055613 18.673872 26.600405 22.403967 19.060272 22.264952 
17.4191 17.00466 15.58924 41.624374 20.220217 18.985565 26.419338 19.837091 19.946192 36.43445 
12.278508 16.330965 20.701359 14.345301 21.741161 25.050423 31.046402 27.738455 9.959419 20.93039 
20.069063 14.518344 33.20235 24.735163 18.7274 9.148898 15.781284 18.556862 18.692865 26.045074 
27.954073 28.106823 15.272034 40.879818 29.33896 23.714525 26.427515 16.483374 22.518442 22.425386 
33.94826 18.831465 13.2501955 15.537227 34.639984 27.468002 13.474407 48.134598 34.39617 
22.8503124.042334 17.747198 14.7837715 18.187277 23.655672 22.364983 13.858193 22.710032 14.371148 
7.1272087 35.960033 28.247292 25.3014 14.477208 25.306196 17.891165 20.193708 23.585173 34.690193 
12.200583 20.102983 38.45882 14.741723 14.408362 17.67158 18.418497 21.151712 21.157492 22.693687 
29.809034 19.366991 20.072294 25.880817 40.814568 34.64087 19.43741 36.2591 50.73806 26.968863 43.91787 
32.54908 20.248306 ] [ 7.2 18.8 19. 27. 22.2 24.5 31.2 22.9 20.5 23.2 18.6 14.5 17.8 50. 20.8 24.3 24.2 
19.8 19.1 22.7 12. 10.2 20. 18.5 20.9 23. 27.5 30.1 9.5 22. 21.2 14.1 33.1 23.4 20.1 7.4 15.4 23.8 20.1 
24.5 33. 28.4 14.1 46.7 32.5 29.6 28.4 19.8 20.2 25. 35.4 20.3 9.7 14.5 34.9 26.6 7.2 50. 32.4 21.6 29.8 
13.1 27.5 21.2 23.1 21.9 13. 23.2 8.1 5.6 21.7 29.6 19.6 7. 26.4 18.9 20.9 28.1 35.4 10.2 24.3 43.1 17.6 
15.4 16.2 27.1 21.4 21.5 22.4 25. 16.6 18.6 22. 42.8 35.1 21.5 36. 21.9 24.1 50. 26.7 25. ]

兩個(gè)數(shù)組的輸出有大約 10-30% 的差異,這表明我們的模型預(yù)測(cè)范圍合理。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)