层次聚类

一.定义

  层次聚类(Hierarchical Clustering)是对原始数据集在不同的层次进行划分,直到达到某种条件为止,最后得到树形的聚类结构。按照分类原理的不同,可以分为凝聚法和分裂法,其中凝聚法的应用比较广泛。假设有一个包含m个样本的数据集,C = {c1,c2…cm},首先将其中的每个样本都单独作为一个簇,然后分别计算两个簇之间的距离,找出距离最近的两个簇,再将这两个簇合二为一,不断重复这个过程,直到达到预先设定的聚类数目或者阈值为止。

二.计算距离

1.对象之间(就是数据点之间)的距离,下图是matlab的pdist函数可以使用的距离。

在这里插入图片描述

2.类簇之间的距离,下图是matlab的linkage函数可以使用的。

在这里插入图片描述

三.具体例子

  假如平面上有5个点:P0(1,1), P1(1,2), P2(2,2), P3(3,4), P4(3,5),现在要对这5个点,进行聚类。
  第一步:将所有的点归为一个类簇C(P0,P1,P2,P3,P4,P5)
  第二步:计算每个点与其它点之间的距离,这里用欧式距离,可以得到以下计算结果:

P0P1P2P3P4
P001.001.413.604.47
P11.0001.002.823.60
P21.411.0002.233.16
P33.602.822.2301.00
P44.473.603.161.000

  第三步:找到最近的两个点,合为为一个类,从上边计算结果可知,可以选择P1和P0,先合为一个类族。
  第四步:重复二、三步,直到预先设定的聚类数目或者阈值为止。

四.代码实现

1.Octave

x=[1,1;1,2;2,2;3,4;3,5] //定义5个点
D = pdist(x)            //计算每个点之间的距离,默认是欧式距离,也可以用pdist(x,'距离方法')
Z = squareform(D)       //换成方阵形式
Y = linkage(D)          //计算类族之间的距离
dendrogram(Y)           //可视化聚类

最终结果:
在这里插入图片描述

2.Matlab

x=[1,1;1,2;2,2;3,4;3,5] //定义5个点
D = pdist(x)            //计算每个点之间的距离,默认是欧式距离,也可以用pdist(x,'距离方法')
Z = squareform(D)       //换成方阵形式
Y = linkage(D)          //计算类族之间的距离
dendrogram(Y)           //可视化聚类
T=cluster(Y,'maxclust',n)  //n为聚类的个数

3.python

from sklearn import datasets
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn import preprocessing
from sklearn.cluster import AgglomerativeClustering
from scipy.cluster.hierarchy import linkage, dendrogram
#导入数据集
iris = datasets.load_iris()
iris_data = iris.data
print(iris_data)

data = np.array(iris_data[:50,1:-1])
min_max_scaler = preprocessing.MinMaxScaler()
data_M = min_max_scaler.fit_transform(data)
print(data_M)

#绘制树状图

plt.figure(figsize=(20,6))
Z = linkage(data_M, method='ward', metric='euclidean')
p = dendrogram(Z, 0)
plt.show()

ac = AgglomerativeClustering(n_clusters=3, affinity='euclidean', linkage='ward')
ac.fit(data_M)
#聚类
labels = ac.fit_predict(data_M)
print(labels)

#聚类结果可视化
plt.scatter(data_M[:,0], data_M[:,1], c=labels)
plt.show()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值