目次
階層的クラスタリングと K 平均法の違いは何ですか?
階層的クラスタリングとは何ですか?
階層的クラスタリングのタイプ
凝集型階層クラスタリング
分割階層クラスタリング
近接行列の作成
階層クラスタリングの実行
Python コードの実践例
役に立ったと思われる場合は、星を付けてください。
ホームページ バックエンド開発 Python チュートリアル 階層的クラスタリングを 1 つの記事で理解する (Python コード)

階層的クラスタリングを 1 つの記事で理解する (Python コード)

Apr 11, 2023 pm 09:13 PM
python コード 階層的クラスタリング

階層的クラスタリングを 1 つの記事で理解する (Python コード)

まず、クラスタリングは機械学習の教師なし学習に属し、有名なK-meansなど多くの手法があります。階層クラスタリングもクラスタリングの一種で、非常に一般的に使用されます。次に、K 平均法の基本原理を簡単に確認してから、誰にとっても理解しやすいように、階層的クラスタリングの定義と階層的な手順をゆっくりと紹介します。

階層的クラスタリングと K 平均法の違いは何ですか?

K 平均法の動作原理は、次のように簡単に要約できます。

  • クラスターの数 (k) を決定します。
  • データから k 点をランダムに選択します。 centroids
  • すべてのポイントを最も近いクラスターの重心に割り当てます
  • 新しく形成されたクラスターの重心を計算します
  • 手順 3 と 4 を繰り返します

これは新しく形成されたクラスターの重心が変わらないか、最大反復回数に達するまでの反復プロセスです。

しかし、K 平均法にはいくつかの欠点があります。アルゴリズムを開始する前に、クラスターの数 K を決定する必要があります。しかし、実際には、クラスターの数がいくつあるべきかわかりません。そのため、通常は自分自身の理解に基づいて決定します。 . 最初に値を設定すると、理解と実際の状況に多少の誤差が生じる可能性があります。

階層的クラスタリングはまったく異なります。最初にクラスタの数を指定する必要はありません。代わりに、最初に階層的クラスタリング全体を完全に形成し、次に適切な距離を決定することによって、対応するクラスタ番号を決定します。および合計は自動的に見つけることができます。

階層的クラスタリングとは何ですか?

階層的クラスタリングがどのようなものかを浅いものから深いものまで紹介しましょう。簡単な例から始めましょう。

次の点があり、それらをグループ化したいとします。

階層的クラスタリングを 1 つの記事で理解する (Python コード)

これらの各点を別個のクラスター、つまり 4 つのクラスターに割り当てることができます ( 4 色):

階層的クラスタリングを 1 つの記事で理解する (Python コード)

次に、これらのクラスターの類似性 (距離) に基づいて、最も類似した (最も近い) 点がグループ化され、クラスターが 1 つだけ残るまでこのプロセスを繰り返します。 :

階層的クラスタリングを 1 つの記事で理解する (Python コード)

上記は基本的に階層を構築することです。まずこれを理解してください。後でその階層化手順を詳しく紹介します。

階層的クラスタリングのタイプ

階層的クラスタリングには主に 2 つのタイプがあります:

  • 凝集型階層的クラスタリング
  • 分割型階層的クラスタリング

凝集型階層クラスタリング

まず、すべてのポイントを個別のクラスターにし、最終的にクラスターが 1 つだけになるまで、類似性によってそれらを結合し続けます。これが凝集型階層クラスタリングです。プロセスは次のとおりです。上で述べたことと一致します。

分割階層クラスタリング

分割階層クラスタリングはその逆で、単一のクラスターから開始して、分割できなくなるまで徐々に分割します (つまり、各ポイントがクラスターになります)。

したがって、データ ポイントが 10、100、または 1000 個あるかどうかは問題ではありません。これらのポイントはすべて、最初は同じクラスターに属しています。 #次に、反復ごとにクラスター内の最も遠い 2 つのポイントを分割し、各クラスターに 1 つのポイントのみが含まれるまでこのプロセスを繰り返します。

