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