わかりやすいクラスター解析の説明【初心者向。Rでできる。】

R

こんにちは。
本日は、解析方法に関する記事を書こうと思います。

疑問

クラスター解析というのが出てきたけど一体なんなの?
使うことでどんなメリットがあるんだろう。
実際にやる方法も知りたいなあ。

本日はこのような疑問に答えていきます。

僕は医療職で働きながら大学院に通って5年目。これまでに論文や学会発表を多数こなしてきています。そのような僕がクラスター解析について解説していきたいと思います。

でははじめていきますね。

クラスター解析を使う目的 【教師なし学習:データを分類したいときに使いましょう】

クラスター解析とは、あるデータを複数のタイプに分類したいときに使います。
クラスター=集団という意味を考えるとわかりやすいですね。

例えばラーメン屋に来店したお客さんについてその年齢、性別、家族構成、自動車有無、居住エリアなどなどのデータがあるとします。

通常、1つのお店にはいろんなタイプのお客さんがきますよね。とはいえ、数百名のお客さん各個人に合わせて施策は作れないわけです。
そこでクラスター解析を行うことによって、データをいくつかの現実的な数(例えば2~5つ)にグループ分けができるのです。

例えば、遠くから車でくるお客さん、近くに住んでいるけど車でくるお客さん、徒歩でくるお客さん。

というようにタイプを大別できるところが最大のメリットです。

クラスター解析の種類

クラスター解析には2種類あり、階層的クラスタリングと非階層的クラスタリングがあります。

クラスター解析を行いたい場合は、「階層的クラスタリング」と「非階層的クラスタリング」のどちらを用いるか決めないといけません。

階層的クラスタリングとは

階層的クラスタリングはたくさんあるデータの近いもの同士を順番に結合していく方法です。
下の図のようにトーナメント表のような樹形図(デンドログラム)ができます。
例えばward法などの方法があります。


https://www.albert2005.co.jp/knowledge/data_mining/cluster/hierarchical_clustering

 階層的クラスタリングのメリット

・適切なクラスター数を求める数式がある=より客観的

・クラスターをまとめていく課程が樹形図でわかる

 

論文に投稿する用のデータ解析でクラスター解析を用いる場合、クラスター数の決定に著者の意図が入らない階層的クラスタリングが行われていることが多いようです。(僕の知る医療系ではですが。。)

非階層的クラスタリング

階層的クラスタリングと違い、分析する人がクラスター数をいくつ(例:2つとか4つ)にわけるか決定できる手法です。例えば、k-means法があります。


https://www.albert2005.co.jp/knowledge/data_mining/cluster/non-hierarchical_clustering

↑この図の場合、5色に分かれています。これはあらかじめ5つの核となるサンプルを決定し、その核への距離に従い5つのクラスターに分けています。
少しずつ核の位置をずらしていき、再度クラスター分けを行っていきます。これをクラスターが固定するまで繰り返す手法です。

 非階層的クラスタリングのメリット

・計算量が少ないので、ビッグデータに用いやすい

 

 非階層的クラスタリングのデメリット

・クラスター数の決定や最初の核の位置決定方法があいまいで正確性では劣る

やや正確性は劣るが、ビッグデータに用いやすいのは非階層的クラスタリングのようですね。

Rでクラスター解析をしてみる【R】

サンプルデータを用い、クラスター解析を実践してみます。

↑22個の都道府県にわたり20個の項目でデータがあるCSVファイルを「df」と名付け、クラスタリングを練習してみます。
データはこちら

階層的クラスター解析

階層的クラスター解析の実施です。
まず、データを読み込んでいきましょう。

df

 関数の解説

・df<-read.csv(“ .csv”) …read.csv…でcsvファイルを読み込み、dfという名前で格納しています。

・header=T… “先頭行は項目名をいれていますよ“の意味です

・row.names=1… “先頭列は項目名ですよ”の意味です

 

↑次にdist関数で各変数の距離を求めます。dxという名前で格納しています。

↑hclust関数でクラスター分析ができます。
d=…の部分に先ほど求めた距離のデータを入れます。
method=…の部分はいろいろ種類がありますが、”ward.D”が階層的クラスタリングではポピュラーなward法です。

↑plot関数を書くと以下のようなデンドログラムができます。

↑トーナメント表のようになっています。隣同士に位置する項目は距離が近いことを示しています。
これで階層的クラスター解析が完了しました。

非階層的クラスター解析

次にRで非階層的クラスタリングを行う方法も紹介していきます。

代表的な非階層的クラスタリングであるk-means法という方法を用います。

Rでは

 kmeans (データ, クラスター数, iter.max繰り返し最大回数, nstart初期値の指定)と書きます

・データ:解析対象のデータ行列です

・クラスター数:非階層的クラスタリングではクラスター数を指定する必要があります。

・iter.max:繰り返し最大回数:デフォルトは10で、特にそのままで問題なければ記載必要ありません。

・nstart:初期値の設定:初期値を変更したい場合は指定する。

 関数の説明

kmeans (df,2):でdfを2つのクラスターに分類するクラスター解析が行われました。
結果をkmという名前で格納しています。

kmの中身を見てみると、、、

↑このkmにはこれだけの情報が入っています。この中の”cluster”という項目だけ抜き出します。

↑km$cluster のように、”$”を使うことで結果から欲しい項目だけを抜き取ることが出来ます。


resultを表記するとこのようになります。
これでRを使った非階層的クラスタリングは完了です!

本日はクラスター解析について解説しました。
これからも有益な記事を書いていきます。
よろしくお願いします。

タイトルとURLをコピーしました