- Notifications
You must be signed in to change notification settings - Fork 18.3k
/
Copy pathhelpers_05_08.py
83 lines (64 loc) · 2.79 KB
/
helpers_05_08.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
importnumpyasnp
importmatplotlib.pyplotasplt
fromsklearn.treeimportDecisionTreeClassifier
fromipywidgetsimportinteract
defvisualize_tree(estimator, X, y, boundaries=True,
xlim=None, ylim=None, ax=None):
ax=axorplt.gca()
# Plot the training points
ax.scatter(X[:, 0], X[:, 1], c=y, s=30, cmap='viridis',
clim=(y.min(), y.max()), zorder=3)
ax.axis('tight')
ax.axis('off')
ifxlimisNone:
xlim=ax.get_xlim()
ifylimisNone:
ylim=ax.get_ylim()
# fit the estimator
estimator.fit(X, y)
xx, yy=np.meshgrid(np.linspace(*xlim, num=200),
np.linspace(*ylim, num=200))
Z=estimator.predict(np.c_[xx.ravel(), yy.ravel()])
# Put the result into a color plot
n_classes=len(np.unique(y))
Z=Z.reshape(xx.shape)
contours=ax.contourf(xx, yy, Z, alpha=0.3,
levels=np.arange(n_classes+1) -0.5,
cmap='viridis', clim=(y.min(), y.max()),
zorder=1)
ax.set(xlim=xlim, ylim=ylim)
# Plot the decision boundaries
defplot_boundaries(i, xlim, ylim):
ifi>=0:
tree=estimator.tree_
iftree.feature[i] ==0:
ax.plot([tree.threshold[i], tree.threshold[i]], ylim, '-k', zorder=2)
plot_boundaries(tree.children_left[i],
[xlim[0], tree.threshold[i]], ylim)
plot_boundaries(tree.children_right[i],
[tree.threshold[i], xlim[1]], ylim)
eliftree.feature[i] ==1:
ax.plot(xlim, [tree.threshold[i], tree.threshold[i]], '-k', zorder=2)
plot_boundaries(tree.children_left[i], xlim,
[ylim[0], tree.threshold[i]])
plot_boundaries(tree.children_right[i], xlim,
[tree.threshold[i], ylim[1]])
ifboundaries:
plot_boundaries(0, xlim, ylim)
defplot_tree_interactive(X, y):
definteractive_tree(depth=5):
clf=DecisionTreeClassifier(max_depth=depth, random_state=0)
visualize_tree(clf, X, y)
returninteract(interactive_tree, depth=[1, 5])
defrandomized_tree_interactive(X, y):
N=int(0.75*X.shape[0])
xlim= (X[:, 0].min(), X[:, 0].max())
ylim= (X[:, 1].min(), X[:, 1].max())
deffit_randomized_tree(random_state=0):
clf=DecisionTreeClassifier(max_depth=15)
i=np.arange(len(y))
rng=np.random.RandomState(random_state)
rng.shuffle(i)
visualize_tree(clf, X[i[:N]], y[i[:N]], boundaries=False,
xlim=xlim, ylim=ylim)
interact(fit_randomized_tree, random_state=[0, 100]);