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个额外的数值特征(例如票价和年龄),你会看到树可以进一步找到额外的规则,然后性能会发生变化。
问题:您能帮我理解为什么 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个额外的数值特征(例如票价和年龄),你会看到树可以进一步找到额外的规则,然后性能会发生变化。