見出し画像

【データ分析】データ分類(クラスタリング)の基本


クラスタリングとは

クラスタリングとは、たくさんの物や情報を何個かのグループに分類することを指します。

例えば、部屋に散らかったおもちゃを片付けるときを考えてみましょう。おもちゃの車は一つの箱に、ぬいぐるみは別の箱に、ブロックはまた別の箱にと、似た種類のおもちゃを同じ箱にまとめると整理しやすいですよね。これがまさにクラスタリングの考え方です。

ただ、ここで言っている「似ている」とは、大きさでも、色でも、形でもあり得ます。その基準は、何を目的とするかによって変わってきます。

データのクラスタリングは、ある基準において似た特徴を持つデータを同じグループにまとめることで、データの中に潜んだパターンや特性を把握しやすくする分析の手段です。

例えば、お店のお客様のデータをクラスタリングすると、お客様がどんなグループに分けられるのか、それぞれのグループが何を買う傾向があるのかということが分かれば、お店は各お客様のグループに対して適した商品やサービスを提供することができるようになるかもしれません。

また、病気の研究でデータをクラスタリングすると、病気の種類や段階、患者さんの体質による違いなど、一見同じような病気でもさまざまなパターンがあることが分かれば、それぞれの病気のパターンに対して最適な治療法を選ぶことができるかもしれません。

クラスタリングは多くのデータの中から共通の特性を持つものを見つけ出し、それらを理解するための強力な手段となり得ます。

クラスタリング手法の種類

クラスタリングと一口に言っても、その考え方によっていくつかの方法が考えられます。

現在、クラスタリング手法を整理するために広く採用されているのは次の2×2のフレームワークです。

表1:クラスタリング手法の種類

ソフトクラスタリングとハードクラスタリング

クラスタリングにおけるソフト・ハードは、データを分類する枠組みの柔軟性を表しています。

ハードクラスタリングにおいては、何かを分類する先は1つしか許されません。例えば、ヒヨコを生物学上の雄・雌に分類する時、どちらに分類するべきか曖昧になることはありませんね。必ず雄か雌か一方へ分類される筈です。この分類における厳格さを指してハードと表現されています。

ソフトクラスタリングでは、何かを分類する先が2つ以上あるケースが許されます。例えば、映画のジャンルを分類する時、鬼滅の刃なら「アニメ」にも「アクション」にも分類されますよね。この柔軟な分類が、ソフトと表現されているわけです。

階層クラスタリングと非階層クラスタリング

データを分類する際に、似ているデータ同士を順番にまとめていき、次第に大きなグループに分けていく方法を階層クラスタリングと言います。クラスタリングのプロセスを樹形図(デンドログラム)で可視化できるため、階層的と言われています。

階層クラスタリングはデータ同士の関係を構造化しながらクラスタリングを行うため、見通しが良い分コンピュータの計算量が多くなります。データの量が多いと、相当の時間を要することになります。

一方、最初にデータをいくつのグループに分けたいか決めておき、最も当てはまりが良さそうなグループへデータを割り振っていく方法を非階層クラスタリングと言います。

非階層クラスタリングは単純な分類しか行いませんが、コンピュータの計算量は少ないため、大量のデータを高速で処理することに向いています。

代表的なアルゴリズム

上で概観した、クラスタリング手法の各種類において、代表的なアルゴリズムを紹介します。

① ハード×階層クラスタリング:Ward法(ウォード法)

Ward法は、最初に個々のデータが全て異なるクラスタに属している状態を想定します。

そして「その時点のクラスタの内、最も距離が近い2つのクラスタを選んで1つのクラスタに統合する」という操作を繰り返すことで大きいクラスタを形成していきます。

なお、やや発展的な内容になりますが、Ward法におけるクラスタA、B間の「距離」は

クラスタA、Bを統合した場合の偏差平方和-{(クラスタAの偏差平方和) + (クラスタBの偏差平方和)}

と定義されています。偏差平方和とは、データの値から平均値を引いた偏差を平方して足し合わせた数値のことです。Ward法は、クラスタ全体の偏差平方和が最小となるようにクラスタ間の統合を進める手法です。


図1:Ward法のイメージ

② ハード×非階層クラスタリング:k-Means法

k-Means法は非階層クラスタリングの手法であるため、最初にいくつのクラスタに分割するのか(k個のクラスタに分割することを)決める必要があります。

kを決めたら、ランダムにk個のデータを選び、残りのデータを選んだk個のデータの内、最も距離が近いデータと同じクラスタに振り分けます。

こうしてできたk個のクラスタに対して、「各クラスタの重心を計算し、その重心と最も距離が近いデータ同士を同じクラスタに振り分ける」ことを、k個のクラスタの内容が変わらなくなるまで繰り返してクラスタリングを行います。

図2:k-Means法のイメージ

k-Means法は仕組みが簡単で分かりやすいアルゴリズムですが、最初に選ぶランダムなデータの取り方によってクラスタリングの結果が異なるケースがあるという問題があります。また、基本的にユークリッド距離に基づいて最も近い点を決定するため、クラスタの形状が球状に仮定されており、ある配置のデータに対しては適切なクラスタリングができないといった問題もあります。

こうしたk-Means法の欠点をできるだけ補ったk-Means++法などのアルゴリズムも提唱されているようです。興味がある方は調べてみてください。

③ ソフト×非階層クラスタリング:Fuzzy c-Means法

Fuzzy c-Means法は名前がk-Means法と似ていることからも分かるとおり、ほぼk-Means法と同じ考え方でクラスタリングを行う手法です。ただFuzzy c-Means法はk-Means法と異なっている点は、ソフトクラスタリングを行う点です。

k-Means法ではk個の中心点に対して最も近い点が同じデータ同士でクラスタを形成しましたが、Fuzzy c-Means法ではk個の各中心点に対して近い順に各クラスタにどの程度所属するか(メンバーシップ)を計算します。

具体的には、その点が各中心点からどれだけ近くにあるかに基づいてメンバーシップを決定します。各点の全クラスタに対するメンバーシップの合計は1になります。

図3:Fuzzy c-Means法のイメージ


以上、各クラスタリング手法の代表的なアルゴリズムを1つずつ紹介してみました。機会があれば他のクラスタリングアルゴリズムについての解説記事や、アルゴリズムの実装記事を書いてみたいと思っています。

いいなと思ったら応援しよう!

この記事が参加している募集