gpt4 book ai didi

python - 如何使用层次聚类将聚类分配给新的观察结果(测试数据)?

转载 作者:太空狗 更新时间:2023-10-30 02:43:09 28 4
gpt4 key购买 nike

from scipy.cluster.hierarchy import dendrogram, linkage,fcluster
import numpy as np
import matplotlib.pyplot as plt

# data
np.random.seed(4711) # for repeatability of this tutorial
a = np.random.multivariate_normal([10, 0], [[3, 1], [1, 4]], size=[100,])
b = np.random.multivariate_normal([0, 20], [[3, 1], [1, 4]], size=[50,])
X = np.concatenate((a, b),)

plt.scatter(X[:,0], X[:,1])

enter image description here

# fit clusters
Z = linkage(X, method='ward', metric='euclidean', preserve_input=True)

# plot dendrogram

enter image description here

max_d = 50
clusters = fcluster(Z, max_d, criterion='distance')

# now if I have new data
a = np.random.multivariate_normal([10, 0], [[3, 1], [1, 4]], size=[10,])
b = np.random.multivariate_normal([0, 20], [[3, 1], [1, 4]], size=[5,])
X_test = np.concatenate((a, b),)
print(X_test.shape) # 150 samples with 2 dimensions
plt.scatter(X_test[:,0], X_test[:,1])
plt.show()

enter image description here

如何计算新数据的距离并使用来自训练数据的集群分配集群?

代码引用:joernhees.de

最佳答案

你不知道。

聚类没有训练和测试阶段。这是一种探索性方法。您可以探索数据,也可以通过重新运行算法 来探索新数据。但根据该算法的本质,您无法有意义地将新数据“分配”给旧结构,因为该数据可能会完全改变已发现的结构。

如果要分类,使用分类器。

聚类算法不是分类器的替代品。如果您想对新实例进行分类,请使用分类器,并使用例如这个工作流程:

  1. 通过聚类探索数据(多次)
  2. 用领域专家认为有意义的集群标记训练数据(验证集群!)
  3. 训练分类器
  4. 使用分类器以相同方式标记新实例

当然,也有一些异常(exception)。在 k-means 和 Ward 中(但不是例如在单链接中)最近的质心分类器可以在某种程度上将发现的模型直接应用于新数据。尽管如此,这仍然意味着将聚类“转换”为静态分类器,并且结果可能不再是完整数据集上的局部最优(另请参阅:概念漂移)

关于python - 如何使用层次聚类将聚类分配给新的观察结果(测试数据)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34500621/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com