Мой график не показывает результат, когда количество кластеров равно 2 в python - PullRequest
1 голос
/ 06 февраля 2020

Я хочу показать 7 разное количество кластеров на одном изображении, однако оно всегда начинается на кластерах = 3 Когда я не использовал l oop, чтобы показать 7 графиков, он может показывать пи c, когда кластер = 2, я не могу понять, какую ошибку здесь

import numpy as np
import resources as re
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn import metrics
from sklearn.model_selection import train_test_split
dataset , h, c = re.load_csv("CIELab_dataset.csv")
Train_data, Test_data = re.train_test_split(dataset, 0.75)
#plt.show()
plt.figure()
order_plot = 1
for i in range (2,9):

  y_pred = KMeans(n_clusters= i , random_state=0).fit_predict(dataset)
  #Calinski-Harabasz- evaluation critera
  scores = metrics.calinski_harabasz_score(dataset, y_pred)
  plt.scatter(dataset[:, 0], dataset[:, 1], dataset[:, 2], c=y_pred)

  plt.subplot(4, 2, i-1)

  print("the number of predicted clusters",i,"scores:",scores)

plt.show()

enter image description here

вы можете увидеть первое изображение на графике кластеров = 3 (3 разных цвета кластеров), а затем = 4.. в конце 8. но я думаю, что это должно начаться на кластере = 2, но почему это не показывает

1 Ответ

2 голосов
/ 06 февраля 2020

Вы создаете первый субплот после того, как уже подготовили двухкластерные данные. Вам нужно поменять местами строки с plt.scatter и plt.subplot

Пример:

import numpy as np, matplotlib.pyplot as plt
colors = ['_', 'red', 'green', 'blue', 'purple', 'tomato', 'orange', 'darkslateblue', 'olive', 'orange', 'teal']

Правильный порядок:

for a in range(1,10):
    plt.subplot(3,3,a)
    plt.scatter(np.random.randint(0,10, 10), np.random.randint(0,10, 10), c=colors[a])

enter image description here

Верхний левый график красного цвета, поэтому это элемент 1 в списке.

Неправильный порядок:

for a in range(1,10):
    plt.scatter(np.random.randint(0,10, 10), np.random.randint(0,10, 10), c=colors[a])
    plt.subplot(3,3,a)

enter image description here

Верхний левый график зеленого цвета, то есть элемент 2 . Последний субплот пуст.

...