[英]Get number of Clusters (3D)
正如@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.