层次聚类3

hello, world~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 欧氏距离和曼哈顿距离是常见的距离度量方式,可以用来计算样本间的距离。下面是使用Python代码实现: 欧氏距离: ```python import numpy as np def euclidean_dist(x, y): return np.sqrt(np.sum(np.power(x-y, 2))) ``` 曼哈顿距离: ```python import numpy as np def manhattan_dist(x, y): return np.sum(np.abs(x-y)) ``` 其中,x和y是两个样本点的特征向量。 2. 自底向上的聚合策略进行层次聚类: 自底向上的聚合策略又称为凝聚层次聚类,是一种从下往上的聚合方法。该方法首先将每个样本看作一个独立的簇,然后计算任意两个簇之间的距离,将距离最近的两个簇合并成一个新的簇,直到所有样本被合并成一个簇为止。下面是使用Python实现凝聚层次聚类的代码: ```python from scipy.cluster.hierarchy import linkage, dendrogram import matplotlib.pyplot as plt # 构造样本数据 X = np.random.randn(10, 2) # 计算距离矩阵 dist_matrix = np.zeros((10, 10)) for i in range(10): for j in range(i+1, 10): dist_matrix[i][j] = euclidean_dist(X[i], X[j]) dist_matrix[j][i] = dist_matrix[i][j] # 层次聚类 Z = linkage(dist_matrix, method='ward') # 绘制聚类结果的树状图 fig = plt.figure(figsize=(10, 5)) dn = dendrogram(Z) plt.show() ``` 3. 自顶向下的聚合策略进行层次聚类: 自顶向下的聚合策略又称为分裂层次聚类,是一种从上往下的分裂方法。该方法首先将所有样本看作一个簇,然后递归地将簇一分为二,直到每个簇只包含一个样本为止。下面是使用Python实现分裂层次聚类的代码: ```python from sklearn.cluster import AgglomerativeClustering # 构造样本数据 X = np.random.randn(10, 2) # 层次聚类 model = AgglomerativeClustering(n_clusters=None, distance_threshold=0) model.fit(X) # 绘制聚类结果的树状图 fig = plt.figure(figsize=(10, 5)) dn = dendrogram(model.children_) plt.show() ``` 4. 根据聚类结果剪枝得到聚类结果: 聚类结果的剪枝可以通过设定一个阈值来实现。对于凝聚层次聚类,可以在层次聚类的过程中设定距离阈值,将距离大于阈值的簇分开;对于分裂层次聚类,可以在层次聚类的过程中设定簇的数量阈值,将簇的数量小于阈值的簇分开。下面是使用Python实现聚类结果剪枝的代码: ```python # 凝聚层次聚类的剪枝 T = 2 # 距离阈值 clusters = [] for i in range(len(Z)): if Z[i][2] > T: break clusters.append([Z[i][0], Z[i][1]]) # 分裂层次聚类的剪枝 K = 3 # 簇的数量阈值 clusters = [] for i in range(len(model.children_)): if len(clusters) >= K: break clusters.append(model.children_[i]) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值