Это решение моего бедняги, которое я сейчас использую в качестве остановки:
1. Я включил функцию идентификатора узла команды построения дерева решений, чтобы я вижу каждый идентификатор узла на моем графике:
from sklearn import tree
fig, axes = plt.subplots(nrows =1,ncols =1,figsize = (2,2), dpi=600)
tree.plot_tree(clf,
feature_names = x_pre,
filled = True,
class_names=True,
node_ids=True);
2. У меня есть 2 версии фрейма данных:
a) df3 - это очищенный фрейм данных с меньшим количеством столбцов, Я разделился на обучение и тестирование, а также на обучение модели. df3 не содержит столбца ID, так как он не нужен для обучения модели.
b) df - это мой исходный фрейм данных, который я импортировал как есть, который содержит столбец уникального идентификатора.
Сначала я удалил целевую переменную из df3 и применил свою модель поверх нее, чтобы получить node_ids для каждой строки моего фрейма данных.
df4=df3.drop(columns=['TargetVar'])
node_id=clf.apply(df4)
Затем я преобразовал свой node_id в фрейм данных и объединил его с моим исходным фреймом данных df, в котором было значение столбца ID.
node_id_2=pd.DataFrame(data=node_id)
node_id_2.rename(columns={0: 'node_id'}, inplace=True)
df_out = pd.merge(df,node_id_2,how = 'left',left_index = True, right_index = True)
import pandas as pd
import pandasql as ps
q2 = """SELECT count(distinct ID),node_id FROM df_out
group by node_id"""
x=ps.sqldf(q2, locals())
Символ x дает мне список уникальных значений идентификаторов в каждом листовом узле, и я просто вручную рисую их в файле изображения, содержащем график дерева решений, путем сопоставления идентификаторов узлов с помощью инструмента редактирования изображений.
Я до сих пор не получаю количество значений идентификаторов в каждом разбиении, а только уникальные значения идентификаторов, которые попадают в каждый листовой узел.