階層的クラスタリングを 1 つの記事で理解する (Python コード)

#上記のプロセスは階層クラスタリングを分割しています。 。

階層的クラスタリングを実行する手順階層的クラスタリングを 1 つの記事で理解する (Python コード)

階層的クラスタリングの一般的なプロセスは上で説明しましたが、ここで重要な点になります。点間の類似性をどのように判断するかです。

これはクラスタリングにおける最も重要な問題の 1 つであり、類似性を計算する一般的な方法は、これらのクラスターの重心間の距離を計算することです。最小距離を持つ点は類似点と呼ばれ、それらを結合することも、距離ベースのアルゴリズムと呼ぶこともできます。

階層的クラスタリングにも、各点間の距離を格納する近接行列と呼ばれる概念があります。以下では、類似度、近接行列、および階層的クラスタリングの具体的な手順を計算する方法を理解するために例を使用します。

ケースの紹介

教師が生徒をさまざまなグループに分けたいと考えているとします。課題の各生徒のスコアがわかったので、これらのスコアに基づいて生徒をグループに分けたいと思います。ここではグループの数について設定された目標はありません。教師はどのタイプの生徒をどのグループに割り当てるべきかわからないため、教師あり学習問題として解決することはできません。以下では、階層的クラスタリングを適用して学生をさまざまなグループに分類してみます。

以下は 5 人の学生の結果です:

階層的クラスタリングを 1 つの記事で理解する (Python コード)

近接行列の作成

まず、n 正方行列の形状を取得できるように、各点間の距離を保存する近接行列を作成する必要があります。 Xnの。

この場合、次の 5 x 5 の近接行列が得られます。

階層的クラスタリングを 1 つの記事で理解する (Python コード)

行列には 2 つの注意点があります。

  • 点からの点までの距離が常に 0 であるため、行列の対角要素は常に 0 になります。
  • ユークリッド距離公式を使用して非対角要素の距離を計算します

たとえば、点 1 と点 2 の間の距離を計算したいとします。計算式は次のとおりです。

階層的クラスタリングを 1 つの記事で理解する (Python コード)

同様に、この計算方法を完了した後、近接行列の残りの要素。

階層クラスタリングの実行

これは、凝集型階層クラスタリングを使用して実装されます。

ステップ 1: まず、すべてのポイントを 1 つのクラスターに割り当てます。

階層的クラスタリングを 1 つの記事で理解する (Python コード)

ここでは、異なる色が異なるクラスターを表しており、そのうちの 5 つはデータ ポイントにあります。つまり、5 つの異なるクラスターが存在します。

ステップ 2: 次に、近接行列で最小距離を見つけて、最小距離の点を結合する必要があります。次に、近接行列を更新します。

階層的クラスタリングを 1 つの記事で理解する (Python コード)

最小距離は 3 なので、ポイント 1 と 2 をマージします。

階層的クラスタリングを 1 つの記事で理解する (Python コード)

# # 更新されたクラスターを見て、それに応じて近接行列を更新しましょう:

階層的クラスタリングを 1 つの記事で理解する (Python コード)

# 更新後、2 つの点 1 と 2 の間の最大値 (7, 10) を取得します。 2 を使用して、このクラスターの値を置き換えます。もちろん、最大値に加えて、最小値または平均値を取得することもできます。次に、これらのクラスターの近接行列を再度計算します。

階層的クラスタリングを 1 つの記事で理解する (Python コード)

ステップ 3: クラスターが 1 つだけ残るまでステップ 2 を繰り返します。

すべての手順を繰り返すと、以下に示すようにマージされたクラスターが得られます。

階層的クラスタリングを 1 つの記事で理解する (Python コード)

これが、凝集型階層クラスタリングの仕組みです。しかし問題は、いくつのグループに分けるべきかまだわからないということです。グループ 2、3、または 4 ですか?

まずはクラスターの数を選択する方法から始めましょう。

クラスターの数はどのように選択すればよいですか?

階層的クラスタリングのクラスター数を取得するために、デンドログラムと呼ばれる概念を使用します。

