Pythonで学ぶOpenCV③〜機械学習のk近傍法を使ってデータのクラス分けをしてみた〜

今回はOpenCVを使って機械学習の一つであるk近傍法を実装し、irisデータの分類を行ってみたいと思います。

目次

今回はOpenCVを使って機械学習の一つであるk近傍法を実装し、irisデータの分類を行ってみたいと思います。

以下のコードや説明はOpenCVのチュートリアルを参考にしました。
https://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_ml/py_knn/py_knn_index.html

1. k近傍法とは

2つのデータをプロットしたとき以下のようになったとします。

このとき、新しいデータ「緑」は赤と青、どちらに分類されるのでしょうか。

「ぱっと見、近くにたくさん赤があるから、緑も赤なんじゃないかな?」と思う方もいらっしゃると思います。これは近傍法と呼ばれる手法です。

k近傍法では、新しいデータの近くのk点をチェックし、多数決をするアルゴリズムです。
例えばk=5の場合、以下のような図が描けるので、この緑は赤と推定されます。

2. 今回用いるデータについて

今回のデータはランダムに発生させるデータです。大きさが0~100で大きさ2のベクトルを25個発生させることにします。それを任意にクラス分けをし、そのあと、新しいデータがどちらのクラスに入るのかチェックします。

散布図

3.プログラムについて

以下にその実行プログラムを示します。

プログラムの実行結果は以下のようになります。

25個発生させたデータ

100個発生させたデータ

今回はOpenCVを使って機械学習を実験しました。k近傍法のようなプログラムもOpenCVで実装できるのは面白いですね!

ところで、pythonではscikit-learnと呼ばれる、機械学習専用のライブラリがあります。これについてのプログラムもまた紹介したいと思います。