テストも兼ねた単発記事です!教師なし学習で有名なkmean法は自身で作成するのもよいですが画像処理モジュールであるopencvにも関数が用意されています。
お手軽に機械学習が体験できおすすめです。
kmean法とはクラスタリングに使われる教師なし学習のことで具体的に初めにデータを適当にクラスタリングし、それぞれのクラスタの重心に合わせて再クラスタし、最終的に重心が変動しなくなったらクラスタリング終了というものです。
kmeans: (data: Any, K: Any, bestLabels: Any, criteria: Any, attempts: Any, flags: int, centers: ... = ...)
data
は入力データのことで必ずnp.float32
型のデータであること、それぞれの特徴ベクトルが一列であることという決まりがあります。
K
は分類したいクラスタの数です。
criteria
は繰り返し処理の終了条件です。具体的に以下のフラグがあります。
cv2.TERM_CRITERIA_EPS
- 指定された精度に到達したら繰り返し計算を終了する.
cv2.TERM_CRITERIA_MAX_ITER
- 指定された繰り返し回数に到達したら繰り返し計算を終了する.
flags
は重心の初期値を決める方法を指定します.普通は二つのフラグ cv2.KMEANS_PP_CENTERS
と cv2.KMEANS_RANDOM_CENTERS
が使われます。
PPのほうは初期値自身の重心が偏らないようになっているので精度向上に期待できます
具体的なプログラムです。このページのヘッダになっている画像で画素のクラスタリング(代表色の抽出)をやってみたいと思います。
基本的にはcurl
で画像をダウンロードしてそれを読み込むようにしています。
matplotlibで日本語表示させるためjapanize-matplotlib
を使用しています。
簡単な組み合わせでクラスタリングできるので、メインカラーを自動的取得するなどいろいろな使い方ができます!