以下のコードで決定木の境界線をプロットしようとしているのですが、なぜ等位線を描くときにmeshgrid
を行うのか、なぜX_newの定義の際にx1.ravel()としているのかが分かりません。
x1sを使っても一様境界線はプロットしてくれるのに何故なんでしょうか?
import matplotlib.pyplot as plt from matplotlib.colors import ListedColormap import numpy as np from sklearn import tree from sklearn.datasets import load_iris from sklearn.tree import DecisionTreeClassifier """6.1 決定木の訓練と可視化""" iris = load_iris() X = iris.data[:, 2:] y = iris.target tree_clf = DecisionTreeClassifier(max_depth=2) tree_clf.fit(X, y) #決定木の境界線をプロット def plot_decision_boundary(clf, X, y, axes = [0, 7.5, 0, 3], iris=True, legend=False, plot_training=True): #ここから分かりません x1s = np.linspace(axes[0], axes[1], 100) x2s = np.linspace(axes[2], axes[3], 100) x1, x2 = np.meshgrid(x1s, x2s) X_new = np.c_[x1.ravel(), x2.ravel()] y_pred = clf.predict(X_new).reshape(x1.shape) custom_cmap = ListedColormap(['#fafab0','#9898ff','#a0faa0']) plt.contourf(x1, x2, y_pred, cmap=custom_cmap, alpha=0.2) #ここまで if not iris: custom_cmap2 = ListedColormap(['#7d7d58','#4c4c7f','#507d50']) plt.contour(x1, x2, y_pred, cmap=custom_cmap2, alpha=0.8) if plot_training: plt.plot(X[:, 0][y==0], X[:, 1][y==0], 'yo', label='Iris setosa') plt.plot(X[:, 0][y==1], X[:, 1][y==1], 'bs', label='Iris versicolor') plt.plot(X[:, 0][y==2], X[:, 1][y==2], 'g^', label='Iris virginica') plt.axis(axes) if iris: plt.xlabel('Petal length', fontsize=18) plt.ylabel('Petal width', fontsize=18) else: plt.xlabel(r'$x_1$', fontsize=18) plt.ylabel(r'$x_2$', fontsize=18) if legend: plt.legend(fontsize=14) plt.figure(figsize=(8, 4)) plot_decision_boundary(tree_clf, X, y) plt.show()
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。