Привет одноклассники, визуализация дерева решений, я думал, что метод, представленный ранее, был достаточно удивительным (Визуализация дерева решений потрясающая!), не ожидал найти более удивительного и более реалистичного в последнее время, особо нечего сказать, посмотрим сначала效果图↓
непосредственный绘制随机森林
не говоря уже о
Позвольте представить вам этот артефакт -pybaobabdt
Минималистское введение в
Установить ГрафВиз
pybaobabdt
В зависимости от GraphViz сначала загрузите установочный пакет
2. Дважды щелкните msi-файл и продолжайте выбирать «Далее» (путь установки по умолчанию — C:\Program Files (x86)\Graphviz2.38\). стартовое меню.
3. Настройте переменные среды: Компьютер→Свойства→Дополнительные параметры системы→Дополнительно→Переменные среды→Системные переменные→путь, добавьте путь к пути:
4. Проверка: в интерфейсе командной строки Windows введите точку -version, а затем нажмите Enter.Если отображается информация о версии, связанная с graphviz, как показано на рисунке ниже, установка и настройка выполнены успешно.
Установите pygraphviz и pybaobabdt
Если pygraphviz устанавливается напрямую через pip, велика вероятность того, что будет сообщено об ошибке.Рекомендуется скачать файл whl для локальной установки.
pybaobabdt простой, прямойpip install pybaobabdt
Просто
использование pybaobabdt
pybaobabdt
Он также смехотворно прост в использовании, всего одна основная команда.pybaobabdt.drawTree
, Ниже приведен пример кода официального документа, который рекомендуется запускать в jupyter-notebook.
import pybaobabdt
import pandas as pd
from scipy.io import arff
from sklearn.tree import DecisionTreeClassifier
from matplotlib.colors import LinearSegmentedColormap
from matplotlib.colors import ListedColormap
from colour import Color
import matplotlib.pyplot as plt
import numpy as np
data = arff.loadarff('vehicle.arff')
df = pd.DataFrame(data[0])
y = list(df['class'])
features = list(df.columns)
features.remove('class')
X = df.loc[:, features]
clf = DecisionTreeClassifier().fit(X, y)
ax = pybaobabdt.drawTree(clf, size=10, dpi=72, features=features, colormap='Spectral')
Что вы думаете об этой картине?
Разным цветам соответствуют разные категории (цели), а условия разделения отмечены на каждой вилке, поэтому логика разделения понятна с первого взгляда. Глубина дерева также аккуратно отражена.
Диаметр ветки не является украшением, а представляет собой количество (долю) образцов, чем больше образцов при таком условии деления, тем толще будет ствол.
Когда вы обнаружите, что самые нижние ветви слишком тонкие и хрупкие, следует ли учитывать риск переобучения, например необходимость корректировки минимального количества выборок?
Участок случайного леса
import pybaobabdt
import pandas as pd
from scipy.io import arff
import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestClassifier
data = arff.loadarff('vehicle.arff')
df = pd.DataFrame(data[0])
y = list(df['class'])
features = list(df.columns)
features.remove('class')
X = df.loc[:, features]
clf = RandomForestClassifier(n_estimators=20, n_jobs=-1, random_state=0)
clf.fit(X, y)
size = (15,15)
plt.rcParams['figure.figsize'] = size
fig = plt.figure(figsize=size, dpi=300)
for idx, tree in enumerate(clf.estimators_):
ax1 = fig.add_subplot(5, 4, idx+1)
pybaobabdt.drawTree(tree, model=clf, size=15, dpi=300, features=features, ax=ax1)
fig.savefig('random-forest.png', format='png', dpi=300, transparent=True)
Как им пользоваться, разве это не круто, иди и попробуй!
Если вы что-то получаете, можете ли вы посмотреть, добавить в закладки и переслать? спасибо~