web-dev-qa-db-ja.com

単一のXGBoostデシジョンツリーをプロットする

https://machinelearningmastery.com/visualize-gradient-boosting-decision-trees-xgboost-python/ のメソッドを使用して、XGBoost決定木をプロットしています

from numpy import loadtxt
from xgboost import XGBClassifier
from xgboost import plot_tree
import matplotlib.pyplot as plt
# load data
dataset = loadtxt('pima-indians-diabetes.csv', delimiter=",")
# split data into X and y
X = dataset[:,0:8]
y = dataset[:,8]
# fit model no training data
model = XGBClassifier()
model.fit(X, y)
# plot single tree
plot_tree(model)
plt.show()

150個のフィーチャを取得したため、プロットはすべての分割ポイントで非常に小さく見えます。明確なポイントを描画する方法、ローカルの場所に保存する方法、またはこの「ツリー」を明確に示す他の方法/アイデアは非常に高く評価されます enter image description here

6
Leon

私は最近同じ問題を抱えていましたが、私が見つけた唯一の方法は、異なるフィギュアサイズを試すことです(大きなフィギュアではまだ青みがかったことがあります。たとえば、4番目のツリーをプロットするには、

fig, ax = plt.subplots(figsize=(30, 30))
xgb.plot_tree(model, num_trees=4, ax=ax)
plt.show()

保存するには、次のようにします

plt.savefig("temp.pdf")

また、各ツリーは2つのクラスを分離しているため、クラスと同じ数のツリーがあります。

3
Serk

Serkの答えに追加するために、表示する前に図のサイズを変更することもできます。

# ...
plot_tree(model)
fig = plt.gcf()
fig.set_size_inches(18.5, 10.5)
plt.show()
2

Githubで この回避策 を見つけました。これは、後に.pngファイルを開く必要があるという欠点を持つ、より良い画像を提供します。

xgb.plot_tree(bst, num_trees=2)
fig = matplotlib.pyplot.gcf()
fig.set_size_inches(150, 100)
fig.savefig('tree.png')
0
confused_zebra

代わりにto_graphvizメソッドを使用してみてください-私にとっては、より鮮明な画像が得られます。

xgb.to_graphviz(xg_reg、num_trees = 0、rankdir = 'LR')

ただし、ほとんどの場合、その出力のサイズに問題があります。

この場合、これに従ってください: デシジョンツリーのgraphviz表現のfigsizeをどのように指定できますか

0
morienor