2017-07-13 6 views
0

k-Nearest Neighborクラシファイアの決定境界を色付けするにはどうすればいいですか:enter image description here 3つのクラスのデータをスキャッタ(左の画像) 。Matplotlibのk-NNグラフの決定

画像ソース:http://cs231n.github.io/classification/

+0

私はこの[このスタックオーバーフローの問題]を読み取ることをお勧めします(https://stackoverflow.com/questions/31234621/を出力しますplot-decision-bound-of-how-to-how-ak-nearest-neighbor-classifier-f)を使用している。 良い一日を。 – theSOMguy

答えて

1

あなたは関数meshgridを行う必要がありDesicion境界をプロットします。これを行うにはnp.meshgridを使用できます。 np.meshgridには、XとYの最小値と最大値とメッシュステップサイズパラメータが必要です。最小値をxとyの最小値よりも少し小さくし、最大値を少し高くすることは時には賢明です。

xx, yy = np.meshgrid(np.arange(x_min, x_max, h), 
        np.arange(y_min, y_max, h)) 

あなたは、あなたの関数meshgridのでZ=clf.predict(np.c_[xx.ravel(), yy.ravel()])のようなあなたの分類器を養うには、あなたは、元の関数meshgrid Z = Z.reshape(xx.shape)と同じ形式であることを、この出力を再構築する必要があります。最後に、プロットを作成するときにはplt.pcolormesh(xx, yy, Z, cmap=cmap_light)と呼ぶ必要があります。これにより、プロット内でディシジョン境界が見えるようになります。

これを達成するための完全な例は、http://scikit-learn.org/stable/auto_examples/neighbors/plot_classification.html#sphx-glr-auto-examples-neighbors-plot-classification-pyです。これは、次の2つのグラフをもたらす

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib.colors import ListedColormap 
from sklearn import neighbors, datasets 

n_neighbors = 15 

# import some data to play with 
iris = datasets.load_iris() 
X = iris.data[:, :2] # we only take the first two features. We could 
         # avoid this ugly slicing by using a two-dim dataset 
y = iris.target 

h = .02 # step size in the mesh 

# Create color maps 
cmap_light = ListedColormap(['#FFAAAA', '#AAFFAA', '#AAAAFF']) 
cmap_bold = ListedColormap(['#FF0000', '#00FF00', '#0000FF']) 

for weights in ['uniform', 'distance']: 
    # we create an instance of Neighbours Classifier and fit the data. 
    clf = neighbors.KNeighborsClassifier(n_neighbors, weights=weights) 
    clf.fit(X, y) 

    # Plot the decision boundary. For that, we will assign a color to each 
    # point in the mesh [x_min, x_max]x[y_min, y_max]. 
    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, h), 
         np.arange(y_min, y_max, h)) 
    Z = clf.predict(np.c_[xx.ravel(), yy.ravel()]) 

    # Put the result into a color plot 
    Z = Z.reshape(xx.shape) 
    plt.figure() 
    plt.pcolormesh(xx, yy, Z, cmap=cmap_light) 

    # Plot also the training points 
    plt.scatter(X[:, 0], X[:, 1], c=y, cmap=cmap_bold) 
    plt.xlim(xx.min(), xx.max()) 
    plt.ylim(yy.min(), yy.max()) 
    plt.title("3-Class classification (k = %i, weights = '%s')" 
       % (n_neighbors, weights)) 

plt.show() 

enter image description here

enter image description here

関連する問題