Визуализация каждого этапа в методе k-средних

Здравствуйте и вновь добро пожаловать на занятия по теме «Кластерный анализ и машинное обучение без учителя на языке Python».

В этой части я попытаюсь дать визуальное представление того, что происходит при каждой итерации в методе k-средних. С технической точки зрения эта задача не требует особых изменений в предыдущем коде метода k-средних, поэтому если вы захотите сначала попробовать самостоятельно справиться с ней, то я настоятельно рекомендую в качестве упражнения так и сделать.

Мы собираемся нарисовать диаграммы рассеяния в сетке координат, в которой каждый подграфик будет представлять одну полную итерацию в методе k-средних. Суть того, что надо сделать, – это взять цветную диаграмму рассеяния из предыдущего кода и вставить её в основной цикл for, чтобы она прорисовывалась на каждой итерации. Чтобы убедиться, что мы не переписываем диаграмму рассеяния поверх предыдущей, нам необходимо настроить сетку координат и создать отдельный график для каждой точки в этой сетке.

В моём коде основные изменения находятся прямо перед основным циклом, где инициируется сеть координат в цвете:

    …

    for k in xrange(K):

        M[k] = X[np.random.choice(N)]

    grid_width = 5

    grid_height = max_iter / grid_width

    random_colors = np.random.random((K, 3))

    plt.figure()

    costs = np.zeros(max_iter)

    for i in xrange(max_iter):

    …

И изменения внутри основного цикла for, в результате которых текущие границы распределения кластеров раскрашиваются случайными цветами и выводится на экран диаграмма рассеяния до обновления.

    …

    costs = np.zeros(max_iter)

    for i in xrange(max_iter):

        colors = R.dot(random_colors)

        plt.subplot(grid_width, grid_height, i+1)

        plt.scatter(X[:,0], X[:,1], c=colors)

        for k in xrange(K):

        …

Все остальноё остаётся совершенно неизменным.

Запустим программу и посмотрим, что получится:

Визуализация каждого этапа в методе k-средних

Итак, сначала видим наши три кластера.

Далее – распределение кластеров при каждой итерации. У нас их 10. Как видите, первая диаграмма вся раскрашена одним цветом. Почему так?

Потому что ещё не установлены границы охвата кластеров, а потому они все имеют одинаковое значение. Обратите внимание, что наибольшие изменения в границах охвата кластеров произошли на первых нескольких этапах, что логично – ведь это отвечает сильнейшему уменьшению функции стоимости.

Понравилась статья? Поделить с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: