機械学習アルゴリズムの基礎 ~階層的クラスタリング手法~

1. 階層的クラスタリング手法の原理の紹介

#聚合聚类(层次聚类方法)
"""
1.层次聚类顾名思义就是按照某个层次对样本集进行聚类操作,这里层次并非是真实的层次,实际上指的就是某种距离定义,(我们其实已经学过了很多的距离定义了)
2.层次聚类方法的目标就是采用自下而上的方法去去消除类别的数量,类似与树状图的由叶子结点向根结点靠拢的过程。
3.更简单的说,层次聚类是将初始化的多个类簇看做树节点,每一次迭代都会两两距离相近的类簇进行合并,如此反复,直至最终只剩一个类簇(也就是根结点)。
"""

2. 階層型クラスタリング手法の基本アルゴリズムの実証

階層的クラスタリングの 3 つの異なる方法:
類似性 (距離) の異なる定義に基づいて、階層的クラスタリングのクラスタリング方法は 3 つのタイプに分類されます:
1. 単一リンケージ: 比較される距離は要素のペア間であり、最小距離です。
2.完全結合: 比較される距離は、要素のペア間の最大距離です。
3.グループ平均:比較する距離はクラス間の平均距離です。
この最も基本的なアルゴリズムを計算してデモンストレーションするために、まずいくつかのデータを取り出します。図に示すように、これは ABCDE の 5 つの点の間の距離です。
ここに画像の説明を挿入します

2.1. 単結合の計算方法のデモンストレーション

単一リンク: 比較される距離は、要素のペア間の最小距離です。したがって、各点に対応する最小距離を見つける必要があります。
最初のステップ: A の最小距離は B であるため、AB が最初にマージされ、{AB} として記録されます。
ここに画像の説明を挿入します
ステップ 2: C と AB 全体の合併に関する調査を実施します。ここに画像の説明を挿入します
最終的に、CD が最も短いことがわかり、その組み合わせを {CD} として記録します。
ステップ 3: 全体として {AB}/{CD} に基づいて E の合併を検討します。
ここに画像の説明を挿入します
最終的に、CD->E が最短であることが判明し、その組み合わせを {CDE} として記録しました。
ステップ 4: 最後の 2 つのクラスターをマージするだけです (つまり、{AB}{CDE} マージ)。

2.2.完全連係計算手法の実証

2.完全結合: 比較される距離は、要素のペア間の最大距離です。したがって、各点に対応する最大距離を見つける必要があります。
最初のステップ: A と各要素間の最大距離と最小距離は B であるため、AB が最初にマージされ、{AB} として記録されます。
aad5384fbf5f056a6.png)
ステップ 2:
C と各要素間の最大距離の最小値は次のとおりです。
ここに画像の説明を挿入します
したがって、C の各要素間の最大距離の最小値は D です。CD を結合し、{CD} として記録します。
ステップ 3: 全体として {AB}/{CD} に基づいて E の合併を検討します。
ここに画像の説明を挿入します
最終的に、CD->E が最短であることが判明し、その組み合わせを {CDE} として記録しました。
ステップ 4: 最後の 2 つのクラスターをマージするだけです (つまり、{AB}{CDE} マージ)。

2.3. グループ平均の計算方法のデモンストレーション

グループ平均によって比較される距離は、要素のペア間の平均距離です。したがって、各点に対応する最も平均的な距離を見つける必要があります。
最初のステップ: A と各要素間の最大距離と最小距離は B であるため、AB が最初にマージされ、{AB} として記録されます。
aad5384fbf5f056a6.png)
ステップ 2:
C と各要素間の平均距離の最小値は次のとおりです。
ここに画像の説明を挿入します
したがって、C の各要素間の平均距離の最小値は D です。CD を結合し、{CD} として記録します。
ステップ 3: 全体として {AB}/{CD} に基づいて E の合併を検討します。
ここに画像の説明を挿入します
最終的に、CD->E の平均距離が最も短いことがわかり、その組み合わせを {CDE} として記録します。
ステップ 4: 最後の 2 つのクラスターをマージするだけです (つまり、{AB}{CDE} マージ)。

