階層的クラスタリング アルゴリズム Python!

ソースノード: 1055669

この記事は、の一部として公開されました データサイエンスブログソン

概要

この記事では、階層型クラスタリングと呼ばれる K 平均法クラスタリングへの別のアプローチを見ていきます。 K 平均または K モードと比較して、階層的クラスタリングには、クラスタリング メカニズムの動作方法に関する異なる基本アルゴリズムがあります。 階層的クラスタリングでは、凝集法または分割法を使用しますが、K 平均法では、重心とユークリッド距離の組み合わせを使用してクラスターを形成します。 デンドログラムを使用して、階層的クラスタリングでクラスターを視覚化できます。これは、意味のある分類を通じて結果をより適切に解釈するのに役立ちます。 デンドログラムを作成するときにクラスターの数を指定する必要はありません。

ここでは、Python を使用して階層型クラスタリング モデルについて説明します。 データセットには 200 のモール顧客のデータがあります。 データ フレームには、各顧客の顧客 ID、ジャンル、年齢、年収、支出スコアがすべて含まれています。 クライアントの支出スコアごとに計算された金額は、収入、1 週間にモールを訪れる回数、100 年間に費やした金額など、いくつかの基準に基づいています。 このスコアの範囲は XNUMX ~ XNUMX です。答えがわからないため、ビジネス上の問題がクラスタリングの問題になります。 データの最終的なカテゴリは不明です。 その結果、私たちの目標は、これまで知られていなかった顧客クラスターを発見することです。

しかし、最初に、階層的クラスタリングにおけるいくつかの重要な用語を調べます。

階層的クラスタリングの重要な用語

リンケージメソッド

(a) 元の観測 a[0],…,a[|a|1] がクラスター (a) にあり、(b) 元のオブジェクト b[0],…,b[|b|1] がクラスター ( b) 次に、XNUMX つのクラスター (a) と (b) を結合するために (b) 間の距離を計算する必要があります。 どのクラスターにも割り当てられていないポイント (d) があるとします。 クラスター (a) がクラスター (d) からどれだけ離れているか、クラスター (b) がクラスター (d) からどれだけ離れているかを把握する必要があります。

クラスターには通常、複数のポイントが含まれるため、距離行列を計算するための別の方法が必要になります。 クラスター間の距離、またはポイントからクラスターへの距離を計算する方法は、リンケージによって決定されます。 以下は、最も一般的に使用されるリンケージ メカニズムの一部です。

シングルリンケージ — クラスターの各ペアについて、最も類似したメンバー間の距離が計算され、最短距離に基づいてクラスターがマージされます。

平均リンケージ — XNUMX つのクラスターのすべてのメンバーと別のクラスターのすべてのメンバーの間の距離が計算されます。 その後、これらの距離の平均を使用して、マージするクラスターを決定します。

完全なリンケージ — クラスターの各ペアについて、最も類似していないメンバー間の距離が計算され、最短距離に基づいてクラスターがマージされます。

中央結合 — 平均リンケージと同様に、平均距離の代わりに中央距離を使用します。

ワードリンケージ — 分散分析法を使用してクラスター間の距離を決定します。

重心リンケージ — 各クラスターの重心は、クラスターに割り当てられたすべてのポイントを平均することによって計算され、クラスター間の距離は、この重心を使用して計算されます。

距離の計算

2 つ以上のクラスター間の距離を計算する方法は複数ありますが、ユークリッド距離が最も一般的です。 Minkowski、City Block、Hamming、Jaccard、Chebyshev などの他の距離メトリックも、階層的クラスタリングで使用できます。 図 XNUMX に示すように、さまざまな距離メトリックが階層的クラスタリングに影響を与えます。

距離計算

樹状図

特徴空間内のオブジェクト間の関係は、デンドログラムによって表されます。 特徴空間では、連続してマージされたオブジェクトの各ペア間の距離を示すために使用されます。 デンドログラムは、データセットの適切なクラスター数を決定する前に、階層クラスターを調べるためによく使用されます。 デンドログラム距離は、XNUMX つのクラスターが結合したときのクラスター間の距離です。 デンドログラムの距離は、XNUMX つ以上のクラスターがばらばらであるか、結合して XNUMX つのクラスターを形成できるかを決定します。

次に、Python を使用した例を見て、階層的クラスタリング モデルを示します。 200 のショッピングモールの顧客データがあります。 データセット. データ フレームには、各顧客の顧客 ID、ジャンル、年齢、年収、支出スコアがすべて含まれています。 クライアントの支出スコアごとに計算された金額は、収入、1 週間にモールを訪れる回数、100 年間に費やした金額など、いくつかの基準に基づいています。 このスコアの範囲は XNUMX ~ XNUMX です。答えがわからないため、ビジネス上の問題がクラスタリングの問題になります。

#1 ライブラリのインポート
numpy を np としてインポート matplotlib.pyplot を plt としてインポート pandas を pd としてインポート
#2 pandas による Mall_Customers データセットのインポート
データセット = pd.read_csv('Mall_Customers.csv') X = dataset.iloc[:, [3,4]].values

