【问题标题】:KerasRegression Loss is too largeKeras Regression Loss 太大
【发布时间】:2020-12-13 03:40:22
【问题描述】:

大家,我是 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

【问题讨论】:

    标签: python keras deep-learning model data-science


    【解决方案1】:

    当您使用 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] 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-17
      • 2017-10-04
      • 1970-01-01
      • 1970-01-01
      • 2015-10-16
      • 2021-10-12
      • 2019-12-17
      相关资源
      最近更新 更多