【发布时间】:2019-10-23 20:00:59
【问题描述】:
我试图建立一个多元回归模型来使用以下特征预测房价:
[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 只会下降大约 100 万,这使得训练变得非常缓慢。起初我尝试提高学习率,但并没有太大帮助。然后我做了一些搜索,发现其他人使用了 log-MSE 损失函数,所以我尝试了一下,我的模型似乎工作正常。 (从 140 损失开始,400 epoch 后下降到 0.2)
我的问题是,当我看到线性/多元回归问题的 MSE 值非常大时,我是否总是只使用 log-MSE?或者我可以做些什么来尝试解决这个问题?
关于为什么会出现这个问题的猜测是我的预测变量和响应变量之间的规模有很大不同。 X 介于 0-1 之间,而最高的 Y 达到 800 万。 (我想缩小我的Y 的规模吗?然后再扩大规模以进行预测?)
【问题讨论】:
-
你可能有过拟合,你可以绘制损失函数并检查它,但你可以报告 MSA 或 MAE 或 RMSE
-
我想我的问题是:如果我看到非常大的损失值并且它下降得太慢(或者只是损失函数通常不能很好地工作),我应该尝试不同的损失函数还是调整其他事情,例如缩放我的 Y、学习率等,并坚持使用相同的损失函数。还是两种选择都可行,只是找到有效的方法? (这方面有最佳实践吗?)我目前倾向于尝试其他损失函数,因为让它工作的工作似乎更少。
-
您可以尝试删除不在四分位数范围内的值。这有助于消除可能对模型学习产生负面影响的极端值。
标签: python machine-learning keras linear-regression loss-function