我尝试了GBDT,既有Python的sklearn,也有Spark的本地独立MLlib实现,该实现具有二进制分类问题的默认设置。在这两种情况下,我保持了numIterations,loss函数相同。这些特征都是真实的、连续的。然而,MLLib实现中的AUC与sklearn相比有很大差距。这些是sklearn分类器的参数:
GradientBoostingClassifier(
init=None, learning_rate=0.001, loss='deviance',max_depth=8,
max_features=None, max_leaf_nodes=None, min_samples_leaf=1,
min_samples_split=2, min_weight_fraction_leaf=0.0,
n_estimators=100, random_state=None, subsample=1.0,
verbose=0, warm_start=False)
我想检查是否有办法在MLlib中计算和设置这些参数,或者MLlib是否也采用相同的设置(这是非常标准的)。
任何计算差异的指针都会有所帮助。
scikit-learn
和Spark MLlib之间的可自定义参数集和默认值都不同。特别是Spark中的默认学习读数为0.1,最大深度为3。
然而,更重要的是实现合理缩放所需的算法变化。可能最重要的是连续变量的装箱。因此,即使输入参数乍一看或多或少相同,也不太可能得到相同的结果。
另请参阅:Spark MLLib中的可扩展分布式决策树。