Почему мои точки данных не находятся в своих правильных точных кластерах при использовании кластеризации K-средних?

Я построил некоторые точки данных, используя кластеризацию K-средних. Скриншот доступен по адресу «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()

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


person Vivek    schedule 02.05.2019    source источник
comment
Вы можете попробовать использовать цикл for в самом графике. Эта ссылка может быть вам полезна. benalexkeen.com/k-means-clustering-in-python   -  person Ishan Dixit    schedule 02.05.2019


Ответы (1)


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

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

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

person JimmyOnThePage    schedule 02.05.2019