多変量解析

クラスター分析とは?Rでの実装方法を一緒に見ていこう!

ウマたん
ウマたん
本記事では、クラスター分析についてまとめていきます。クラスター分析は教師なし学習の定番手法で、データの構造や傾向を把握するのに非常に役立ちます。クラスター分析を利用してデータを可視化してみましょう!

こんにちは!データサイエンティストのウマたん(@statistics1012)です!

大量のデータセットをいくつかのグループ・セグメントに分けたい!

そんな時は「クラスター分析」!

クラスター分析は、非常に便利で様々な場面でよく使われますので覚えておきましょう!

この記事では、そんなクラスター分析についてまとめていきます。

ウマたん
ウマたん
PythonでもRでも簡単に実装できちゃうんだよー!

クラスター分析は教師あり学習or教師なし学習?

ハテナ

解析手法には教師あり学習と教師なし学習があるのですが、クラスター分析はどちらでしょうか?

教師あり学習というのは、どのグループに属するかという”ラベル”がついている既知データが手元にあり、それを用いてモデルを作って、”ラベル”がついていないデータの分類に用いるという手法。

ただ、教師あり学習は、「これはここに入るんだよ~」と丁寧に教えてくれる教師がいる状態じゃないと解析できないんですね!

教師なし学習は、ラベル付きデータがない状態であるデータを分類するような手法。

「これはここに入るんだよ~」と丁寧に教えてくれる教師がいなくても解析できる!優秀な手法です!

詳しくは以下の記事を見てみてください!

