Я хочу найти расстояние выборок до границы решения обученного классификатора деревьев решений в scikit-learn . Все функции имеют числовое значение c, и пространство функций может быть любого размера.
У меня пока есть эта визуализация для примера 2D-случая, основанного на здесь :
import numpy as np
import matplotlib.pyplot as plt
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import make_moons
# Generate some example data
X, y = make_moons(noise=0.3, random_state=0)
# Train the classifier
clf = DecisionTreeClassifier(max_depth=2)
clf.fit(X, y)
# Plot
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.1), np.arange(y_min, y_max, 0.1))
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, alpha=0.4)
plt.scatter(X[:, 0], X[:, 1], c=y, s=20, edgecolor='k')
plt.xlabel('a'); plt.ylabel('b');
Я понимаю, что для некоторых других классификаторов, таких как SVM, это расстояние может быть математически рассчитано [ 1 , 2 , 3 ]. Правила, изученные после обучения деревьев решений, определяют границы и могут также быть полезны для алгоритмического расчета расстояний [ 4 , 5 , 6 ]:
# Plot the trained tree
from sklearn import tree
import graphviz
dot_data = tree.export_graphviz(clf, feature_names=['a', 'b'], class_names=['1', '2'], filled=True)
graph = graphviz.Source(dot_data)