缩放数据后如何解释模型的指标

数据挖掘 机器学习 Python scikit-学习 公制
2022-03-06 22:06:13

我有一个从中scikit-learn训练的 GradientBoostingRegressor。之后,我显然想知道这个模型有多好。因此,在非缩放数据集上,我将只使用mean_squared_errorscikit 中的函数,它会输出一个有意义的值(关于数据集)。

现在,我使用 scikit 缩放(/转换)我的数据集中的目标QuantileTransformer(output_distribution='uniform')目标现在在 0 - 1 之间缩放。这在训练等期间很好。

训练模型后,我运行以下代码来获取一些指标:

test_pred = gb.predict(X_test)
mse_test = mean_squared_error(y_test, test_pred)
print("RMSE on Test:", np.sqrt(mse_test))
print("MSE on Test:", mse_test)

mae_test = mean_absolute_error(y_test, test_pred)
print("MAE on Test:", mae_test)

因为目标值是按比例缩放的,所以输出类似于:

RMSE on Test: 0.23563730007705744
MSE on Test: 0.05552493718760521
MAE on Test: 0.19235478752773819

我假设我可以通过将QuantileTransformer.inverse_transform函数应用于输出来获得“实际的”非缩放指标。

所以我得到了:

RMSE on Test: 2231.21330222
MSE on Test: 807.28588575
MAE on Test: 1888.23406628

这对我来说似乎不太正确通常,RMSE 会小于 MSE,但事实并非如此。如果您得到 (MSE) 值的 sqrt 低于 1。此外,MAE 应该可能小于 MSE。

我的问题是,您如何解释这些按比例缩放的指标值?inverse_transform 输出是否正确?如何获得指标的正确、非缩放值?

我很感激这方面的一些帮助。

谢谢。

编辑:这QuantileTransformer只是一个例子。这个问题也适用MinMaxScaler于一般的缩放器和其他缩放器。

2个回答

我在@Franziska W 的帮助下解决了这个问题。谢谢!

我目前对 y_test 和 y_pred 进行反向变换,然后计算指标如下:

# qt_y is a QuantileTransformer instance, gb is a GradientBoostingRegressor
y_pred = gb.predict(X_test)
inv_y_pred = qt_y.inverse_transform(y_pred.reshape(-1, 1))
inv_y_test = qt_y.inverse_transform(y_test.reshape(-1, 1))

mse_test = mean_squared_error(inv_y_test, inv_y_pred)
print("RMSE on Test:", np.sqrt(mse_test))
print("MSE on Test:", mse_test)

mae_test = mean_absolute_error(inv_y_test, inv_y_pred)
print("MAE on Test:", mae_test)

重新调整后的 MSE 和 RMSE 最后是否显得更大?它们是否应该等于应用逆变换之前的值?