Python - RandomForestClassifier 和 XGBClassifier 的分数完全相同

Python - RandomForestClassifier and XGBClassifier have exact same score

问题:您能帮我理解为什么 RandomForestClassifier 和 XGBClassifier 的分数完全相同吗?

上下文:我正在研究 Kaggle - Titanic 问题,在我第一次尝试时,我想比较一些常见的模型。

代码:

pipeline = make_pipeline(SimpleImputer(strategy='most_frequent'), OneHotEncoder())
preprocessor = make_column_transformer(
    (pipeline, ['Embarked']),
    (OneHotEncoder(), ['Sex']),
    #(OrdinalEncoder(), ['Cabin'])
)

models = [
    RandomForestClassifier(n_estimators=1, random_state=42),
    XGBClassifier(random_state=42, n_estimators=100, max_depth=42),
    SGDClassifier()
]

my_pipelines = []
for model in models:
    my_pipelines.append(Pipeline(steps=[('preprocessor', preprocessor),
                              ('model', model)
                             ]))

for idx, pipeline in enumerate(my_pipelines):
    pipeline.fit(X_train, y_train)
    pred = pipeline.predict(X_valid)
    print(accuracy_score(y_valid, pred))

输出:

0.770949720670391
0.770949720670391
0.6312849162011173

非常感谢您的帮助!

这两种算法都是基于树的。但是,您可以看到 RandomForestClassifier 中只有一棵树,因此在对梯度提升算法使用集成时,您实际上是 DecisionTreeClassifier。人们可以期待不同的结果。

因此,唯一使性能相等的实际上是您的数据。您只有 2 个特征,而且是分类特征。因此,使用这些数据,您无法学习复杂的模型。所有的树都应该是相同的。您可以检查树中的节点数(例如 my_pipelines[0][-1].estimators_[0].tree_.node_count;我只有 11 个)。

添加2个额外的数值特征(例如票价和年龄),你会看到树可以进一步找到额外的规则,然后性能会发生变化。