7.3 绘图API

  1. xgboost.plot_importance():绘制特征重要性

    1. xgboost.plot_importance(booster, ax=None, height=0.2, xlim=None, ylim=None,
    2. title='Feature importance', xlabel='F score', ylabel='Features',
    3. importance_type='weight', max_num_features=None, grid=True,
    4. show_values=True, **kwargs)

    参数:

    • booster: 一个Booster对象, 一个 XGBModel 对象,或者由Booster.get_fscore() 返回的字典

    • ax: 一个matplotlib Axes 对象。特征重要性将绘制在它上面。

      如果为None,则新建一个Axes

    • grid: 一个布尔值。如果为True,则开启axes grid

    • importance_type: 一个字符串,指定了特征重要性的类别。参考Booster.get_fscore()

    • max_num_features: 一个整数,指定展示的特征的最大数量。如果为None,则展示所有的特征

    • height: 一个浮点数,指定bar 的高度。它传递给ax.barh()

    • xlim: 一个元组,传递给 axes.xlim()

    • ylim: 一个元组,传递给 axes.ylim()

    • title: 一个字符串,设置Axes 的标题。默认为"Feature importance"。 如果为None,则没有标题

    • xlabel: 一个字符串,设置AxesX 轴标题。默认为"F score"。 如果为None,则X 轴没有标题

    • ylabel:一个字符串,设置AxesY 轴标题。默认为"Features"。 如果为None,则Y 轴没有标题

    • show_values: 一个布尔值。如果为True,则在绘图上展示具体的值。

    • kwargs: 关键字参数,用于传递给ax.barh()

    返回ax (一个matplotlib Axes 对象)

  2. xgboost.plot_tree(): 绘制指定的子树。

    1. xgboost.plot_tree(booster, fmap='', num_trees=0, rankdir='UT', ax=None, **kwargs)

    参数:

    • booster: 一个Booster对象, 一个 XGBModel 对象

    • fmap: 一个字符串,给出了feature map 文件的文件名

    • num_trees: 一个整数,制定了要绘制的子数的编号。默认为 0

    • rankdir: 一个字符串,它传递给graphvizgraph_attr

    • ax: 一个matplotlib Axes 对象。特征重要性将绘制在它上面。

      如果为None,则新建一个Axes

    • kwargs: 关键字参数,用于传递给graphvizgraph_attr

    返回ax (一个matplotlib Axes 对象)

  3. xgboost.tp_graphviz(): 转换指定的子树成一个graphviz 实例。

    IPython中,可以自动绘制graphviz 实例;否则你需要手动调用graphviz 对象的.render() 方法来绘制。

    1. xgboost.to_graphviz(booster, fmap='', num_trees=0, rankdir='UT', yes_color='#0000FF',
    2. no_color='#FF0000', **kwargs)

    参数:

    • yes_color: 一个字符串,给出了满足node condition 的边的颜色
    • no_color: 一个字符串,给出了不满足node condition 的边的颜色
    • 其它参数参考 xgboost.plot_tree()

    返回ax (一个matplotlib Axes 对象)

  4. 示例:

    1. class PlotTest:
    2. def __init__(self):
    3. df = pd.read_csv('./data/iris.csv')
    4. _feature_names = ['Sepal Length', 'Sepal Width', 'Petal Length', 'Petal Width']
    5. x = df[_feature_names]
    6. y = df['Class'].map(lambda x: _label_map[x])
    7. train_X, test_X, train_Y, test_Y = train_test_split(x, y,
    8. test_size=0.3, stratify=y, shuffle=True, random_state=1)
    9. self._train_matrix = xgt.DMatrix(data=train_X, label=train_Y,
    10. feature_names=_feature_names,
    11. feature_types=['float', 'float', 'float', 'float'])
    12. self._validate_matrix = xgt.DMatrix(data=test_X, label=test_Y,
    13. feature_names=_feature_names,
    14. feature_types=['float', 'float', 'float', 'float'])
    15. def plot_test(self):
    16. params = {
    17. 'booster': 'gbtree',
    18. 'eta': 0.01,
    19. 'max_depth': 5,
    20. 'tree_method': 'exact',
    21. 'objective': 'binary:logistic',
    22. 'eval_metric': ['logloss', 'error', 'auc']
    23. }
    24. eval_rst = {}
    25. booster = xgt.train(params, self._train_matrix,
    26. num_boost_round=20, evals=([(self._train_matrix, 'valid1'),
    27. (self._validate_matrix, 'valid2')]),
    28. early_stopping_rounds=5, evals_result=eval_rst, verbose_eval=True)
    29. xgt.plot_importance(booster)
    30. plt.show()

    xgb_importance