Построение центров кластеров KMeans для каждой итерации в Python

Я создал набор данных с 6 кластерами и визуализировал его с помощью приведенного ниже кода и нашел центральные точки кластера для каждой итерации, теперь я хочу визуализировать демонстрацию обновления центроидов кластера в алгоритме KMeans. Эта демонстрация должна включать первые четыре итерации путем создания фигуры 2 × 2 по осям. Я нашел точки, но не могу их построить, не могли бы вы проверить мой код и, посмотрев на него, помочь мне написать алгоритм для точечной диаграммы?

Вот мой код:

import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.datasets import make_blobs
data = make_blobs(n_samples=200, n_features=8, 
                           centers=6, cluster_std=1.8,random_state=101)
data[0].shape
plt.scatter(data[0][:,0],data[0][:,1],c=data[1],cmap='brg')

plt.show()
from sklearn.cluster import KMeans

print("First iteration points:")
kmeans = KMeans(n_clusters=6,random_state=0,max_iter=1)
kmeans.fit(data[0])
centroids=kmeans.cluster_centers_
print(kmeans.cluster_centers_)
print("Second iteration points:")
kmeans = KMeans(n_clusters=6,random_state=0,max_iter=2)
kmeans.fit(data[0])
print(kmeans.cluster_centers_)
print("Third iteration points:")
kmeans = KMeans(n_clusters=6,random_state=0,max_iter=3)
kmeans.fit(data[0])
print(kmeans.cluster_centers_)
print("Forth iteration points:")
kmeans = KMeans(n_clusters=6,random_state=0,max_iter=4)
kmeans.fit(data[0])
print(kmeans.cluster_centers_)

«Можете ли вы проверить мой код и, глядя на него, написать алгоритм для диаграммы рассеяния» - я думаю, вам следует сначала попробовать себя. К сожалению, Stack Overflow — не то место, где можно попросить кого-то другого написать код для вас. Вы можете найти примеры в документации по matplotlib (например, matplotlib.org/3.3.3/gallery/shapes_and_collections/…)

Kacperito 25.12.2020 16:13

да, я пытался миллиард раз, я не хотел, чтобы вы написали код, мне просто нужна помощь, мое утверждение было неверным, я изменил его

Berke Atalay 25.12.2020 16:16
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
2
3 856
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать plt.scatter() и plt.subplots() для достижения этого следующим образом:

import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
data = make_blobs(n_samples=200, n_features=8, 
                           centers=6, cluster_std=1.8,random_state=101)

fig, ax = plt.subplots(nrows=2, ncols=2,figsize=(10,10))

from sklearn.cluster import KMeans
c=d=0
for i in range(4):
    ax[c,d].title.set_text(f"{i+1} iteration points:")
    kmeans = KMeans(n_clusters=6,random_state=0,max_iter=i+1)
    kmeans.fit(data[0])
    centroids=kmeans.cluster_centers_
    ax[c,d].scatter(data[0][:,0],data[0][:,1],c=data[1],cmap='brg')
    ax[c,d].scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s=200, c='black')
    d+=1
    if d==2:
        c+=1
        d=0

Это произведет:

прежде всего, большое спасибо за ваш ответ, но я думаю, что это неправильный ответ на мой вопрос, потому что, когда я делаю это для каждой итерации, он дает точно такой же результат. Мой вывод должен быть примерно таким: datascience.stackexchange.com/questions/87131/…

Berke Atalay 25.12.2020 17:05

Обновил мой ответ. Пожалуйста, проверьте, хотите ли вы этого.

LazyCoder 26.12.2020 13:54

Вы получаете тот же результат, потому что центроиды не меняются после первой итерации для созданных вами больших двоичных объектов. Можете распечатать и проверить.

LazyCoder 26.12.2020 14:00

Другие вопросы по теме