LogoMark.png

k-means のバックアップソース(No.1)

#author("2020-07-11T15:58:54+09:00;2020-07-08T12:50:24+09:00","default:inoue.ko","inoue.ko")
*k-means法
k-means Clustering
~

***概要(教師なし|クラスタリング)
k-means法は、クラスタリング(教師なし学習)の代表的な手法のひとつで、サンプルをグループ分けする目的で使用します。

クラスターというのは「房」「集団」「群れ」のことで、類似したデータが集まっている様子を意味します。説明変数の数が多くなると、人間の目では直感的な分類ができませんが、例えば全体を3つに分類できるという前提で、多次元軸上でのグループの重心を仮定して、データ間の距離を測ると、それぞれの距離(ズレ)を最も小さくするような重心とデータセットを見出すことができます。対象を分けるという点では上記の分類と似ていますが、クラスタリングの場合は、いくつに分類するかを分析者が事前に決定するのみで、事前に目的変数を定義することはありません。3つに分けてみたら、それぞれこんなタイプのかたまりがあることがわかりました・・といった作業になります。
-[[GoogleImage:k-means法 重心]]

k-means法の k はクラスターの個数を意味するもので、この手法では、分類するクラスターの数を事前に決めて、クラスター内では分散が小さく、クラスター間では分散が大きくなるように各データをクラスターに振り分けていきます。

以下のような手順で、計算処理を繰り返し、結果が収束した時点で、処理をストップします。ひたすら計算を繰り返す・・という点で、当然ですが、これもコンピュータが登場してはじめて現実的なものとなりました。

-1) 各データをランダムにクラスタに割り当てる(初期設定)
-2) クラスタの重心を求める
-3) 各データのクラスタを、一番重心の近いクラスタに変更する
-4) 3) でデータの入れ替えがどの程度発生しているかチェック
-5) 4) の結果、変化がなければ収束したとみなして終了。
 入れ替えが生じている場合は、2) に戻る(計算と入れ替えを繰り返す)

~

***プログラム例
以下に、k-means法 のサンプルを掲載しています。
ipynb(JupyterNotebook)形式で、GitHubに置いていますが、レンダリングがタイムアウトする場合は、下の nbviewer 経由でご覧下さい。
-GitHub:[[K_MeansClustering.ipynb>https://github.com/koichi-inoue/JupyterNotebook/blob/master/K_MeansClustering.ipynb]]
-nbviewer:[[K_MeansClustering.ipynb>https://nbviewer.jupyter.org/github/koichi-inoue/JupyterNotebook/blob/master/K_MeansClustering.ipynb]]

-使用しているライブラリ
--seaborn:ビジュアライゼーション
--''sklearn'':KMeans

-使用しているデータ:IRIS(sklearnに付属)
--Sepal Length(がく片長 cm)
--Sepal Width(がく片幅 cm)
--Petal Length(花びら長 cm)
--Petal Width(花びら幅 cm)
--Species:setosa, versicolor, virginica ← これは使わない

クラスタ数を「3」に設定してクラスタリングすると、データの性質から、Species と一致するクラスタリングができていることがわかります。

~
~