首页 > 解决方案 > KerasRegression Loss 太大

问题描述

大家,我是 Keras 的新手,深度学习和其他东西,我在这里遇到了一个问题,当我拟合模型时,损失太大了。丢失的结果可能至少不超过 100K,但超过 300.000K。我不知道问题出在哪里,这是我的模型和代码

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
import seaborn as sns
from keras.models import Sequential
from keras.layers import Dense,Dropout
from sklearn.model_selection import train_test_split,KFold,cross_val_score
from keras.wrappers.scikit_learn import KerasRegressor
from sklearn.preprocessing import MinMaxScaler
from sklearn.pipeline import Pipeline
from sklearn.metrics import mean_squared_error,mean_absolute_error,explained_variance_score

data = pd.read_excel('dataset_real.xlsx')
data_real = data.drop(["no","bulan","tahun","kota","kecamatan/wilayah","korban_hilang"],axis=1)
X = data_real.drop(["taksiran_kerugian"],axis=1)
y = data_real["taksiran_kerugian"]
minmax = MinMaxScaler()
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30, random_state=42)
X_train_scaled = minmax.fit_transform(X_train)
X_test_scaled = minmax.transform(X_test)

def model_kebakaran():
  model = Sequential()
  model.add(Dense(10,input_dim=10,activation="relu"))
  model.add(Dense(1))
  model.compile(loss="mean_absolute_error",optimizer="adam")
  return model

seed = 5
np.random.seed(5)
estimator = KerasRegressor(build_fn=model_kebakaran,nb_epoch=500,batch_size=5,verbose=0)
kfold = KFold(n_splits=10,random_state=seed)
result = cross_val_score(estimator,X_train_scaled,y_train.values,cv=kfold,n_jobs=1)

print("Results: %.2f (%.2f) MSE" % (result.mean(), result.std())) #Results: -308763363.20 (114215884.15) MSE

当我尝试预测一个值时,它应该是什么

y_test.iloc[50] #350000000

但这是预测

test = X_test.iloc[10].values
test = test.reshape(-1,10)
prediction = estimator.predict(X_test)
prediction[50] #7.092292

这是 X_train 这是 y_train

标签: pythonkerasdeep-learningmodeldata-science

解决方案


当您使用X_test数据进行预测时,您应该改用X_test_scaled数据,因为模型是在缩放数据上训练的。

如果您提供 X_test 样本作为 的输入predict,则您是在要求模型在以前从未出现过的输入范围内进行预测。

所以试试:

test = X_test_scaled.iloc[50].values
test = test.reshape(-1,10)
prediction = estimator.predict(test)
prediction[50] 

推荐阅读