Создавайте симпатичные кластерные сюжеты, используя KMeans - PullRequest
0 голосов
/ 20 февраля 2019

Я имел в виду создание подобных графиков, таких как , используя matplotlib на Python, где есть заштрихованная область, изображающая кластер со всеми точками кластера внутри области.Но я не понимаю, как мне этого добиться, идеи?

Графики похожи на https://jakevdp.github.io/PythonDataScienceHandbook/05.11-k-means.html;, но требуют только затененную область на заднем плане.

1 Ответ

0 голосов
/ 20 февраля 2019

Вы можете использовать этот код (частично взят из 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' или альфа-прозрачность: например,

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