Python Keras深度神经网络给出不正确/常数回归线

Python Keras深度神经网络给出不正确/常数回归线,python,keras,regression,Python,Keras,Regression,我为2个回归模型创建了一个Keras深度神经网络,并用实际数据和测试数据的预测绘制了回归线。我得到了以下曲线图: 图1:测试数据的预测接近实际数据,但回归线不反映测试预测 图2:测试数据的预测反映了回归线,但预测是恒定的,与实际数据相差甚远 我使用相同的结构以相同的方式训练两个模型,但它们的行为不同,而且两个模型似乎都不正确。有什么问题吗 预测和绘图代码: X = df["X"] Y = df["Y"]

我为2个回归模型创建了一个Keras深度神经网络,并用实际数据和测试数据的预测绘制了回归线。我得到了以下曲线图:

图1:测试数据的预测接近实际数据,但回归线不反映测试预测

图2:测试数据的预测反映了回归线,但预测是恒定的,与实际数据相差甚远

我使用相同的结构以相同的方式训练两个模型,但它们的行为不同,而且两个模型似乎都不正确。有什么问题吗

预测和绘图代码:

        X = df["X"]
        Y = df["Y"]

        (train, test) = train_test_split(df, test_size=0.3, random_state=42)

        # scale Y
        maxY = train["Y"].max()
        trainY = train["Y"] / maxY
        testY = test["Y"] / maxY
    
        # scale X
        trainX = scalerx.fit_transform(train["X"].values.reshape(-1,1))
        testX = scalerx.fit_transform(test["X"].values.reshape(-1,1))

        model = Sequential()
        model.add(Dense(8, input_dim=dim, activation="relu"))
        model.add(Dense(6, activation="relu"))
        model.add(Dense(4, activation="relu"))
        model.add(Dense(1, activation="linear"))

        opt = Adam(learning_rate=1e-2, decay=1e-3/200)
        model.compile(loss="mean_absolute_percentage_error", optimizer=opt)

        model.fit(x=trainX, y=trainY, validation_data=(testX, testY), epochs=500, batch_size=4)

        # predict regression line
        x = np.arange(0, X.max() + 0.1 , 0.01)
        preds = model.predict(scalerx.fit_transform(x.reshape(-1, 1)))
        preds = preds * maxY
        
        # predict for test data
        pred_y = model.predict(testX)
        pred_y = pred_y * maxY

        plt.scatter(X, Y, label='data')
        plt.scatter(test["X"], pred_y, label='test data')
        plt.plot(x, preds, 'r', label='regression line')
        plt.xlabel('x')
        plt.ylabel('y')
        plt.legend()
        plt.show()

代码段不完整。缺少许多变量声明。如果您错误地使用了MinMaxScaler,则应将其与训练数据相匹配,然后将其与测试数据和新预测(如逆_变换)一起使用(不再匹配)。您多次拟合它,这意味着输入的比例完全错误。我修复了比例,它修复了图1,但图2仍然相同。为什么它预测所有X的Y值都是常数?