Почему мои точки данных не находятся в правильных точных кластерах при использовании K-Means Clustering? - PullRequest
0 голосов
/ 02 мая 2019

Я построил некоторые точки данных, используя кластеризацию K-Means.Снимок экрана доступен по адресу "https://imageshack.com/i/pomMJXMkj".. Когда я визуализирую эти точки данных, ясно видно, что многие точки не находятся в их соответствующих кластерах, и эта зеленая точка является одной из них, которая находится далеко от своего центроида и явно оченьрядом с синим центроидом. В соответствии с алгоритмом K-Means точка добавляется в этот кластер с ближайшим центроидом. Но почему это не так?

Код для следующего визуального элемента упомянут ниже иссылка для набора данных: "https://github.com/Vivek-Nimmagadda/Player-Prediction-Using-Python/blob/master/Bowlers/Bowlers.csv":

# Importing the Batsmen Dataset

dataset = pd.read_csv('Bowlers\Bowlers.csv')

X = dataset.iloc[:, [1, 2, 3, 4, 5, 6, 7]].values



# Using Elbow Method to find the optimal number of Clusters

from sklearn.cluster import KMeans

wcss = []

for i in range(1, 11):

    kmeans = KMeans(n_clusters=i, init='k-means++', n_init=10, max_iter=300, random_state=0)

    kmeans.fit(X)

    wcss.append(kmeans.inertia_)

plt.plot(range(1, 11), wcss)

plt.title('The Elbow Method')

plt.xlabel('Number of Clusters')

plt.ylabel('WCSS')

plt.show()



# Fitting K-Meaens Clustering Algorithm to the Dataset

kmeans = KMeans(n_clusters=4, init='k-means++', n_init=10, max_iter=300, random_state=0)

y_kmeans = kmeans.fit_predict(X)



# Visualising the Clusters

plt.scatter(X[y_kmeans == 0,2], X[y_kmeans == 0,4], s = 100, c = 'blue', label = 'Good Form')

plt.scatter(X[y_kmeans == 1,2], X[y_kmeans == 1,4], s = 100, c = 'purple', label = 'Average Touch')

plt.scatter(X[y_kmeans == 2,2], X[y_kmeans == 2,4], s = 100, c = 'green', label = 'Peek Form')

plt.scatter(X[y_kmeans == 3,2], X[y_kmeans == 3,4], s = 100, c = 'red', label = 'Poor Form')

plt.scatter(kmeans.cluster_centers_[:, 2], kmeans.cluster_centers_[:, 4], s = 150, c = 'cyan', label = 'Centroids')

plt.title('Recent Form of Bowlers Based on their Stats')

plt.xlabel('Wickets')

plt.ylabel('Average')

plt.legend()

plt.show()

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

1 Ответ

0 голосов
/ 02 мая 2019

Судя по всему, вы кластеризуете набор данных на основе функций в 7 измерениях / переменных.Если бы мы могли просматривать 7 измерений одновременно, вы бы увидели, что эти точки на самом деле правильно сгруппированы вместе.

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

Метод уменьшения размерности, такой как анализ главных компонентов (также доступен в sklearn), может более «эффективно» сократить данные до двух измерений, проецируя данные на ось, содержащую наибольшее количество отклонений в исходном пространстве.Но даже здесь вы можете не видеть желаемого поведения кластеризации.Если это так, то вам просто нужно поверить в свой алгоритм кластеризации!

...