1:如何用欧氏距离,曼哈顿距离作为距离度量方式进行样本间距离的计算 附代码2:用自底向上的聚合策略进行层次聚类3.用自顶向下的聚合策略进行层次聚类4.如何根据聚类结果剪枝得到聚类结果
时间: 2023-12-10 17:37:28 浏览: 40
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])
```