【问题标题】:Model Suggestion for Keras RegressionKeras回归的模型建议
【发布时间】:2018-08-10 20:37:19
【问题描述】:

我正在尝试使用 Keras 解决回归问题,但 MSE 很大,我的意思是像 29346217.6819

我真的很新,所以你有什么建议可以让模型给出合理的mse吗?我什至不确定我的数据是否正常或有问题,但这些是实际的销售数据。

数据(大约 3000 行。我使用 2000 用于训练,1000 用于测试) 完整数据为here

ProductNo,Day,Month,CartonSales
1,6,02,2374
1,3,02,2374
1,6,04,2374
1,6,04,2374
1,3,06,2374
1,6,09,2374
1,1,09,2374
1,6,09,2374
1,6,10,2374

代码

from keras import optimizers
from keras.callbacks import Callback
from numpy import array
from keras.models import Sequential
from keras.layers import Dense, Dropout
from matplotlib import pyplot
import pandas as pds
# prepare sequence


class TestCallback(Callback):
    def __init__(self, test_data):
        self.test_data = test_data

    def on_epoch_end(self, epoch, logs={}):
        x, y = self.test_data
        loss, acc = self.model.evaluate(x, y, verbose=0)
        print('\nTesting loss: {}, acc: {}\n'.format(loss, acc))

dataframe = pds.read_csv('pmidata.csv', usecols=[0, 1, 2, 3])
dataframe = dataframe.sample(frac=1)

dataframeX_train = dataframe.iloc[0:2000][['ProductNo', 'Day', 'Month']]
dataframeY_train = dataframe.iloc[0:2000][['CartonSales']]

dataframeX_test = dataframe.iloc[2001:3001][['ProductNo', 'Day', 'Month']]
dataframeY_test = dataframe.iloc[2001:3001][['CartonSales']]

# create model
model = Sequential()
model.add(Dense(3, input_dim=3, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(1))
model.compile(loss='mse', optimizer='adam', metrics=['mse'])
#sgd = optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
#model.compile(loss='mse', optimizer=sgd, metrics=['mse'])
# train model
#history = model.fit(dataframe, dataframe, epochs=500, batch_size=len(X), verbose=2)
history = model.fit(dataframeX_train, dataframeY_train, epochs=100, batch_size=4, verbose=2, callbacks=[TestCallback((dataframeX_test, dataframeY_test))])
# plot metrics
pyplot.plot(history.history['mean_squared_error'])
pyplot.show()

【问题讨论】:

    标签: python machine-learning neural-network keras regression


    【解决方案1】:

    据我从您上面的代码中可以看出,您的 y 值是 CartonSales。销售可以有很大的价值和很大的范围,这可能就是你得到如此高错误的原因。您可以使用 mean_squared_logarithmic_error 而不是均方误差,但我建议您执行以下操作。

    继续使用均方误差。 log 转换你的 y 值,然后 exp 转换你的预测

    import numpy as np
    dataframeY_train = np.log(dataframeY_train)
    dataframeY_test = np.log(dataframeY_test )
    ....
    predictions=model.predict(dataframeX_test)[:,0]
    predictions = np.exp(predictions)
    

    【讨论】:

    • 谢谢您,日志就像魔术一样工作!我的 mse 现在是 0.4,但测试损失:0.44639948797225953,acc:0.44639948797225953 精度仍然太低。你认为我正确地测试了我的表现吗?
    • 我建议将神经元的数量从 3 个增加到 100 个以上,例如 model.add(Dense(100, input_dim=3, activation='relu')),具体取决于您的硬件能力跨度>
    • 再次感谢您,我根据您的建议更改了代码。现在结果是测试损失:0.47014914894104004,acc:0.47014914894104004 0.47 acc 是否意味着 %47?
    • 准确率在分类问题中是有意义的,这是一个回归问题,你要注意你的mse
    • 那么先生,我该如何手动测试我的模态?我的意思是提供硬编码数据并获得预测值。再次感谢您的帮助
    猜你喜欢
    • 2018-08-06
    • 1970-01-01
    • 2019-04-08
    • 2022-07-08
    • 2018-12-14
    • 2017-06-04
    • 2022-01-12
    • 2020-12-30
    • 1970-01-01
    相关资源
    最近更新 更多