我试着用2-3个变量用不同的颜色表示散点图。我已经绘制了它,但我需要一个圆圈来围绕每个散布集群绘制一个边界,以便于表示。像下面这样的东西……如何做到这一点?

发布于 2020-05-22 15:23:38
您可以使用K-Means聚类,这是创建此类聚类的最简单方法之一。您可以使用scikit-learn来简化这一过程。我也为你做了PCA,如果你不想做PCA,你可以去掉它,但我强烈建议你应用PCA。
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
import numpy as np
def KMeansModel(n):
pca = PCA(n_components=2)
reduced_train_data = pca.fit_transform(train_data)
KM = KMeans(n_clusters=n)
KM.fit(reduced_train_data)
plt.plot(reduced_train_data[:, 0], reduced_train_data[:, 1], 'k.', markersize=2)
centroids = KM.cluster_centers_
for ind,i in enumerate(centroids):
class_inds=np.where(KM.labels_==ind)[0]
max_dist=np.max(metrics.pairwise_distances(i, reduced_train_data[class_inds]))
print(max_dist)
plt.gca().add_artist(plt.Circle(i, max_dist, fill=False))
plt.show()
out = ...这里的n是您想要创建的集群的数量。
发布于 2020-05-22 16:19:51
好的,有两个步骤:聚类和围绕集群构建一个形状。
您似乎已经对集群进行了排序。我建议您使用椭球体来限制群集的形状。有几种方法可以构造这样的椭球。
一种简单的方法是构造勒让德椭球,即以平均值$$ c_i = \frac1n \sum \vec x_i $$为中心的椭球,定义为$$ (x_i - c_i) a^{-1} (x_j - c_j) \le 1 $$,其中$$ a_{ij} = \frac1n (x _i - c_i) (x_j - c_j) (d+ 2) $$
您可能需要扩展椭球体,因为Legendre椭球体并不是约束所有点的高斯种子。
https://stackoverflow.com/questions/61949619
复制相似问题