首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python中的散点图

python中的散点图
EN

Stack Overflow用户
提问于 2020-05-22 14:20:52
回答 2查看 54关注 0票数 0

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

EN

回答 2

Stack Overflow用户

发布于 2020-05-22 15:23:38

您可以使用K-Means聚类,这是创建此类聚类的最简单方法之一。您可以使用scikit-learn来简化这一过程。我也为你做了PCA,如果你不想做PCA,你可以去掉它,但我强烈建议你应用PCA。

代码语言:javascript
复制
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是您想要创建的集群的数量。

票数 0
EN

Stack Overflow用户

发布于 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椭球体并不是约束所有点的高斯种子。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61949619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档