我正在尝试将Azure Boosted Decision Tree Regression与scikit-learn GradientBoostingRegressor进行比较。这样做的目的是scikit-learn中的选项对于调整超量计等事情要好得多。例如,请参阅此tutorial.我将在Azure中构建我的生产版本,因为API处理非常好。
我认为这应该与GradientBoostingRegressor
中的设置相对应'max_leaf_nodes': 175,
'min_samples_leaf': 5,
'learning_rate': 0.1,
'n_estimators': 1500,
我也设置了
'loss': 'ls'
因为我非常确定Azure使用最小二乘法。无论如何,我的输出略有不同。我使用Root Mean Squared Error作为我的评估指标。
Azure Test RMSE: 2222
scikit-learn Test RMSE: 2446
这可能不是什么问题,但我的训练错误存在较大差异。
Azure Train RMSE: 1684
scikit-learn Train RMSE: 2422
我不知道Azure使用什么功能来衡量分割的质量。在scikit-learn中,我尝试了标准均方误差和弗里德曼改进的误差。我得到了类似的答案。
另一个未知数是Azure中分类功能的处理。在scikit-learn中,我使用factorize()来实现Ordinal编码以及get_dummies()用于一个热编码。两种方法都给出了比Azure更接近彼此的结果。 Azure可能会使用" ="在一列中本地处理分类。决定而不是">"用于数值。我对该算法的理解是,如果Ordinal和One-Hot编码都得到类似的答案,那么这也会产生类似的结果。
我希望能够深入了解这些算法之间可能存在的差异。我知道XGBOOST有一些differences与损失函数和拆分方法有关。