问题:您能帮助我理解为什么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
非常感谢您的帮助!
这是正确的,这两种算法都是基于树的。但是,您会看到RandomForestClassifier
中只有一棵树,因此在将集成用于梯度增强算法时实际上是DecisionTreeClassifier
。可能会有不同的结果。
因此,使性能相同的唯一因素实际上是您的数据。您只有2个功能,它们是分类功能。因此,使用这些数据,您将无法学习复杂的模型。所有树应相同。您可以检查树中的节点数(例如my_pipelines[0][-1].estimators_[0].tree_.node_count
;我只有11个)。
[添加2个其他数字特征(例如票价和年龄),您会看到树可以进一步找到其他规则,然后性能将发生变化。