機械学習に入門しています。
今回は、前回までに実装したPerceptronの性能を確認していきます。
性能検証
Perceptronの性能を確認するために、どの値に対してPerceptronがIris-setosaかIris-versicolorのどちらとして判定するかを確かめていきます。
まず最初に、作成したグラフを見てみます。
この赤い丸と青いバツは、下記の記事で表示したのと同じものです。
上記の記事と同様に、図の意味は下記の通りです。
- x軸: がくの長さ
- y軸: 花弁の長さ
- 赤点: Iris-setosa
- 青バツ: Iris-versicolor
x軸とy軸の範囲は、それぞれトレーニングデータの最小値-1、最大値+1です。
今回新たに表示されているのは、赤と青色の背景色です。
これは、図内の一点一点について、それがIris-setosaかIris-versicolorのどちらに判定されるかを示しています。
トレーニングデータはもちろんそれに近い値についても、正しく判定されていそうなことがわかります。
十分な性能のPerceptronができていそうですね。
ソースコードは以下です。
""" グラフ表示関数 """ from matplotlib.colors import ListedColormap def plot_decision_regions(X, y, classifier, resolution=0.02): markers = ('o', 'x') colors = ('red', 'blue') cmap = ListedColormap(colors[:len(np.unique(y))]) print(cmap) x1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max() + 1 x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() + 1 xx1, xx2 = np.meshgrid( np.arange(x1_min, x1_max, resolution), np.arange(x2_min, x2_max, resolution) ) Z = classifier.predict( np.array([ xx1.ravel(), xx2.ravel(), ]).T ) Z = Z.reshape(xx1.shape) plt.contourf(xx1, xx2, Z, alpha=0.4, cmap=cmap) plt.xlim(xx1.min(), xx1.max()) plt.ylim(xx2.min(), xx2.max()) for idx, cl in enumerate(np.unique(y)): plt.scatter( x=X[y == cl, 0], y=X[y == cl, 1], alpha=0.8,c=cmap(idx), marker=markers[idx], label=cl ) """ 処理結果のグラフ表示 赤背景のデータだとsetosa、青背景のデータだとversicolorとして分類される """ plot_decision_regions(X, y, classifier=ppn) plt.xlabel('sepal length [cm]') plt.ylabel('petap length [cm]') plt.legend(loc='upper left') plt.show()
ソースコード
これまでのソースコードです。
https://github.com/nek0meshi/data-science-learn/blob/master/PerceptronLearn.ipynb
まとめ
数回に渡り、Perceptronの実装や解説をしてみました。
短いコードで機械学習が実現できてしまうのは驚きでしたし、面白かったです。