樹状図を使用すると、クラスターの数をより簡単に選択できます。

上の例に戻ります。 2 つのクラスターをマージすると、樹状図はこれらのクラスター間の距離を記録し、それをグラフィックで表します。以下は樹状図の元の状態です。横軸は各点のマークを記録し、縦軸は点間の距離を記録します。がクラスターの場合、それらは樹状図内で接続され、接続の高さがポイント間の距離になります。以下は、今実行した階層的クラスタリングのプロセスです。

階層的クラスタリングを 1 つの記事で理解する (Python コード)

次に、上記のプロセスの樹形図の描画を開始します。サンプル 1 と 2 のマージから開始すると、これら 2 つのサンプル間の距離は 3 になります。

階層的クラスタリングを 1 つの記事で理解する (Python コード)

1 と 2 がマージされていることがわかります。縦線は 1 と 2 の間の距離を表します。同様に、クラスターを結合するすべてのステップが階層的クラスター化プロセスに従って描画され、最終的に次のような樹形図が得られます。

階層的クラスタリングを 1 つの記事で理解する (Python コード)

樹状図を使用すると、階層的クラスタリングのステップを明確に視覚化できます。樹形図の垂直線の間隔が離れるほど、クラスター間の距離は長くなります。

この樹状図を使用すると、クラスターの数を決定するのがはるかに簡単になります。

これで、距離のしきい値を設定し、水平線を描くことができます。たとえば、しきい値を 12 に設定し、次のように水平線を引きます。

階層的クラスタリングを 1 つの記事で理解する (Python コード)

交点からわかるように、クラスターの数は、水平線のしきい値と垂直線の量 (赤い線は 2 本の垂直線と交差します。クラスターは 2 つになります)。横軸に対応して、1 つのクラスターにはサンプル セット (1、2、4) が​​あり、もう 1 つのクラスターにはサンプル セット (3、5) があります。

このようにして、樹状図を通じて階層的クラスタリングにおけるクラスターの数を決定する問題を解決します。

Python コードの実践例

上記は理論的な基礎であり、数学的な基礎が少しあれば誰でも理解できます。 Python コードを使用してこのプロセスを実装する方法は次のとおりです。ここでは、表示する顧客セグメンテーション データを示します。

データセットとコードは私の GitHub リポジトリにあります:

https://github.com/xiaoyusmd/PythonDataScience

役に立ったと思われる場合は、星を付けてください。

このデータは、UCI 機械学習ライブラリから取得したものです。私たちの目的は、牛乳、食料品、地域などのさまざまな製品カテゴリーに対する年間支出に基づいて、卸売業者の顧客をセグメント化することです。

まずデータを標準化して、同じディメンション内のすべてのデータを計算しやすくし、次に階層的クラスタリングを適用して顧客をセグメント化します。

from sklearn.preprocessing import normalize
data_scaled = normalize(data)
data_scaled = pd.DataFrame(data_scaled, columns=data.columns)
import scipy.cluster.hierarchy as shc
plt.figure(figsize=(10, 7))
plt.title("Dendrograms")
dend = shc.dendrogram(shc.linkage(data_scaled, method='ward'))
ログイン後にコピー

階層的クラスタリングを 1 つの記事で理解する (Python コード)

X 軸にはすべてのサンプルが含まれ、Y 軸はこれらのサンプル間の距離を表します。最大距離の垂直線は青い線です。しきい値 6 で樹状図を切り取ることにしたとします:

plt.figure(figsize=(10, 7))
plt.title("Dendrograms")
dend = shc.dendrogram(shc.linkage(data_scaled, method='ward'))
plt.axhline(y=6, color='r', linestyle='--')
ログイン後にコピー

階層的クラスタリングを 1 つの記事で理解する (Python コード)

2 つのクラスターがあるので、次のことが必要です。クラスターに階層クラスタリングを適用するには:

from sklearn.cluster import AgglomerativeClustering
cluster = AgglomerativeClustering(n_clusters=2, affinity='euclidean', linkage='ward')
cluster.fit_predict(data_scaled)
ログイン後にコピー

