gpt4 book ai didi

machine-learning - 如何解释 Keras 回归器中的 MSE

转载 作者:行者123 更新时间:2023-11-30 08:39:41 26 4
gpt4 key购买 nike

我正在尝试建立一个模型来预测房价。

我有一些功能 X(浴室数量等)和目标 Y(大约 300,000 美元到 800,000 美元)

在将 Y 拟合到模型之前,我使用 sklearn 的标准缩放器对 Y 进行标准化。

这是我的 Keras 模型:

def build_model():
model = Sequential()
model.add(Dense(36, input_dim=36, activation='relu'))
model.add(Dense(18, input_dim=36, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='mse', optimizer='sgd', metrics=['mae','mse'])
return model

我在尝试解释结果时遇到困难 - 0.617454319755 的 MSE 意味着什么?

我是否必须对这个数字进行逆变换,并对结果求平方根,得到 741.55 美元的错误率?

math.sqrt(sc.inverse_transform([mse]))

我很抱歉在刚开始时听起来很愚蠢!

最佳答案

I apologise for sounding silly as I am starting out!

不要;这是一个非常重要的微妙问题,在教程和介绍性阐述中通常(令人遗憾的是)被忽略。

不幸的是,它不像求逆变换 MSE 的平方根那么简单,但也没有那么复杂;本质上你要做的是:

  1. 将您的预测转换回原始数据的初始比例
  2. 获取这些逆变换预测与原始数据之间的 MSE
  3. 对结果求平方根

为了获得模型的性能指标,该指标在您的问题的业务背景下有意义(例如此处的美元)。

让我们看一个简单的玩具数据示例,省略模型本身(这与这里无关,实际上可以是任何回归模型 - 不仅仅是 Keras 模型):

from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error
import numpy as np

# toy data
X = np.array([[1,2], [3,4], [5,6], [7,8], [9,10]])
Y = np.array([3, 4, 5, 6, 7])

# feature scaling
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X)

# outcome scaling:
sc_Y = StandardScaler()
Y_train = sc_Y.fit_transform(Y.reshape(-1, 1))
Y_train
# array([[-1.41421356],
# [-0.70710678],
# [ 0. ],
# [ 0.70710678],
# [ 1.41421356]])

现在,假设我们使用缩放集 X_trainY_train 拟合 Keras 模型(此处未显示),并获得对训练集的预测:

prediction = model.predict(X_train) # scaled inputs here
print(prediction)
# [-1.4687586 -0.6596055 0.14954728 0.95870024 1.001172 ]

Keras 报告的 MSE 实际上是缩放后的 MSE,即:

MSE_scaled = mean_squared_error(Y_train, prediction)
MSE_scaled
# 0.052299712818541934

虽然我上面描述的 3 个步骤很简单:

MSE = mean_squared_error(Y, sc_Y.inverse_transform(prediction))  # first 2 steps, combined
MSE
# 0.10459946572909758
np.sqrt(MSE) # 3rd step
# 0.323418406602187

因此,在我们的例子中,如果我们的初始 Y 是美元,则相同单位(美元)的实际误差将为 0.32(美元)。

请注意,对缩放的 MSE 进行逆变换的简单方法将如何给出非常不同(且不正确)的结果:

np.sqrt(sc_Y.inverse_transform([MSE_scaled]))
# array([2.25254588])

关于machine-learning - 如何解释 Keras 回归器中的 MSE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48973140/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com