keras的回歸模型

2021-08-19 06:42:38 字數 2653 閱讀 5816

基於keras的神經網路回歸模型

import matplotlib.pyplot as plt

from math import sqrt

from matplotlib import pyplot

import pandas as pd

from numpy import concatenate

from sklearn.preprocessing import minmaxscaler

from sklearn.metrics import mean_squared_error

from keras.models import sequential

from keras.layers.core import dense, dropout, activation

from keras.optimizers import adam

'''keras實現神經網路回歸模型

'''# 讀取資料

path = 'data.csv'

train_df = pd.read_csv(path)

# 刪掉不用字串字段

dataset = train_df.drop('jh',axis=1)

# df轉array

values = dataset.values

# 原始資料標準化,為了加速收斂

scaler = minmaxscaler(feature_range=(0, 1))

scaled = scaler.fit_transform(values)

y = scaled[:, -1]

x = scaled[:, 0:-1]

# 隨機拆分訓練集與測試集

from sklearn.model_selection import train_test_split

train_x, test_x, train_y, test_y = train_test_split(x, y, test_size=0.25)

# 全連線神經網路

model = sequential()

input = x.shape[1]

# 隱藏層128

model.add(dense(128, input_shape=(input,)))

model.add(activation('relu'))

# dropout層用於防止過擬合

#model.add(dropout(0.2))

# 隱藏層128

model.add(dense(128))

model.add(activation('relu'))

#model.add(dropout(0.2))

# 沒有啟用函式用於輸出層,因為這是乙個回歸問題,我們希望直接**數值,而不需要採用啟用函式進行變換。

model.add(dense(1))

# 使用高效的 adam 優化演算法以及優化的最小均方誤差損失函式

model.compile(loss='mean_squared_error', optimizer=adam())

# early stoppping

from keras.callbacks import earlystopping

early_stopping = earlystopping(monitor='val_loss', patience=50, verbose=2)

# 訓練

history = model.fit(train_x, train_y, epochs=300, batch_size=20, validation_data=(test_x, test_y), verbose=2, shuffle=false, callbacks=[early_stopping])

# loss曲線

pyplot.plot(history.history['loss'], label='train')

pyplot.plot(history.history['val_loss'], label='test')

pyplot.legend()

pyplot.show()

# **

yhat = model.predict(test_x)

# **y逆標準化

inv_yhat0 = concatenate((test_x, yhat), axis=1)

inv_yhat1 = scaler.inverse_transform(inv_yhat0)

inv_yhat = inv_yhat1[:,-1]

# 原始y逆標準化

test_y = test_y.reshape((len(test_y), 1))

inv_y0 = concatenate((test_x,test_y), axis=1)

inv_y1 = scaler.inverse_transform(inv_y0)

inv_y = inv_y1[:,-1]

# 計算 rmse

rmse = sqrt(mean_squared_error(inv_y, inv_yhat))

print('test rmse: %.3f' % rmse)

plt.plot(inv_y)

plt.plot(inv_yhat)

plt.show()

keras評估模型

當建立好模型並且用來訓練之後,如何評估模型的好壞,準確度又如何呢?三種常用方法 1 使用自動驗證方法 在 fit 函式中增加乙個validation split引數,該引數用來進行驗證效果 該引數可以自由設定,一般設定為20 或者30 也就是測試集佔總資料集的20 或者30 的資料用來進行驗證,其餘...

keras載入模型

說明 該程式是乙個包含兩個隱藏層的神經網路。演示如何載入乙個儲存好的模型。資料集 mnist from future import print function python提供了 future 模組,把下乙個新版本的特性匯入到當前版本,於是我們就可以在當前版本中測試一些新版本的特性。import ...

keras評估模型

目錄 keras評估模型 自動評估 手動評估 手動分離資料集 利用交叉驗證 usr bin env python coding utf 8 author jia shilin 通過fit 函式分割引數,設定資料集百分比,from keras.models import sequential from...