#author("2020-07-11T15:58:54+09:00;2020-07-08T12:50:24+09:00","default:inoue.ko","inoue.ko") #author("2023-08-17T17:13:38+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]] https://github.com/koichi-inoue/DataScience/blob/main/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 と一致するクラスタリングができていることがわかります。 ~ ~