如何 plot_tree 用于流水线多输出分类器?

How to plot_tree for pipelined MultiOutput Classifier?

我想解释我的模型,了解为什么这个模型给我的标签是 1 或 0。 ,所以我想使用 xgboost 中的 plot_tree 函数。 我的问题是多标签分类问题; 我写了以下代码;

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30, shuffle=True, random_state=42)

model = MultiOutputClassifier(
        xgb.XGBClassifier(objective="binary:logistic",
                         colsample_bytree = 0.5,
                          gamma = 0.1
                         ))

#Define a pipeline
pipeline = Pipeline([("preprocessing", col_transformers), ("XGB", model)])

pipeline.fit(X_train, y_train)

predicted = pipeline.predict(X_test)

xgb.plot_tree(pipeline, num_trees=4)   

这段代码给我错误;

'Pipeline' object has no attribute 'get_dump'

如果我更改代码;

xgb.plot_tree(pipeline.named_steps["XGB"], num_trees=4)

'MultiOutputClassifier' object has no attribute 'get_dump'

我该如何解决这个问题?

您只能在 BoosterXGBModel 实例上使用 plot_tree 函数。您的第一种情况失败,因为您传递的是 Pipeline 对象,而第二种情况是您传递的是 MultiOutputClassifier 对象。

相反,您必须传递适合的 XGBClassifier 对象。但是,请注意 MultiOutputClassifier 的实际工作原理:

This strategy consists of fitting one classifier per target.

这意味着您将每个标签有一个拟合模型

您可以使用 MultiOutputClassifierestimators_ 属性访问它们。例如,您可以像这样检索第一个标签的模型:

xgb.plot_tree(pipeline.named_steps["XGB"].estimators_[0], num_trees=4)

如果需要全部,则必须遍历 estimators_ 属性返回的列表。