階層的クラスタリングにおけるこの新しいステップでは、最適なクラスター数を決定する必要もあります。 今回はエルボー法は使いません。 デンドログラムを利用します。

#3 デンドログラムを使用して最適なクラスター数を見つけます。 # まず、scipy ライブラリをインポートします。 scipy はオープン ソースの # Python ライブラリであり、階層的クラスタリングとデンドログラムの構築を行うためのツールが含まれています。 # 必要なツールのみをインポートします。 scipy.cluster.hierarchy を sch としてインポートします 
#樹状図変数を作成しましょう #linkage は実際には階層的クラスタリングのアルゴリズムそのものであり、#linkage ではどのデータに適用して関与するかを指定する必要があります。 これは X データセット dendrogram = sch.dendrogram(sch.linkage(X, method = "ward")) plt.title('Dendrogram') plt.xlabel('Customers') plt.ylabel('Euclidean distances') plt です。見せる()

Ward 法は、各クラスター内の分散を削減しようとする方法です。 これは、K-means を使用して wcss を最小化してエルボ法チャートをプロットしたときとほぼ同じです。 唯一の違いは、wcss の代わりに、クラスター内のバリアントを最小限に抑えていることです。 各クラスター内では、これが分散です。 デンドログラムを以下に示します。

樹状図

顧客は x 軸で表され、クラスター間のユークリッド距離は y 軸で表されます。 この図に基づいて、クラスターの最適な数をどのように見つけますか? 上の図の赤枠の線である水平線と交差せずにできる最長の垂直距離を見つけたいと考えています。 ダイアグラムの線を数えて、最適なクラスターの数を見つけてみましょう。 このデータセットの場合、クラスター番号は 5 になります。

#4 Mall_Customes データセットへの階層的クラスタリングのフィッティング # 階層的クラスタリングには、凝集型階層的クラスタリングと # 分裂的階層的クラスタリングの 5 つのアルゴリズムがあります。 sklearn.cluster import AgglomerativeClustering hc = AgglomerativeClustering(n_clusters = XNUMX,affinity = 'euclidean',linkage ='ward') # 階層的クラスタリング アルゴリズムをデータセット X に当てはめてみましょう顧客ごとに顧客が属するクラスターを示す # clusters ベクトルを作成します。 y_hc=hc.fit_predict(X)
#5 クラスタの視覚化。 このコードは、k-means 視覚化コードに似ています。 #階層クラスタリングの y_kmeans ベクトル名を y_hc に置き換えるだけ plt.scatter(X[y_hc==0, 0], X[y_hc==0, 1], s=100, c='red', label = 'クラスター 1') plt.scatter(X[y_hc==1, 0], X[y_hc==1, 1], s=100, c='blue', label ='クラスター 2') plt.scatter( X[y_hc==2, 0], X[y_hc==2, 1], s=100, c='緑', ラベル ='クラスター 3') plt.scatter(X[y_hc==3, 0] , X[y_hc==3, 1], s=100, c='シアン', label ='クラスター 4') plt.scatter(X[y_hc==4, 0], X[y_hc==4, 1 ], s=100, c='magenta', label ='Cluster 5') plt.title('顧客のクラスター (階層型クラスタリング モデル)') plt.xlabel('年間収入 (k$)') plt.ylabel ('支出スコア(1-100') plt.show()
クラスタ | 階層的クラスタリング
Cluster1(赤)、Cluster2(青)、Cluster3(緑)、Cluster4(シアン)、Cluster5(マゼンタ)

これらのクラスターは、モールの顧客セグメントと考えることができます。

標準の階層クラスタリング モデルについてはこれですべてです。 データセットとすべてのコードは、Github セクションで入手できます。

まとめ

どのクラスタリングの演習でも、クラスタ数の決定は時間のかかるプロセスです。 ビジネスの商業的側面は、これらのグループから意味を抽出することに関心があるため、クラスターを XNUMX 次元で視覚化し、それらが異なるかどうかを確認することが重要です。 この目標を達成するために、PCA または因子分析を使用できます。 これは、さまざまな利害関係者に最終結果を提示するための一般的な方法であり、誰もが出力を簡単に利用できるようにします。

EndNote

読んでくれてありがとう!
この記事を楽しんで、知識を増やしていただければ幸いです。
お気軽にご連絡ください on メール
言及されていないこと、またはあなたの考えを共有したいことがありますか? 以下にお気軽にコメントしてください。折り返しご連絡させていただきます。

著者について

ハーディクマール M. ダドゥク
データアナリスト | デジタルデータ分析スペシャリスト | データサイエンス学習者
私とつながる LinkedIn
私とつながる githubの

この記事に示されているメディアは、Analytics Vidhyaが所有しておらず、作成者の裁量で使用されています。

ソース: https://www.analyticsvidhya.com/blog/2021/08/hierarchical-clustering-algorithm-python/

タイムスタンプ:

より多くの 分析Vidhya