在Keras中训练多元回归模型时,损耗值非常大

时间:2019-06-08 18:26:12

标签: python machine-learning keras linear-regression loss-function

我正在尝试使用以下功能构建多元回归模型来预测房价:

  [bedrooms  bathrooms  sqft_living  view  grade]
= [0.09375   0.266667     0.149582   0.0    0.6]

我已经使用sklearn.preprocessing.MinMaxScaler对功能进行了标准化和缩放。

我使用Keras构建模型:

def build_model(X_train):
    model = Sequential()
    model.add(Dense(5, activation = 'relu', input_shape = X_train.shape[1:]))
        model.add(Dense(1))

    optimizer = Adam(lr = 0.001)

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

    return model

当我去训练模型时,我的损失值非常高,大约是4或40万亿美元,并且每次下降只会减少大约一百万,这使得训练变得太慢了。最初,我尝试提高学习率,但是并没有太大帮助。然后,我进行了一些搜索,发现其他人使用了log-MSE损失函数,因此我尝试了一下,并且我的模型似乎运行良好。 (从140损失开始,到400个时期后下降到0.2)

我的问题是,当我看到线性/多重回归问题的MSE值非常大时,我是否总是只使用log-MSE?还是我可以采取其他措施来解决此问题?

关于此问题发生原因的一个猜测是,我的预测变量和响应变量之间的比例差异很大。 X介于0-1之间,而最高的Y则高达800万。 (我是否想缩小Y的大小?然后再放大以进行预测?)

1 个答案:

答案 0 :(得分:1)

许多人相信扩展一切。如果您的y达到了800万,我会按比例缩放它,是的,然后等到您得到预测后再逆向缩放。

不必太担心您看到的loss号。当然,40万亿美元有点荒谬,表明可能需要对网络体系结构或参数进行更改。主要关注的是验证损失是否实际上正在减少,以及网络是否正在实际学习中。如您所说,如果它“在400个纪元后下降到0.2”,那么听起来您就在正确的轨道上。

除了log-mse,mse和mae,还有许多其他损失函数可用于回归问题。看看these。希望有帮助!