环状图的聚类可使用 谱聚类算法。
from sklearn import datasets
from sklearn.cluster import SpectralClustering
import matplotlib.pyplot as plt
n_samples = 200
#生成数据
noisy_circles = datasets.make_circles(n_samples=n_samples, factor=.5, noise=.05)
X = []
y = []
pos = noisy_circles[0]
for p in pos:
X.append(p[0])
y.append(p[1])
plt.scatter(X, y)
plt.show()
sc = SpectralClustering(n_clusters=2, affinity="nearest_neighbors")
sc_clusters2 = sc.fit_predict(noisy_circles[0])
# plt.scatter(noisy_circles[:,0], noisy_circles[:,1], c=sc_clusters2)
plt.scatter(X,y, c=sc_clusters2)
plt.show()
生成数据图:
分类结果图: