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

问题描述 投票:0回答:1

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

上下文:我正在研究Kaggle-泰坦尼克号问题,在我的第一次尝试中,我想比较一些常见的模型。

代码:

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

非常感谢您的帮助!

scikit-learn data-science xgboost kaggle
1个回答
0
投票

这是正确的,这两种算法都是基于树的。但是,您会看到RandomForestClassifier中只有一棵树,因此在将集成用于梯度增强算法时实际上是DecisionTreeClassifier。可能会有不同的结果。

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

[添加2个其他数字特征(例如票价和年龄),您会看到树可以进一步找到其他规则,然后性能将发生变化。

© www.soinside.com 2019 - 2024. All rights reserved.