繁体   English   中英

获取集群数量(3D)

[英]Get number of Clusters (3D)

我有一个关于集群的问题。 当您使用 k-最近邻算法时,您必须说您期望有多少个集群。 我现在的问题是,我有一些运行,其中集群的数量会有所不同。 我查了一下,有一些方法可以限制你拥有多少个集群,但这些算法适用于二维问题。 就我而言,我具有三个功能。 您知道我可以使用哪些算法来解决三维问题吗? 如果有人可以帮助我,我会很高兴,因为我自己也做了一些研究,但我找不到任何东西。 :)

例如,它应该定位两个集群,一个单点和数据行作为第二个集群: 第一个例子

这里以第二个例子为例,在这里我期望算法可以自动找到三个集群,长线,短线和单点: 第二个例子

谢谢。 :)

正如@ForceBru 在评论中所说,您也可以将 k-means 算法用于 3D 数据。 当我必须处理要聚类的 3D 点时,我总是使用sklearn.cluster.KMeans

还请查看此链接,您可以在其中找到一个简单的示例来开始:

在此处输入图像描述

上面链接中提供的示例的关键部分如下:

from sklearn.cluster import KMeans
from sklearn import datasets

np.random.seed(5)

iris = datasets.load_iris()
X = iris.data
y = iris.target

estimators = [
    ("k_means_iris_8", KMeans(n_clusters=8)),
    ("k_means_iris_3", KMeans(n_clusters=3)),
    ("k_means_iris_bad_init", KMeans(n_clusters=3, n_init=1, init="random")),
]

您也可以尝试使用 DBSCAN 算法(但我不是它的专家)。 看看这里

编辑

我从sklearn.cluster库中研究了一点 DBSCAN 算法,我还在这里找到了一个有趣的 SO 答案。 因此,当事先不知道集群的数量时,您可以执行以下操作(我已尝试重现您的输入):

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN

data = np.array(
    [[0,0,0], [1,1,1], [2,2,2], [3,3,3], [4,4,4], [5,5,5], [20, 20, 20]]
)

model = DBSCAN(eps=2.5, min_samples=2)
model.fit_predict(data)
pred = model.fit_predict(data)

fig = plt.figure()
ax = plt.axes(projection='3d')

ax.scatter(data[:,0], data[:,1], data[:,2], c=model.labels_, s=20)
plt.show()

print("number of cluster found: {}".format(len(set(model.labels_))))
print('cluster for each point: ', model.labels_)

这是我从上面的代码中得到的: 在此处输入图像描述

尝试研究文档中的 DBSCAN 参数,然后调整它们以满足您的目标。

最后, 这里有很多其他的聚类算法,看看吧!

希望能帮助到你!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM