Python による階層的クラスター分析

Python による階層的クラスター分析

[[334729]]

機械学習を行う際には、データのクラスター分析を行う必要があることがよくあります。クラスタリングとは、簡単に言えば、類似したサンプルポイント/データポイントを分類することです。類似性の高いサンプルポイントがまとめられ、サンプルがいくつかのカテゴリに分割されます。クラスター分析には、分解法、加算法、順序付きサンプルのクラスタリング、ファジークラスタリング法、体系的クラスタリング法など、さまざまな方法があります。この記事では、体系的クラスタリング手法と、Python を使用して体系的クラスタリング分析を実行する方法について説明します。

まず、階層的クラスタリングの定義を見てみましょう。階層的クラスタリング法は、階層的クラスタリング法とも呼ばれ、現在最も一般的に使用されているクラスター分析法です。基本的な手順は次のとおりです。サンプルに n 個のサンプルがあると仮定し、まずこれらの n 個のサンプルを n 個のカテゴリ、つまりカテゴリごとに 1 つのサンプルと見なし、次に最も近いプロパティを持つ 2 つのカテゴリを新しいカテゴリにマージして n-1 個のカテゴリを取得し、次に最も近い 2 つのカテゴリを見つけてそれらをマージして n-2 個のカテゴリを作成し、このプロセスを続行します。最後に、すべてのサンプルが 1 つのカテゴリに分類され、上記のプロセスがクラスター グラフと呼ばれるグラフに描画され、次にグラフからいくつのカテゴリに分割するかを決定します。一般的なプロセスを図 1 に示します。

図1. 体系的クラスター分析の模式図

ここで、分類するには各サンプルの類似性を判断する必要がありますが、その類似性をどのように判断するのでしょうか?通常使用する方法は、各サンプル ポイント間の距離を計算し、その距離に応じて分類することです。ここでは距離によって分類しますが、最短距離法、最長距離法、重心法、クラス平均法、区法など、いくつかの方法があります。以下では、これらの方法について簡単に紹介します。

1. 最短距離法

最短距離法は、図 2 に示すように、2 つのクラスから最短距離にある 2 つのサンプル ポイントを見つけることです。ポイント 3 とポイント 7 は、クラス G1 と G2 間の距離が最短の 2 つのポイントです。計算式を図4に示します。

図2. 最短距離法の模式図

2. 最長距離法

最長距離法は、図 3 に示すように、2 つのクラスから最も距離が長い 2 つのサンプル ポイントを見つけることです。ポイント 1 とポイント 6 は、クラス G1 と G2 間の距離が最も長い 2 つのポイントです。計算式を図4に示します。

図3. 最長距離法の模式図

3. 重心法

物理的な観点からは、クラスをその重心、つまりクラスサンプルの平均で表すのがより合理的であり、クラス間の距離は重心間の距離です。サンプル間でユークリッド距離を使用する場合、あるステップでクラス G1 と G2 が G3 に統合され、それぞれ n1、n2、n3 のサンプルがあり、n3=n1+n2 で、その重心が X1、X2、X3 で表されるとすると、X3=1/n3(n1X1+n2X2) となります。重心法の計算式を図4に示します。

4. クラス平均法

名前が示すように、これは 2 つのクラス間のすべてのポイントの距離の平均を取得します。計算式を図4に示します。

図4. 一般的な距離計算方法

5. 偏差二乗和法

偏差二乗和法はウォード法とも呼ばれます。この考え方は分散分析から派生したもので、クラスが正しく分割されていれば、同じ種類のサンプルの偏差二乗和は小さく、クラス間の偏差二乗和は大きくなるはずです。計算式を図4に示します。

システム クラスタリング手法の基礎知識を理解した後、Python コードを使用してシステム クラスタリング手法の具体的な使用方法を説明します。

まず、各種ライブラリをインポートします。

  1. numpyをnpとしてインポートする 
  2. matplotlibからpyplotをpltとしてインポートします 
  3. scipy.cluster.hierarchy から dendrogram, linkage をインポートします

次のステップはデータセットを生成することです。今回使用したデータセットはランダムに生成されたもので、数も多くありません。合計 15 のデータ ポイントがあり、7 つのデータ ポイントを含むデータ クラスターと 8 つのデータ ポイントを含むデータ クラスターの 2 つに分かれています。データポイントの数を少なく設定する理由は、後で描画するときにデータの分布と絵の分類が見やすくなるためです。コードは次のとおりです。

  1. state = np .random.RandomState(99) #ランダムな状態を設定する 
  2. a = state .multivariate_normal([10, 10], [[1, 3], [3, 11]], size = 7 ) # 多変量正規変数を生成する 
  3. b = state.multivariate_normal ([-10, -10], [[1, 3], [3, 11]],サイズ= 8 )  
  4. data = np .concatenate((a, b)) #データを連結する

ここでは、繰り返し実験を容易にするためにランダムな状態を設定します。次に、このランダム状態を使用して、2 つの変数 a と b を生成します。これら 2 つの変数は、前述のデータ クラスターです。a には 7 つのデータ ポイントがあり、b には 8 つのデータ ポイントがあります。a と b はどちらも多変量正規変数であり、a の平均ベクトルは [10, 10]、b の平均ベクトルは [-10, -10] で、共分散行列は [[1, 3], [3, 11]] です。ここで注意すべき点は、共分散行列は正定値行列または半正定値行列でなければならないということです。次に、a と b を連結して変数データを取得します。

次に、データ ポイントの分布をプロットします。コードは次のとおりです。

  1. fig, ax = plt .subplots( figsize =(8,8)) #画像サイズを設定する 
  2. ax.set_aspect('equal') #2つの軸の比率が等しくなるように設定します 
  3. plt.scatter(データ[:,0], データ[:,1])  
  4. plt.ylim([-30,30]) #Y軸の値の範囲を設定する 
  5. plt.xlim([-30,30])  
  6. plt.show()

ここでのコードは比較的単純なので、詳細には触れません。主にコード行 ax.set_aspect('equal') について説明します。デフォルトでは、matplotlib の x 軸と y 軸の比率が異なります。つまり、同じ単位長さの線分は表示されるときに長さが異なります。そのため、画像がより調和して正確に見えるように、2 つの比率を同じに設定する必要があります。描画した図を図 5 に示します。図から、2 つのデータ クラスターが明確に確認できます。上のデータ クラスターは座標点 [10, 10] の周囲にほぼ集中していますが、下のデータ クラスターは設定と同じ [-10, -10] の周囲にほぼ集中しています。図から、このデータセットは大まかに 2 つのカテゴリに分けられることがはっきりとわかります。つまり、上部のデータ クラスターは 1 つのカテゴリに分けられ、下部のデータ クラスターは別のカテゴリに分けられますが、それでもアルゴリズムを通じて計算する必要があります。

図5. 使用されたデータの分布

次にデータ処理を行います。コードは次のようになります。

  1. z = linkage (data, "average") #平均アルゴリズム、つまりクラス平均メソッドを使用する

データ処理には 1 行のコードしか必要ないので非常にシンプルですが、そこに難しさがあります。まず、図 6 に示すように、z の結果を見てみましょう。

図6. クラスター計算結果

多くの人は、この結果を初めて見ると混乱したり、完全に混乱したりしますが、原理は実際には非常に単純です。 Scipy には、公式にこれに関する設定がいくつかあります。たとえば、結果の最初の行には、11、13、0.14740505、2 という 4 つの数字があります。最初の 2 つの数字は「クラス」を表します。最初は、各ポイントがクラスであるため、2 つのポイント 11 と 13 は 2 つのクラスです。3 番目の数字 0.14740505 は、2 つのポイント間の距離です。2 つのポイントは 1 つのクラスにマージされるため、新しいクラスには 2 つのポイント (11 と 13) が含まれます。これは、4 番目のポイント 2 の値であり、この新しいクラスはクラス 15 としてカウントされます。これは 15 番目のクラスではなく、クラス 15 であることに注意してください。元のデータ セットには、クラス 0、クラス 1、クラス 2...クラス 14 の順に 15 個のポイントがあるためです。Python は 0 から始まるため、ここでのクラス 15 は 16 番目のクラスを指します。 z の 2 行目のデータでは、最初の 2 つの数字は 2 と 5 で、これらは元のクラス 2 と 5 です。距離は 0.3131184 で、2 つのポイントが含まれています。この行のデータも 1 行目と同様です。次に、3 行目のデータを見てください。最初の 2 つの数字は 10 と 15 で、それぞれクラス 10 とクラス 15 です。クラス 15 は、1 行目からマージされた新しいクラスで、2 つのポイント 11 と 13 が含まれています。クラス 15 とクラス 10 の間の距離は 0.39165998 で、これはクラス 11、13 とクラス 10 の間の平均距離です。ここで使用するアルゴリズムは平均であるため、クラス 10、11、13 は 3 つのポイントを含む新しいクラスにマージされ、4 番目の数字は 3 になります。 z の他の行のデータもこの規則に従います。データの最後の行では、クラス 26 と 27 が新しいクラスに統合され、その新しいクラスには 15 個のポイントがすべて含まれています。つまり、これらの 15 個のポイントは最終的に 1 つのクラスに分類され、アルゴリズムは終了します。

