在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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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