- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些训练管道大量使用 XGBoost 而不是 scikit-learn,只是因为 XGBoost 干净地处理空值的方式。
但是,我的任务是向非技术人员介绍机器学习,并且认为最好采用单树分类器的想法并讨论 XGBoost 通常该数据结构并“为其注入(inject)类固醇”。具体来说,我想绘制这个单树分类器来显示切点。
指定 n_estimators=1
是否大致等同于使用 scikit 的 DecisionTreeClassifier
?
最佳答案
import subprocess
import numpy as np
from xgboost import XGBClassifier, plot_tree
from sklearn.tree import DecisionTreeClassifier, export_graphviz
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn import metrics
import matplotlib.pyplot as plt
RANDOM_STATE = 100
params = {
'max_depth': 5,
'min_samples_leaf': 5,
'random_state': RANDOM_STATE
}
X, y = make_classification(
n_samples=1000000,
n_features=5,
random_state=RANDOM_STATE
)
Xtrain, Xtest, ytrain, ytest = train_test_split(X, y, random_state=RANDOM_STATE)
# __init__(self, max_depth=3, learning_rate=0.1,
# n_estimators=100, silent=True,
# objective='binary:logistic', booster='gbtree',
# n_jobs=1, nthread=None, gamma=0,
# min_child_weight=1, max_delta_step=0,
# subsample=1, colsample_bytree=1, colsample_bylevel=1,
# reg_alpha=0, reg_lambda=1, scale_pos_weight=1,
# base_score=0.5, random_state=0, seed=None, missing=None, **kwargs)
xgb_model = XGBClassifier(
n_estimators=1,
max_depth=3,
min_samples_leaf=5,
random_state=RANDOM_STATE
)
# __init__(self, criterion='gini',
# splitter='best', max_depth=None,
# min_samples_split=2, min_samples_leaf=1,
# min_weight_fraction_leaf=0.0, max_features=None,
# random_state=None, max_leaf_nodes=None,
# min_impurity_decrease=0.0, min_impurity_split=None,
# class_weight=None, presort=False)
sk_model = DecisionTreeClassifier(
max_depth=3,
min_samples_leaf=5,
random_state=RANDOM_STATE
)
xgb_model.fit(Xtrain, ytrain)
xgb_pred = xgb_model.predict(Xtest)
sk_model.fit(Xtrain, ytrain)
sk_pred = sk_model.predict(Xtest)
print(metrics.classification_report(ytest, xgb_pred))
print(metrics.classification_report(ytest, sk_pred))
plot_tree(xgb_model, rankdir='LR'); plt.show()
export_graphviz(sk_model, 'sk_model.dot'); subprocess.call('dot -Tpng sk_model.dot -o sk_model.png'.split())
一些性能指标(我知道,我没有完全校准分类器)...
>>> print(metrics.classification_report(ytest, xgb_pred))
precision recall f1-score support
0 0.86 0.82 0.84 125036
1 0.83 0.87 0.85 124964
micro avg 0.85 0.85 0.85 250000
macro avg 0.85 0.85 0.85 250000
weighted avg 0.85 0.85 0.85 250000
>>> print(metrics.classification_report(ytest, sk_pred))
precision recall f1-score support
0 0.86 0.82 0.84 125036
1 0.83 0.87 0.85 124964
micro avg 0.85 0.85 0.85 250000
macro avg 0.85 0.85 0.85 250000
weighted avg 0.85 0.85 0.85 250000
还有一些图片:
因此,除非有任何调查错误/过度概括,XGBClassifier
(并且,我认为回归器)带有一个估计器似乎与 scikit-learn 相同 DecisionTreeClassifier
具有相同的共享参数。
关于machine-learning - XGBoost - n_estimators = 1 等于单树分类器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53230138/
也许我错过了一些东西,我不明白,我需要你的帮助。 我正在使用这些线训练 xgb 模型 XGB = xgb.XGBClassifier(objective ='multi:softprob',
我遇到了错误,不知道如何解决。你能帮忙吗?完整代码可以在 https://github.com/kthouz/NYC_Green_Taxi/blob/master/NYC%20Green%20Taxi
我想使用具有 67 个特征和 3000 个样本的 RandomForestClassifier。设置“n_estimators=30”是否仅使用拟合过程中 67 个特征中的 30 个特征? Ran
我有一些训练管道大量使用 XGBoost 而不是 scikit-learn,只是因为 XGBoost 干净地处理空值的方式。 但是,我的任务是向非技术人员介绍机器学习,并且认为最好采用单树分类器的想法
我正在阅读有关使用 GridSearchCV 微调模型的文章,我遇到了如下所示的参数网格: param_grid = [ {'n_estimators': [3, 10, 30], 'max_feat
我正在尝试关注 this学习基于机器学习的预测的教程,但我有两个问题? 问题 1。如何在下面的代码中设置n_estimators,否则它将始终采用默认值。 from sklearn.cross_val
我是一名优秀的程序员,十分优秀!