在Keras中训练多重回归模型时出现非常大的损失值

我试图构建一个多重回归模型来预测房价,使用以下特征:

  [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万亿,每个epoch只能下降大约一百万,这使得训练变得非常缓慢。起初我尝试增加学习率,但效果不大。之后我进行了一些搜索,发现其他人使用了log-MSE损失函数,于是我尝试了这个方法,我的模型似乎工作得很好。(开始时损失值为140,经过400个epoch后下降到0.2)

我的问题是,当我在线性/多重回归问题中看到非常大的MSE值时,是否总是应该使用log-MSE?还是有其他方法可以尝试解决这个问题?

我猜测这个问题发生的原因是我预测变量和响应变量之间的尺度差异很大。X的值在0到1之间,而最高的Y值达到了800万。(我是否应该缩小我的Y值?然后在预测时再放大回来?)


回答:

很多人认为应该对所有数据进行缩放。如果你的y值高达800万,我建议进行缩放,是的,然后在获取预测结果时再进行反向缩放处理。

不要太担心你看到的具体loss数值。当然,40万亿确实高得离谱,这表明可能需要对网络架构或参数进行调整。主要关注点是验证损失是否实际在减少,以及网络是否真的在学习。如果如你所说,’经过400个epoch后下降到0.2’,那么听起来你走在正确的轨道上。

除了log-mse、mse和mae之外,还有许多其他用于回归问题的损失函数。可以看看这些。希望这对你有帮助!

Related Posts

在使用k近邻算法时,有没有办法获取被使用的“邻居”?

我想找到一种方法来确定在我的knn算法中实际使用了哪些…

Theano在Google Colab上无法启用GPU支持

我在尝试使用Theano库训练一个模型。由于我的电脑内…

准确性评分似乎有误

这里是代码: from sklearn.metrics…

Keras Functional API: “错误检查输入时:期望input_1具有4个维度,但得到形状为(X, Y)的数组”

我在尝试使用Keras的fit_generator来训…

如何使用sklearn.datasets.make_classification在指定范围内生成合成数据?

我想为分类问题创建合成数据。我使用了sklearn.d…

如何处理预测时不在训练集中的标签

已关闭。 此问题与编程或软件开发无关。目前不接受回答。…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注