我读过的关于随机森林的所有内容都表明它们不需要对输入进行缩放,并且缩放不应影响模型的构建。这是另一个 SE 问题的引述(https://stats.stackexchange.com/questions/255765/does-random-forest-need-input-variables-to-be-scaled-or-centered):
随机森林基于树分区算法。
因此,没有类似于在一般回归策略中获得的系数,这将取决于自变量的单位。取而代之的是,获得一组分区规则,基本上是给定阈值的决定,这不应该随着缩放而改变。换句话说,树只看到特征中的等级。
基本上,数据的任何单调变换都不应该改变森林(在最常见的实现中)。
这是我目前正在使用的。如果我删除权重乘数,我会得到一个不同的模型(即不同的值model.score和不同的树深度),尽管random_state=0在这两种情况下都进行了设置。
model = RandomForestRegressor(n_estimators=10, criterion='mse', random_state=0)
weights = np.arange(1,self.x_train.shape[1]+1)[None,:]
# weights = [[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.]]
model.fit(self.x_train * weights, self.y_train)
相比之下,我注意到如果我使用XGBRegressor而不是RandomForestRegressor,缩放不会改变模型。
我犯了一个明显的错误还是上面的解释不正确?