用于训练随机森林回归器的对数转换目标变量

机器算法验证 回归 机器学习 随机森林
2022-04-14 05:08:37

我有一个要建模的变量,它具有偏态分布。对 var 进行对数转换是一个类似正态的分布。在未转换的 var 上训练随机森林回归器时,我得到的性能比对 var 进行对数转换时更差。我有点困惑是否应该这样做,因为我知道随机森林回归器正在预测叶子的平均值。如果在对数转换的 var 上进行训练,这意味着预测是叶子中值的对数的平均值。其中(转换回来时)不等于实际值的平均值。

有什么意见吗?

2个回答

我将假设“更好的性能”是指更好的 CV/验证性能,而不是训练一个。

我想请你想想对数转换目标变量对单个回归树的影响是什么

回归树以最小化 MSE 的方式进行拆分,这(考虑到我们预测均值)意味着它们最小化子节点中目标的方差之和。

如果你的目标有偏差会发生什么?
如果您的变量是倾斜的,高值将影响方差并将您的分割点推向更高的值 - 迫使您的决策树进行不太平衡的分割并尝试将尾部与其余点“隔离”。

非转换和转换数据的单个拆分示例:

因此,总体而言,如果您的数据没有被转换,您的树(等等 RF)将更多地受到高端值的影响——这意味着它们在预测高值时应该更准确,而对低值的预测要少一些.

如果您进行对数转换,您会降低这些高值的相对重要性,并接受对这些高值有更多错误,同时对大量数据更准确。这可能会更好地概括,并且 - 一般来说 - 也是有道理的。确实在同一个回归中,预测y^=105什么时候y=100比预测好y^=15什么时候y=11,因为相对误差通常比绝对误差更重要。

希望这很有用!

切向地,结果的边际分布(即绘制直方图时获得的分布)与回归无关,因为大多数回归方法都对条件分布做出假设(即绘制结果直方图时获得的分布是 I只观察具有相同特征的结果)。现在,关于你的问题。

如果您正在评估转换结果的性能,则结果可能会产生误导。因为对数本质上压缩了结果,所以方差也缩小了,这意味着预测将更接近观察结果。这减少了损失,并且似乎使您的模型更好。尝试这样做

from sklearn.dummy import DummyRegressor
from sklearn.model_selection import cross_val_score

cross_val_score(DummyRegressor(), X, y, scoring = 'neg_mean_squared_error')
cross_val_score(DummyRegressor(), X, np.log(y), scoring = 'neg_mean_squared_error')

相同的数据,但得分差异很大。为什么?因为对数缩小了结果的方差,使模型看起来更好,即使它没有什么不同。

如果你想改变你的结果,你可以:

  • 根据转换后的结果训练模型
  • 预测保留集
  • 将预测重新转换到原始空间
  • 评估原始空间中的预测质量

Sklearn 使用他们的TransformedTargetRegressor.

from sklearn.ensemble import RandomForestRegressor
from sklearn.compose import TransformedTargetRegressor
from sklearn.model_selection import GridSearchCV, train_test_split
from sklearn.pipeline import Pipeline
from sklearn.datasets import make_regression

import numpy as np

rf = RandomForestRegressor()
log_rf = TransformedTargetRegressor(rf, func = np.log, inverse_func=np.exp)


params = {'regressor__n_estimators': [10,100,1000]}


gscv = GridSearchCV(log_rf, param_grid=params,refit = True)

X,y = make_regression(n_samples = 10_000, n_features=50, n_informative=5)
y -= y.min()-1 #Make the outcome positive.

Xtrain, Xtest, ytrain, ytest = train_test_split(X,y, test_size = 0.25)

gscv.fit(Xtrain, ytrain)

这将确保模型在对数转换结果上进行训练,反向转换到原始空间,并评估原始空间中的损失。