问:你能帮我理解为什么RandomForestClassifier和XGBClassifier的分数完全相同吗?
背景:我正在研究卡格尔-泰坦尼克号的问题,在我的第一次尝试中,我想比较一些常见的模型。
代码:
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非常感谢您的帮助!
发布于 2019-12-16 15:58:00
这是事实,这两种算法都是基于树的。但是,您可以看到在RandomForestClassifier中只有一棵树,所以在使用梯度增强算法时,您实际上是一个DecisionTreeClassifier。人们可以期望得到不同的结果。
因此,使性能相等的唯一东西实际上是您的数据。你只有两个特征,而且是分类特征。因此,使用这些数据,您无法学习复杂的模型。所有的树都应该是一样的。您可以检查树中的节点数(例如,my_pipelines[0][-1].estimators_[0].tree_.node_count;我只有11个节点)。
添加两个额外的数字特征(例如票价和年龄),您将看到树可以进一步找到更多的规则,然后性能将发生变化。
https://stackoverflow.com/questions/59355590
复制相似问题