階層クラスタリングは、もう 1 つの教師なし機械学習アルゴリズムであり、ラベルのないデータセットを 1 つのクラスターにグループ化するために使用され、別名 階層的クラスター分析 またはHCA。
このアルゴリズムでは、クラスターの階層をツリー形式で開発します。このツリー状の構造は、 樹状図 。
K 平均法クラスタリングと階層的クラスタリングの結果は似ているように見える場合がありますが、どちらも動作方法に応じて異なります。 K-Means アルゴリズムのようにクラスターの数を事前に決定する必要はありません。
階層的クラスタリング手法には 2 つのアプローチがあります。
なぜ階層的クラスタリングなのか?
すでに他にもあるので、 クラスタリング などのアルゴリズム K 平均法クラスタリング では、なぜ階層的クラスタリングが必要なのでしょうか?したがって、K 平均法クラスタリングで見てきたように、このアルゴリズムにはいくつかの課題があります。それは、クラスターの数があらかじめ決められており、常に同じサイズのクラスターを作成しようとします。これら 2 つの課題を解決するには、階層クラスタリング アルゴリズムを選択できます。このアルゴリズムでは、事前定義されたクラスター数についての知識が必要ないからです。
カイリー・ジェンナーの年齢
このトピックでは、凝集型階層クラスタリング アルゴリズムについて説明します。
凝集型階層クラスタリング
凝集型階層クラスタリング アルゴリズムは、HCA の一般的な例です。データセットをクラスターにグループ化するには、次の手順に従います。 ボトムアップアプローチ 。つまり、このアルゴリズムは最初に各データセットを単一のクラスターとみなし、次に最も近いクラスターのペアを結合し始めます。これは、すべてのクラスターがすべてのデータセットを含む 1 つのクラスターにマージされるまで行われます。
このクラスターの階層は樹状図の形式で表されます。
凝集型階層クラスタリングはどのように機能するのでしょうか?
AHC アルゴリズムの動作は、以下の手順を使用して説明できます。
注: 階層的クラスタリングをより深く理解するには、K-means クラスタリングを参照することをお勧めします。
2 つのクラスター間の距離を測定する
これまで見てきたように、 最も近い距離 2 つのクラスター間の距離は、階層的クラスタリングにとって重要です。 2 つのクラスター間の距離を計算するにはさまざまな方法があり、これらの方法によってクラスター化のルールが決まります。これらの措置はと呼ばれます 連携方法 。一般的なリンク方法のいくつかを以下に示します。
上記のアプローチのうち、問題の種類やビジネス要件に応じていずれかを適用できます。
階層的クラスタリングにおけるデンドログラムの動き
デンドログラムはツリー状の構造で、主に HC アルゴリズムが実行する各ステップをメモリとして保存するために使用されます。樹状図プロットでは、Y 軸はデータ ポイント間のユークリッド距離を示し、X 軸は指定されたデータセットのすべてのデータ ポイントを示します。
デンドログラムの仕組みは、以下の図を使用して説明できます。
上の図では、左側の部分は凝集クラスタリングでクラスターがどのように作成されるかを示し、右側の部分は対応する樹状図を示しています。
JavaScriptのチュートリアル
- 上で説明したように、まず、データポイント P2 と P3 が結合してクラスターを形成し、それに応じて P2 と P3 を長方形で接続する樹状図が作成されます。高さは、データ点間のユークリッド距離に従って決定されます。
- 次のステップでは、P5 と P6 がクラスターを形成し、対応する樹状図が作成されます。 P5 と P6 の間のユークリッド距離が P2 と P3 よりも少し大きいため、以前よりも高くなります。
- ここでも、P1、P2、および P3 を 1 つの樹状図に結合し、P4、P5、および P6 を別の樹状図に結合する 2 つの新しい樹状図が作成されます。
- 最後に、すべてのデータ ポイントを結合した最終的な樹状図が作成されます。
要件に応じて、樹状図ツリー構造を任意のレベルで切り取ることができます。
凝集型階層クラスタリングの Python 実装
次に、Python を使用した凝集型階層クラスタリング アルゴリズムの実際の実装を見ていきます。これを実装するには、K 平均法クラスタリングの前のトピックで使用したのと同じデータセット問題を使用して、両方の概念を簡単に比較できるようにします。
このデータセットには、ショッピングのためにモールを訪れた顧客の情報が含まれています。したがって、モールの所有者は、データセット情報を使用して、顧客のいくつかのパターンまたは特定の行動を見つけたいと考えています。
Python を使用した AHC の実装手順:
実装手順はk-meansクラスタリングと同じですが、クラスタ数の求め方など一部変更があります。以下に手順を示します。
データの前処理手順:
このステップでは、モデルのライブラリとデータセットをインポートします。
# Importing the libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd
上記のコード行は、ライブラリをインポートして、次のような特定のタスクを実行するために使用されます。 しこり 数学的演算の場合、 マットプロットライブラリ グラフまたは散布図を描画するため、および パンダ データセットをインポートするため。
# Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv')
上で説明したように、同じデータセットをインポートしました。 Mall_Customers_data.csv、 K 平均法クラスタリングで行ったように。以下の出力を考えてみましょう。
スリー・ラマヌジャン
ここでは、従属変数に関するそれ以上の情報がないため、特徴の行列のみを抽出します。コードを以下に示します。
x = dataset.iloc[:, [3, 4]].values
ここでは 2D プロットを使用してクラスターを確認するため、3 列と 4 列のみを抽出しました。そこで、年収と支出のスコアを特徴のマトリクスとして考えています。
ステップ 2: デンドログラムを使用して最適なクラスター数を見つける
次に、モデルのデンドログラムを使用して、クラスターの最適な数を見つけます。このために、私たちは使用します サイピー コードの樹状図を直接返す関数を提供するライブラリです。以下のコード行を考えてみましょう。
#Finding the optimal number of clusters using the dendrogram import scipy.cluster.hierarchy as shc dendro = shc.dendrogram(shc.linkage(x, method='ward')) mtp.title('Dendrogrma Plot') mtp.ylabel('Euclidean Distances') mtp.xlabel('Customers') mtp.show()
上記のコード行では、 階層 scipyライブラリのモジュール。このモジュールはメソッドを提供します shc.denrogram()、 それは リンケージ() パラメータとして。リンケージ関数は 2 つのクラスター間の距離を定義するために使用されるため、ここでは x(特徴の行列) とメソッド ' を渡しています。 区 」、階層クラスタリングにおける一般的な結合方法です。
コードの残りの行は、樹状図プロットのラベルを記述します。
出力:
上記のコード行を実行すると、以下の出力が得られます。 :
この樹状図を使用して、モデルに最適なクラスターの数を決定します。このために、 最大垂直距離 それは水平バーをカットしません。以下の図を考えてみましょう。
上の図では、水平バーをカットしていない垂直距離を示しています。視覚化できるように、4番目距離は最大に見えるので、これによると、 クラスターの数は 5 になります (この範囲の垂直線)。 2も承りますnd4 にほぼ等しい数値番目距離ですが、K 平均法アルゴリズムで計算したものと同じであるため、5 つのクラスターを考慮します。
したがって、最適なクラスター数は 5 になります。 次のステップでは、同じものを使用してモデルをトレーニングします。
ステップ 3: 階層的クラスタリング モデルのトレーニング
必要な最適なクラスター数がわかったので、モデルをトレーニングできるようになりました。コードを以下に示します。
C# 辞書
#training the hierarchical model on dataset from sklearn.cluster import AgglomerativeClustering hc= AgglomerativeClustering(n_clusters=5, affinity='euclidean', linkage='ward') y_pred= hc.fit_predict(x)
上記のコードでは、 凝集クラスタリング scikit 学習ライブラリのクラスター モジュールのクラス。
次に、次の名前のこのクラスのオブジェクトを作成しました。 HC。 AgglomerativeClustering クラスは次のパラメータを取ります。
Linuxコマンドのディレクトリ
最後の行では、モデルを適合またはトレーニングするための従属変数 y_pred を作成しました。モデルをトレーニングするだけでなく、各データ ポイントが属するクラスターも返します。
上記のコード行を実行した後、Sypder IDE の変数エクスプローラー オプションを使用すると、y_pred 変数を確認できます。元のデータセットを y_pred 変数と比較できます。以下の画像を考えてみましょう。
上の画像からわかるように、 y_pred クラスター値を示します。これは、顧客 ID 1 が 5 に属していることを意味します。番目クラスター (インデックス付けは 0 から始まるため、4 は 5 を意味します)番目クラスター)、顧客 ID 2 は 4 に属します。番目クラスターなど。
ステップ 4: クラスターの視覚化
モデルのトレーニングが成功したので、データセットに対応するクラスターを視覚化できるようになりました。
ここでは、1 つの変更を除いて、K-means クラスタリングで行ったのと同じコード行を使用します。ここでは、クラスターの最適な数を決定するために樹形図を使用しているため、K 平均法で行った重心をプロットしません。コードを以下に示します。
#visulaizing the clusters mtp.scatter(x[y_pred == 0, 0], x[y_pred == 0, 1], s = 100, c = 'blue', label = 'Cluster 1') mtp.scatter(x[y_pred == 1, 0], x[y_pred == 1, 1], s = 100, c = 'green', label = 'Cluster 2') mtp.scatter(x[y_pred== 2, 0], x[y_pred == 2, 1], s = 100, c = 'red', label = 'Cluster 3') mtp.scatter(x[y_pred == 3, 0], x[y_pred == 3, 1], s = 100, c = 'cyan', label = 'Cluster 4') mtp.scatter(x[y_pred == 4, 0], x[y_pred == 4, 1], s = 100, c = 'magenta', label = 'Cluster 5') mtp.title('Clusters of customers') mtp.xlabel('Annual Income (k$)') mtp.ylabel('Spending Score (1-100)') mtp.legend() mtp.show()
出力: 上記のコード行を実行すると、以下の出力が得られます。