データ解析の手法として知られるクラスタリング。そのアルゴリズムはマーケティングや、データサーバにおける高可用性の実現など、様々な用途で活用されています。
この記事では、クラスタリングの意味や手法、メリット・デメリット、サーバクラスタリングの目的などについて解説します。
Contents
クラスタリングとは
クラスタリングとは、ある集合を何らかの規則によって分類することです。「クラスタ分析」や「クラスタ解析」と呼ばれることもあります。そして、クラスタリングによってグルーピングされた部分集合のことをクラスタと呼びます。
機械学習におけるクラスタリング
機械学習の場で用いられるクラスタリングは「教師なし学習」に分類され、データに対して特徴を見出し、自動で分類することが可能です。膨大なデータでもアルゴリズムに投入するだけでクラスタリングが可能になるため、ビッグデータの分析などに活用されています。
クラスタリングの計算方法
クラスタリングのための計算方法はいくつかありますが、簡単に表現すると「サンプル同士が似ているか、もしくは似ていないか」というサンプル同士の類似性に基づいてグルーピングしていきます。
クラスタリングの計算方法を大きく分類すると、階層構造を作りながらグルーピングを進める「階層クラスタリング」と、階層構造を作らずに分類していく「非階層クラスタリング」の2つに分けられます。階層クラスタリングと非階層クラスタリングにはそれぞれ特徴があり、分類したいデータの量や活用方法に応じて使い分けられます。
それでは、階層クラスタリングと非階層クラスタリングについて詳しくみていきましょう。
階層クラスタリング
先述の通り、クラスタリングの手法には階層型と非階層型があり、階層型にグルーピングしていく手法を階層クラスタリングといいます。ここでは、階層クラスタリングの概要とその手法について紹介します。
階層クラスタリングとは
階層クラスタリングの基本は、「最も似ている(もしくは似ていない)サンプル同士を1つずつ順番にグルーピングしていく」ことです。データをひとつひとつ比較して、似ているもの同士をクラスタとします。次に、そのクラスタに最も似ているデータもしくはクラスタをグルーピングし、それを繰り返していきます。すべてのデータがグルーピングされるまで繰り返し、最終的にひとつの樹形図が完成したらクラスタリング完了です。
樹形図を完成させることによって、視覚的にデータの関係性を把握することができます。そのため、サンプル数がそこまで多くない集団に対しては有効なクラスタリングです。例えば、売上金額を参考に取引先について階層クラスタリングを行えば、クラスタごとに今後の取引の進め方などを検討することができるでしょう。顧客アンケートの内容に応じて商品をクラスタリングすることで、似た商品の売上傾向などを視覚的にとらえることも可能です。
階層クラスタリングを行う場合、サンプル同士が何をもって「似ている(もしくは似ていない)」と判断するかによって計算方法が異なります。階層クラスタリングの代表的な計算手法であるウォード法、群平均法、最短距離法、最長距離法について、詳細を解説します。
ウォード法
ウォード法は、それぞれのデータの平方和(それぞれのデータと平均値の差を二乗した値の和)を求め、平方和が小さなものからクラスタを作っていく手法です。平方和はデータのばらつきを表すもので、平方和が大きいほどデータのばらつきが大きい、逆に平方和が小さいほどデータのばらつきは小さいということになります。
最初に、すべてのデータの組み合わせに対して平方和を求めます。そのなかで、平方和が一番小さくなる組み合わせのものが最初のクラスタです。そして、そのクラスタを含めた各組合せに対して再度平方和を求めてクラスタ作成を繰り返します。
最終的に1つのクラスタになるまで平方和を求めて比較し続けることになるため、計算量が多くなることがデメリットとされていますが、平方和を用いることで分類感度はかなり高まります。そのため、バランスよくデータを分類することが可能で、階層クラスタリングの中ではよく使われる手法です。分析したいデータに応じた計算方法を選ぶことが重要ですが、「迷ったらウォード法」と言われるほど、ウォード法はバラつきを抑えた分析が可能になります。
群平均法
階層クラスタリングでクラスタを形成していくとき、群平均法、最短距離法、最長距離法ではクラスタ間の距離を計算してグルーピングしていきます。最初のクラスタを作るときは1つのデータを1つのクラスタとしてみなすため、データ同士の距離がそのままクラスタの距離となります。しかし、2回目以降の計算では集団同士の距離を計算することになるため、クラスタ内のどのデータ同士の距離をクラスタ間の距離とするかで計算結果が変わってくるのです。
群平均法では、2つのクラスタを構成するデータのすべての組み合わせの距離を求め、その平均をクラスタ間の距離とする手法です。
群平均法ではすべての距離の平均を用いるため、クラスタ内に外れ値があったとしても影響を受けにくく、クラスタが帯状に連なってしまう鎖効果が起こりにくいというメリットがあります。また、ウォード法に比べると計算量が少ないため、負荷を抑えつつ、ある程度計算結果のバラつきも少なくしたい場合には有効な計算方法でしょう。
最短距離法
最短距離法は、2つのクラスタ間で一番近いデータ同士の距離を、クラスタ間の距離として採用する手法で、単連結法と呼ばれることもあります。群平均法と同様にクラスタを構成する要素同士の距離をすべて求め、その中で一番距離の短い組み合わせを選び、その値をそのままクラスタ間の距離として考えます。
ウォード法などに比べて計算量が少なくなることがメリットですが、外れ値に弱いことがデメリットです。クラスタ内に1つだけ離れたデータがあった場合、そのデータに近い別のクラスタが存在すると、そのクラスタと新たなクラスタを作ってしまうのです。クラスタ内に外れ値があった場合、最短距離法では鎖効果が出やすくなり、分類感度が低くなってしまいます。
最長距離法
最長距離法は最短距離法とは逆の手法です。完全連結法と呼ぶこともあり、クラスタを構成する要素同士のすべての距離の中で最長のものを、クラスタ間の距離として採用します。
最短距離法と同様に、計算量が少なくなることがメリットとされています。一方、外れ値があると拡散効果でクラスタ同士が離れてしまうというデメリットがあることに注意が必要です。最短距離法と同様に、クラスタ内に1つだけ離れたデータがある場合には、その影響を受けやすいのです。ただし、各クラスタのサイズが一定になりやすいため、最短距離法より分類感度は高くなるという特徴もあります。
階層クラスタリングのメリットとデメリット
先述の通り、階層クラスタリングではデータが樹形図として分類されます。そのため、樹形図を上から順に辿っていくことで、目的に応じて好きな数にクラスタを分けることが可能になることが、階層クラスタリングのメリットです。
階層クラスタリングの場合、クラスタの数は最小で1(母集団を1つのクラスタとみなす)、最大でクラスタを構成する要素数(個々のデータを1つのクラスタとみなす)となり、自由にクラスタを分けることができます。そのため、事前にクラスタ数を決める必要がなく、一度クラスタリングしてしまえばさまざまな用途で使うことができるのです。また、樹形図を作成することでデータ同士の繋がりを視覚的にとらえることができ、分析に役立てることも可能です。
一方、階層クラスタリングのデメリットは、その計算量の多さです。すべてのデータの組み合わせを計算して1つずつクラスタを作っていくため、データの数が多ければ多いほど計算量が膨大になります。データの数が多すぎると樹形図を作成しても読み取りづらく、活用もしづらいでしょう。ビッグデータのようにデータ数が膨大になるものは、階層クラスタリングには向いていないといえます。階層クラスタリングは、データ数が数十個以下のものが適しているともいわれているのです。
また、クラスタ間の距離の計算手法が複数あり、どれを採用するかでクラスタリングの結果が変わります。どの計算手法を採用するかは試行錯誤する必要があり、データのばらつき具合によっては、同じ階層クラスタリングでも結果が大きく異なる場合もあることにも注意が必要です。
非階層クラスタリング(k-meansなど)
階層クラスタリングに対して、階層を作らずクラスタを形成していく非階層クラスタリングという手法もあります。ここでは、非階層クラスタリングの概要や具体的な手法について紹介します。
非階層クラスタリングとは
非階層クラスタリングとは、その名の通り、階層を作らずにデータをグルーピングしていく手法のことです。母集団の中で近いデータをまとめて、指定された数のクラスタに分類していきます。階層クラスタリングでは樹形図としてグルーピングされるため、クラスタを形成したあとで自由にクラスタを分けることができましたが、非階層クラスタリングでは事前にクラスタ数を決めて指定しておく必要があります。
あらかじめ決められたクラスタ数に要素を分けていくため、すべてのデータ同士の距離を計算する階層クラスタリングよりも計算量が少なく済みます。そのため、データ量の大きいビッグデータの分析にも適した手法です。ただし、注意が必要なのは、適したクラスタ数を自動で計算する方法はまだないという点です。データの種類や量に応じてクラスタ数も自動で分類してほしいという声もあるかもしれませんが、分析しやすいクラスタ数は計算を開始する前にあらかじめ検討しておかなければなりません。
Pythonによるk-means法とは?
非階層クラスタリングの代表的な手法として、k-means法というものがあります。k-means法とは非階層クラスタリングを行うためのアルゴリズムで、「あらかじめ指定されたk個のクラスタに、平均(means)を用いて分類する」という意味で名付けられました。Pythonとはプログラミング言語の1つで、わかりやすい文法で初心者向けの言語でもあります。Pythonを使ってk-means法のアルゴリズムを実装することも、もちろん可能です。
k-means法は、最初に指定したクラスタの数だけ「重心」をランダムに指定し、その重心を基準にクラスタを分けていくという手法です。k-means法を用いるとすべてのデータ間の距離を計算する必要がなくなるため、計算量が軽く済むというメリットがあります。一方、最初の重心の指定はランダムに行われるため、同じ母集団でも計算する度に結果が少し変わることがある点に注意が必要です。より望ましい計算結果を得るためには、初期値を変えて何度か計算を実施し、それぞれのクラスタ内の平均距離が最小になるものを選ぶなど、工夫が必要でしょう。
計算量が少なく、分析するデータ量が多くても問題ないk-means法は、ビッグデータの解析にも適しています。サイト内検索ワードの分類や顧客の購買傾向の分析など、活用できるシーンは多いでしょう。
サーバクラスタリングの種類・目的
サーバクラスタリングという言葉がありますが、これはここまで説明してきたデータ分析で使われるクラスタリングという言葉とは意味が違います。ただし、語源は同じ「群れ」や「集合」という意味の単語である「クラスタ」です。
サーバクラスタリングとは、システムの拡張性や高可用性を確保するために、1つのシステムに対して複数のサーバを連携して稼働させることをいいます。システムの利用者や他のシステムのサーバからは、全体で1つのサーバとして動いているように見えるのが特徴です。システムの規模やデータ量、利用者の数などにもよりますが、サーバを1台で稼働させているとさまざまな問題が発生することがあります。これを回避するために、複数のサーバを連携させて1つのシステムを動かしていることが多いのです。
システムの拡張性を確保するためのクラスタ構成を負荷分散クラスタ、高可用性のためのクラスタ構成をHAクラスタと呼びます。それぞれの概要や特徴について、次に説明します。
負荷分散クラスタ
負荷分散クラスタは、システムの拡張性を考慮したクラスタ構成です。「システムの拡張性を考慮する」とは、システムの利用者や扱うデータ量などが増加しても問題なく稼働できる構成にするということを意味します。負荷分散クラスタは、複数のサーバで処理を分散することによって、1台のサーバにかかる負荷を軽減するという仕組みです。また、負荷を分散するだけでなく、処理能力を高めるという効果も期待できます。
システムに対してアクセスが集中したり、負荷がかかる処理を実行したりした場合、サーバが1台だけでは負荷がかかりすぎてしまうことがあります。1つのシステムを1台のサーバで稼働させていると、サーバに負荷がかかりすぎた場合、システムのレスポンスが悪くなったり、最悪の場合はシステムが利用できなくなったりするリスクがあるのです。
負荷分散クラスタでは、クライアントとサーバの間にロードバランサと呼ばれる負荷分散のための仮想サーバを置き、クライアントからのリクエストをそれぞれのサーバへ振り分ける処理を行います。どのリクエストをどのサーバに投げるかはシステムによって変わりますが、一般的にはIPアドレスとポート番号を元に振り分け先のサーバを指定するようになっています。
HAクラスタシステム
HAクラスタはシステムの高可用性のための仕組みで、HAはHigh Availabilityの略です。高可用性とは、システム障害などによってサービスが提供できなくなる事態が起きにくいことを指します。HAクラスタは冗長化構成とも呼ばれ、メインで稼働するサーバと非常時のために待機するサーバで構成されます。メインサーバで何か問題が発生したとき、待機していたサーバに処理を引き継ぐことで、システムを稼働し続けられるという仕組みです。この仕組みを「フェールオーバー」といいます。
いつでもフェールオーバーが行えるように、HAクラスタシステムではアプリケーションやネットワークなどの監視を常時行っています。これにより、外部のサーバやクライアントパソコンなどからは、まるで1台のサーバで稼働しているかのように見えるのです。処理を即時引き継げるように、メインサーバと待機しているサーバ間でのデータの同期方法も検討しておかなければなりません。
フェールオーバーが行われたあと、障害が起きたサーバはクラスタ構成から切り離し、復旧措置を行います。復旧したサーバは再びクラスタ構成に復帰させますが、そのまま待機サーバとして連携させておくか、もしくは手動で処理を切り替え、メインサーバとして復帰させます。障害が起きたメインサーバを復旧し、再びメインサーバとして稼働させるのが「フェールバック」です。
まとめ
クラスタという言葉が語源のクラスタリングは、データ分析の分野やサーバ構成の分野などでよく使われます。今回紹介した「クラスタリング」は、どちらも「群れ」や「集団」という意味から連想できる内容だったのではないでしょうか。
サーバクラスタリングは、システムを構築するうえで非常に重要な要素です。特に、クラウド環境でのシステム構築を進める企業が増えている昨今では、サーバの処理能力や障害時の対応については無視できません。
LifeKeeperは、多彩なクラウド環境に対応したHAクラスタソフトウェアです。障害の監視、障害発生時の処理の引継ぎ、リアルタイムのデータ複製によって大規模な仮想環境にも対応できます。オープンソースソフトウェアであれば、Pacemaker/DRBDというソフトもあります。オープンソースのため、コストが抑えられるというメリットがあります。求める性能やサポート、コストなどを考慮して、適切なサーバクラスタリングを行いましょう。
サーバーのクラスタリングにおける機能やメリットについてさらに詳しく知りたい方はこちらも読んでみてください。
要件に合ったクラスタリングソフトを選定しよう
数あるクラスタリングソフトの中から要件に合った製品を見つけるための資料を用意しています。製品選定のポイントや選択式に進んでいくと要件に合う製品が見つかる簡易診断などが掲載されています。是非ダウンロードしてご活用ください!