階層的クラスタリングを 1 つの記事で理解する (Python コード)

2 つのクラスターを定義したため、出力には 0 と 1 の値が表示されます。 0 は最初のクラスターに属する点を表し、1 は 2 番目のクラスターに属する点を表します。

plt.figure(figsize=(10, 7))
plt.scatter(data_scaled['Milk'], data_scaled['Grocery'], c=cluster.labels_)
ログイン後にコピー

階層的クラスタリングを 1 つの記事で理解する (Python コード)

この時点で、クラスタリングは正常に完了しました。

以上が階層的クラスタリングを 1 つの記事で理解する (Python コード)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPおよびPython:さまざまなパラダイムが説明されています PHPおよびPython:さまざまなパラダイムが説明されています Apr 18, 2025 am 12:26 AM

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPとPythonの選択:ガイド PHPとPythonの選択:ガイド Apr 18, 2025 am 12:24 AM

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

Python vs. JavaScript:学習曲線と使いやすさ Python vs. JavaScript:学習曲線と使いやすさ Apr 16, 2025 am 12:12 AM

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

Visual StudioコードはPythonで使用できますか Visual StudioコードはPythonで使用できますか Apr 15, 2025 pm 08:18 PM

VSコードはPythonの書き込みに使用でき、Pythonアプリケーションを開発するための理想的なツールになる多くの機能を提供できます。ユーザーは以下を可能にします。Python拡張機能をインストールして、コードの完了、構文の強調表示、デバッグなどの関数を取得できます。デバッガーを使用して、コードを段階的に追跡し、エラーを見つけて修正します。バージョンコントロールのためにGitを統合します。コードフォーマットツールを使用して、コードの一貫性を維持します。糸くずツールを使用して、事前に潜在的な問題を発見します。

VSCODE拡張機能は悪意がありますか? VSCODE拡張機能は悪意がありますか? Apr 15, 2025 pm 07:57 PM

VSコード拡張機能は、悪意のあるコードの隠れ、脆弱性の活用、合法的な拡張機能としての自慰行為など、悪意のあるリスクを引き起こします。悪意のある拡張機能を識別する方法には、パブリッシャーのチェック、コメントの読み取り、コードのチェック、およびインストールに注意してください。セキュリティ対策には、セキュリティ認識、良好な習慣、定期的な更新、ウイルス対策ソフトウェアも含まれます。

Windows 8でコードを実行できます Windows 8でコードを実行できます Apr 15, 2025 pm 07:24 PM

VSコードはWindows 8で実行できますが、エクスペリエンスは大きくない場合があります。まず、システムが最新のパッチに更新されていることを確認してから、システムアーキテクチャに一致するVSコードインストールパッケージをダウンロードして、プロンプトとしてインストールします。インストール後、一部の拡張機能はWindows 8と互換性があり、代替拡張機能を探すか、仮想マシンで新しいWindowsシステムを使用する必要があることに注意してください。必要な拡張機能をインストールして、適切に動作するかどうかを確認します。 Windows 8ではVSコードは実行可能ですが、開発エクスペリエンスとセキュリティを向上させるために、新しいWindowsシステムにアップグレードすることをお勧めします。

PHPとPython:彼らの歴史を深く掘り下げます PHPとPython:彼らの歴史を深く掘り下げます Apr 18, 2025 am 12:25 AM

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

ターミナルVSCODEでプログラムを実行する方法 ターミナルVSCODEでプログラムを実行する方法 Apr 15, 2025 pm 06:42 PM

VSコードでは、次の手順を通じて端末でプログラムを実行できます。コードを準備し、統合端子を開き、コードディレクトリが端末作業ディレクトリと一致していることを確認します。プログラミング言語(pythonのpython your_file_name.pyなど)に従って実行コマンドを選択して、それが正常に実行されるかどうかを確認し、エラーを解決します。デバッガーを使用して、デバッグ効率を向上させます。

See all articles