3. 階層的クラスタリング拡張アルゴリズムの概要

出典: https://blog.csdn.net/huangguohui_123/article/details/106995538

3.1. セントロイド法の原理の紹介

ここに画像の説明を挿入します
2 つのグループが結合した後、次の結合での最小距離が減少する (重心が常に変化している) 場合、この状況を逆転/反転と呼び、樹状図のクロスオーバー現象として現れます。

単純リンケージ、完全リンケージ、平均リンケージなどの一部の階層クラスタリング手法では、反転は発生せず、これらの距離測定は単調です。明らかに、重心法は単調ではありません。

3.2. 中点に基づく重心法

ここに画像の説明を挿入します

3.3.ウォード法

ここに画像の説明を挿入します

4. 階層的クラスタリング手法の実用化

4.1. 階層型クラスタリング手法のクラスタリング応用

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.cluster import AgglomerativeClustering
from scipy.cluster.hierarchy import dendrogram, linkage
#%%
# 读取数据
data = pd.read_excel('Clustering_5.xlsx')
# 提取特征和标签
X = data.iloc[:, :2].values
y = data['y'].values
# 创建凝聚聚类模型
n_clusters = 5
agg_clustering = AgglomerativeClustering(n_clusters=n_clusters)
# 进行聚类
labels = agg_clustering.fit_predict(X)
#%%
# 绘制聚类结果
plt.figure(figsize=(10, 6))
for i in range(n_clusters):
    cluster_points = X[labels == i]
    plt.scatter(cluster_points[:, 0], 
                cluster_points[:, 1], label=f'Cluster {
      
      i + 1}',s=16)

plt.title('Agglomerative clustering')
plt.legend()
plt.show()

クラスタリング効果は比較的良好
ここに画像の説明を挿入します

4.2. 階層型クラスタリング手法 クラスタリングツリー描画

4.2.1.シングルリンク接続方式
#%%
linked = linkage(X, 'single')  # 使用ward方法计算链接
dendrogram(linked, orientation='top', 
           distance_sort='descending', show_leaf_counts=True)
plt.title('Single-linkage连接方法')
plt.show()

ここに画像の説明を挿入します

4.2.2.完全連動接続方法
#%%
linked = linkage(X, 'complete')  # 使用ward方法计算链接
dendrogram(linked, orientation='top', 
           distance_sort='descending', show_leaf_counts=True)
plt.title('Complete-linkage连接方法')
plt.show()

ここに画像の説明を挿入します

4.2.3.グループ平均接続方式
#%%
linked = linkage(X, 'average')  # 使用ward方法计算链接
dendrogram(linked, orientation='top', 
           distance_sort='descending', show_leaf_counts=True)
plt.title('Group-average连接方法')
plt.show()

ここに画像の説明を挿入します

4.2.4.重心接続方法
#%%
linked = linkage(X, 'centroid')  # 使用ward方法计算链接
dendrogram(linked, orientation='top', 
           distance_sort='descending', show_leaf_counts=True)
plt.title('Centroid连接方法')
plt.show()

ここに画像の説明を挿入します

4.2.5.病棟接続方法
# 绘制树状图(聚类树)
linked = linkage(X, 'ward')  # 使用ward方法计算链接
dendrogram(linked, orientation='top', 
           distance_sort='descending', show_leaf_counts=True)
plt.title('Ward连接方法')
plt.show()

ここに画像の説明を挿入します

5. 謝辞

本章内容的完成离不开以下大佬文章的启发和帮助,在这里列出名单,如果对于内容还有不懂的,可以移步对应的文章进行进一步的理解分析。
1.层次聚类法的基础算法演示https://blog.csdn.net/qq_40206371/article/details/123057888
2.层次聚类法的进阶算法演示https://blog.csdn.net/huangguohui_123/article/details/106995538
在文章的最后再次表达由衷的感谢!!

おすすめ

転載: blog.csdn.net/m0_71819746/article/details/133433905