我创建了以下数据框:
import numpy as np
import pandas as pd
from pandas import Series
from pandas import DataFrame
from xgboost import XGBClassifier
from sklearn import preprocessing
import random
import matplotlib.pyplot as plt
from xgboost import plot_tree
A = [random.randrange(1, 100, 1) for i in range(100)]
B = [random.randrange(1, 100, 1) for i in range(100)]
C = [random.randrange(1, 100, 1) for i in range(100)]
D = [random.randrange(1, 100, 1) for i in range(100)]
Target = [random.randrange(0, 2, 1) for i in range(100)]
d = {'col1': A, 'col2': B,'col3': C, 'col4': D, 'Target': Target}
df = pd.DataFrame(data=d)
print(df)
看起来像这样:
col1 col2 col3 col4 Target
0 96 68 3 89 1
1 77 13 83 81 1
2 78 27 9 37 1
3 62 41 57 5 0
4 6 82 75 84 0
.. ... ... ... ... ...
95 43 77 30 35 0
96 21 27 90 45 1
97 48 55 87 5 0
98 80 30 55 34 0
99 66 30 38 91 1
在该数据框中,我有一组预测特征(col1
、col2
和)col3
和col4
一个二进制Target
(0,1)。
我训练一个 XGBoostClassifier 如下:
Y = df['Target']
col_list = ['col1','col2','col3','col4']
X = df[col_list]
model = XGBClassifier(max_depth=3)
model.fit(X, Y)
我绘制结果树如下:
fig, ax = plt.subplots(figsize=(30, 30))
plot_tree(model,ax=ax)
plt.show()
树看起来像这样:
一共有7片叶子。
我现在正在尝试在原始 Dataframe 中创建一个列,它告诉我每条记录属于哪个叶子。所以我想看到这样的东西:
col1 col2 col3 col4 Target Leaf
0 96 68 3 89 1 7
1 77 13 83 81 1 6
2 78 27 9 37 1 6
3 62 41 57 5 0 3
4 6 82 75 84 0 2
.. ... ... ... ... ... ...
95 43 77 30 35 0 4
96 21 27 90 45 1 5
97 48 55 87 5 0 6
98 80 30 55 34 0 4
99 66 30 38 91 1 1
我如何在熊猫中做到这一点?
我试过这段代码:
df = model.Booster.trees_to_dataframe()
但我收到以下错误:
AttributeError: 'XGBClassifier' object has no attribute 'Booster'
谁能帮帮我吗?