我正在尝试使用以下功能构建多元回归模型来预测房价:
[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
?然后再放大以进行预测?) 最佳答案
很多人相信扩展一切。如果您的y
达到800万,我会按比例缩放它,是的,然后等到您得到预测后再逆向缩放。
不必担心您看到的具体loss
数字。当然,40万亿美元有点荒谬,表明可能需要对网络体系结构或参数进行更改。主要关注的是验证损失是否实际上正在减少,以及网络实际上是否正在学习。如您所说,如果“经过400个纪元后降为0.2”,那么听起来您就在正确的轨道上。
除log-mse,mse和mae外,还有许多其他损失函数可用于回归问题。看看these。希望有帮助!
关于python - 在Keras中训练多元回归模型时损失值非常大,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56509108/