メモ
教師あり学習と教師なし学習の違いとは? こんにちは! 消費財メーカーでデータサイエンス&デジタルマーケティングっぽいことをやっているウマたん(@statistic...

さて、もう一度!

クラスター分析は教師あり学習手法でしょうか、教師なし学習でしょうか?

クラスター分析は・・・

教師なし学習!

教師あり学習にはランダムフォレストSVMなど強力な手法が強いですが、既知の学習データがないような状況では解析できないので注意が必要ですね!

クラスター分析を始めとする教師なし学習は既知の学習データがなくても使えるので最終アウトプットへの橋渡しとして多く用いられています。

それでは早速クラスター分析について見ていきましょう!

クラスター分析の種類

クラスター分析と一口に言っても階層的クラスター分析非階層的クラスター分析があります。

一般的に最初に勉強するのは階層的クラスター分析。

階層的クラスター分析のことを単純にクラスター分析と呼んでいる例もあります。

それぞれの特徴について見ていきましょう!

階層的クラスター分析

階層クラスター分析では木構造のような図を作ってクラスター分けを行います。

ある類似度を表す指標をもとにサンプルを融合していき、最終的に一つのクラスターを作る手法です。

簡易的な図ですが、こんな感じの木を描いて分類していきます。

この時、どこで切るかによってクラスターの数が変わるのがお分かりでしょうか?

このように階層的クラスター分析では木構造を作った後にどこで切るかを考えクラスターの数を決めます。

豊田先生の書籍(1)を参考に具体的なクラスター分析のアルゴリズムを見ていきます!

手順1:変数を用いて個々の対象間の距離をすべて計算し、その中で距離が最も短い対象同士を併合して最初のクラスターを作成する。

手順2:新しく併合されたクラスターと他の対象間の距離を再度計算し、手順1で計算された対象間の距離を含めて最も近いものを併合する。その際、新しく併合されたクラスターと対象間、および、クラスター間の距離の定義にはさまざまな方法が提案されているが、それは後ほど紹介する。

手順3:手順2をくり返し、すべてのクラスターが統合されるまで計算を行う。

手順4:計算結果を用いて、クラスターの併合される過程を表すデンドログラム(さっきの木構造みたいなやつ)を描く。

この手法は、N  個の対象からなるデータが与えられたとき、1個の対象だけを含む N  個のクラスターがある初期状態をまず作る。

この状態から始めて、対象 x1とx2の間の距離 d(x 1 ,x 2 ) からクラスター間の距離 d(C 1 ,C 2 )  を計算し、最もこの距離の近い二つのクラスターを逐次的に併合する。

そして、この併合を全ての対象が一つのクラスターに併合されるまで繰り返すことで階層構造を獲得する。

クラスターC1とC2の距離関数 d(C 1 ,C 2 )の違いにより以下のような手法がある。

・最短距離法
\begin{eqnarray*}
d(C_1,C_2)=\min{d(x_1,x_2)}
\end{eqnarray*}
・最長距離法
\begin{eqnarray*}
d(C_1,C_2)=\max{d(x_1,x_2)}
\end{eqnarray*}
・群平均法
\begin{eqnarray*}
d(C_1,C_2)=\frac{1}{|C_1||C_2|}\Sigma\Sigma{d(x_1,x_2)}
\end{eqnarray*}
・ウォード法
\begin{eqnarray*}
d(C_1,C_2)&=&E(C_1\lor{C_2})-E(C_1)-E(C_2)\\
E(C_1)&=&\Sigma(d(x,b_i))^2\\
b_i&=&\Sigma{\frac{x}{|C_i|}}\\
\end{eqnarray*}

クラスター間の距離を測る方法にはいくつか種類がありますが、一般的にはウォード法を用いることが多いです!

非階層的クラスター分析

続いて、非階層的クラスター分析を見ていきましょう!

非階層的クラスター分析は、その名の通り階層構造を作りません。

階層的クラスタリングと異なり、階層的な構造を持たず、あらかじめいくつのクラスターに分けるかを決め、決めた数の塊にサンプルを分割する方法です。

非階層的クラスター分析では、分割の良さの評価関数を定め、その評価関数を最適にする分割を探索します。

可能な分割の総数は指数的に増えていくので、実際は準最適解を求めることになります。

その中でも代表的なものがk-means法です。

簡単なアルゴリズムは以下の通りです。

1.代表点を適当に決める
2.ユークリッド距離をもとにデータを代表点を持つクラスタに割り当て
3.クラスタの重心点を代表点とする
4.代表点が変わらなければ終了。変われば2へ

非階層的クラスター分析は、あらかじめクラスタ数を与える必要がありますが、計算スピードが速いです。

k-means法に関して詳しくはこちらにまとめています!

k-means法とは?Rで実装してみよう!当サイト【統計ラボ】の本記事では、非階層クラスター分析のk-means法について徹底的に解説していきます。メリットとデメリットがあるので使う際は注意しましょう!x-means法という改良手法も合わせて一緒に見ていきますよー!...

階層的クラスター分析と非階層的クラスター分析の違い

Check

階層的クラスター分析の方が、視覚的に分かりやすく、なぜそのクラスタ数に分けたのかが説明しやすいです。

しかし、データ数が膨大になると非常に計算負荷がかかってしまうのでビックデータを扱う上ではあまりオススメしません。

結局クラスター分析は、何かしらの特徴を基にデータをグループに分けてくれるだけです。それらのグループに意味を与えるのはマーケターの仕事です。

マーケティングに統計の考え方を取り入れてビジネスを加速させよう!当サイト【統計ラボ】の本記事では、マーケティングにおいて重要な統計学についてマーケター目線で徹底的にまとめていきます。さらにどのように統計学を勉強していけばよいかも紹介していくのでぜひチェックしてみてください!...

非階層的クラスター分析を行う場合は、当たりを付けてクラスタ数を動かしながら最適なグループ分けを見つけると良いでしょう。

ちなみに最適なクラスタ数を与えてくれる非階層的クラスター分析「x-means法」という手法も存在しますが、高度なのでここでは省略します。

ベイズ情報量基準(BIC)を基に最適なクラスタ数を算出してくれます。

使った感想としては、必ずしも最適なクラスタを算出してくれるとは限らないイメージです。

k-means法を使いながらクラスタ数をチューニングしていった方が手間はかかりますが、最適なクラスタが見つかります。

興味のある方は調べてみると良いでしょう!

クラスター分析をRで実装してみよう!

PC

最後にクラスター分析でRを実装していきましょう!

本当に簡単に実装できちゃうんです!

irisというめちゃんこ有名なデータセット(150サンプル5変数で花びらの特徴を表したデータセット)を使います。

以下がコードです。


3つの花のタイプに分かれているので、そのラベルがk-means法で上手く分類できるかどうか見ていきます。

実際に行ってみた結果がこちら

123
setosa0500
versicolor4802
virginica14036

Verginicaは少し外してますが、それ以外は比較的当たってますね!

正答率は89%です。

こんな感じで非常に簡単にクラスター分析を実装することが可能なので是非やってみてください!

クラスター分析 まとめ

クラスター分析は多くの場面で使用できる汎用性の高い手法なんです。

最後にクラスター分析についてまとめておきましょう!

・クラスター分析はデータをグループ分けする手法
・クラスター分析には階層的クラスター分析と非階層的クラスター分析がある
・データ量が多いときは非階層的クラスター分析の方がオススメだけど、あらかじめクラスタ数を決めておく必要がある

是非クラスター分析を使ってみてください!

何の変哲もないデータにクラスター分析をかけることで洞察を得ることができるかもしれませんよー!

以下の書籍でクラスター分析について学べるので興味のある方は目を通してみるとよいでしょう!

created by Rinker
¥2,420
(2020/06/07 12:47:41時点 Amazon調べ-詳細)

created by Rinker
¥3,740
(2020/06/06 18:37:38時点 Amazon調べ-詳細)

ウマたん
ウマたん
実際にクラスター分析を行ってみると意外な発見があるかもよ!

機械学習やPythonについて学びたい方はぜひ以下の記事をチェックしてみてくださいね!

機械学習入門に必要な知識と独学勉強方法をPythonとRの実装と一緒に見ていこう!当サイト【統計ラボ】の本記事では、入門者向けに機械学習についてカンタンにまとめていきます。最終的にはどのように機械学習を学んでいけばよいかも見ていきます。細かい手法の実装もPython/Rを用いておこなっていくので適宜参考にしてみてください。...
【独学入門】初心者が3か月でPythonを習得できるようになる勉強法!当ブログ【統計ラボ】の本記事では、Pythonを効率よく独学で習得する勉強法を具体的なコード付き実装例と合わせてまとめていきます。Pythonはできることが幅広いので自分のやりたいことを明確にして勉強法を選ぶことが大事です。...
Pythonを初学者が最短で習得する勉強法

Pythonを使うと様々なことができます。しかしどんなことをやりたいかという明確な目的がないと勉強は捗りません。

Pythonを習得するためのロードマップをまとめましたのでぜひチェックしてみてくださいね!