【问题标题】:Produce pretty cluster plots using KMeans使用 KMeans 生成漂亮的聚类图
【发布时间】:2019-07-14 05:41:16
【问题描述】:

我一直想在 Python 上使用 matplotlib 生成类似 的图,其中有一个阴影区域描绘了该区域内的所有聚类点。但是,我不知道如何实现这一点,有什么想法吗?

情节类似于https://jakevdp.github.io/PythonDataScienceHandbook/05.11-k-means.html;但只需要在背景中有一个阴影区域。

【问题讨论】:

  • 我不认为这很“漂亮”,但很丑。它也经常被误解。
  • 我相信beauty 是一个模糊的概念。在我们定义beauty 之前,任何东西都可以被认为是pretty/ugly。无论如何,这是我正在寻找的一个例子imgur.com/r1eQzYs - 我觉得它很漂亮。如果您能告诉我如何误解这些情节,那就太好了!谢谢xx
  • 着色等往往给人一种分组很好甚至很重要的错误印象。 clusplot 中的自动降维也会导致失真,从而进一步降低可解释性。
  • 我同意,但有时在异常值的情况下(例如),很难在框架的某个角落看到一个小黄点;因此,对于这样的阴影区域,即使不完全合适,类似的问题也会变得有点容易处理。
  • 这是一个当前误解 clusplot 的例子:stats.stackexchange.com/q/393554/7828

标签: python matplotlib plot cluster-analysis


【解决方案1】:

您可以使用这段代码(部分取自astroML.plotting.tools):它需要两个强制参数,均值(即每个KMean 椭圆的中心)和相关的协方差。它产生了一组不同尺度的椭圆(默认情况下,一个与协方差矩阵相关联,一个是两倍大,一个是树的两倍大);它接受直接传递给matplotlib 例程的参数。

from matplotlib import pyplos as plt

def draw_ellipse(mu, C, scales=[1, 2, 3], ax=None, **kwargs):
    from matplotlib.patches import Ellipse
    if ax is None:
        ax = plt.gca()

    # find principal components and rotation angle of ellipse
    sigma_x2 = C[0, 0]
    sigma_y2 = C[1, 1]
    sigma_xy = C[0, 1]

    alpha = 0.5 * np.arctan2(2 * sigma_xy,
                             (sigma_x2 - sigma_y2))
    tmp1 = 0.5 * (sigma_x2 + sigma_y2)
    tmp2 = np.sqrt(0.25 * (sigma_x2 - sigma_y2) ** 2 + sigma_xy ** 2)

    sigma1 = np.sqrt(tmp1 + tmp2)
    sigma2 = np.sqrt(tmp1 - tmp2)

    for scale in scales:
        ax.add_patch(Ellipse((mu[0], mu[1]),
                             2 * scale * sigma1, 2 * scale * sigma2,
                             alpha * 180. / np.pi,
                                  **kwargs))

您可以向它传递参数,例如填充颜色fc='blue' 或 alpha 透明度:例如

draw_ellipse(mean, covariance_matrix, scales=[2], ax=ax,
             ec='k', fc='white', alpha=0.2)

【讨论】:

  • 嘿@MarcoLombardi,谢谢你,但我仍在尝试根据我的代码对其进行一些调整;一旦实现就会接受它:)
  • 好的,没问题,如果您需要任何帮助,请告诉我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-02
  • 1970-01-01
  • 1970-01-01
  • 2016-12-31
  • 1970-01-01
  • 2013-03-24
  • 1970-01-01
相关资源
最近更新 更多