次のステップは、画像を描画することです。コードは次の通りで、結果は図 7 に示されています。

  1. 図、 ax = plt.subplots (図サイズ=(8,8))  
  2. dendrogram(z, leaf_font_size = 14 ) #描画
  3. plt.title("階層クラスタリング デンドログラム")  
  4. plt.xlabel("クラスターラベル")  
  5. plt.ylabel("距離")  
  6. plt.axhline( y = 10 ) #分類線を描く 
  7. plt.show()

図7. クラスタリング結果

図からわかるように、これらの 15 個のポイントは 2 つのカテゴリに分けられます。手前の緑の線で結ばれたポイントは最初のカテゴリ、つまりポイント 0 からポイント 6 までの 7 つのポイントを表し、奥の赤線で結ばれたポイントは 2 番目のカテゴリ、つまりポイント 7 からポイント 14 までの 8 つのポイントを表します。除算結果は非常に正確で、当時の設定と同じであることがわかります。

システムクラスタリング法のアルゴリズムは比較的単純で、非常に実用的であり、現在最も広く使用されているクラスタリング方法です。ただし、この方法は、非常に大量のデータを処理する場合にいくつかの欠点があるため、他のアルゴリズムと組み合わせて使用​​するのが最適です。同時に、ユーザーは、使用時に自分の状況に基づいて適切な距離計算方法を選択する必要があります。この記事では、主にクラス平均法を使用してクラスタリング操作を実行します。このデータセットは非常に単純なので、他の距離計算方法を使用しても結果は同じです。データ量が比較的多い場合、異なる距離計算方法によって得られる最終結果が異なる可能性があるため、ユーザーは自分の状況に基づいて選択する必要があります。

<<:  3D多言語AIレポーターが登場。プレッシャーを感じることなく文章を書いたり翻訳したりできるだけでなく、国際的なスポーツイベントのレポートもできます。

>>:  人工知能に対するいくつかの態度: 流行を追跡するために個人データを犠牲にする用意がありますか?

ブログ    

推薦する

人気の説明: キャッシュ、キャッシュ アルゴリズム、キャッシュ フレームワークの概要

[[437580]]導入私たちは皆、キャッシュについて聞いたことがあります。キャッシュとは何かと尋ね...

...

コンピュータマスターのジレンマ!試験に合格するのは難しく、仕事を見つけるのも難しい

3年前、ディープラーニングを専攻し、2019年度に入学したばかりのコンピューターマスターが知乎に質問...

2D ガール ジェネレーター、駆動可能なニューラル ネットワーク... 2019 年の優れた機械学習プロジェクト 17 選

2019 年のベスト オープンソース プロジェクトを選択するために、Medium のネットユーザーが...

9 トピック PyTorch での畳み込みニューラル ネットワーク (CNN) の実装

この写真をまだ覚えていますか?ディープシステムでは、52 個のオブジェクト検出モデルが導入されていま...

人間を殺し、ロボット犬を救う「ボストンパワー」ロボットはターミネーターに変身する

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

AIの活用を拡大するには? 人工知能には「1%の問題」がある

人工知能(AI)については多くの報道や解説がなされてきました。奇跡を起こすことができると言う人もいれ...

...

AIが「テクノロジー冬季オリンピック」を支援、UBTECHロボティクスが氷と雪の世界に進出

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

テクノロジー大手が自動運転市場への参入を急いでいる背景に、あなたが知らないことは何でしょうか?

ファーウェイは最近、「自動運転ネットワークソリューション白書」を発表しました。これは、将来のネットワ...

...

3D MRI および CT スキャンのディープラーニング モデルの概要

医療画像データと他の日常的な画像との最大の違いの 1 つは、DICOM シリーズ データを扱う場合、...

...

AI特許出願件数は世界第1位で、世界総出願件数の約4分の3を占める。

先日蘇州で開催された中国人工知能産業2020年年次大会で発表された「2020年中国人工知能発展報告書...

...