K-means находит одноэлементный кластер, когда я стандартизирую функции (набор данных для оптовых клиентов) - PullRequest
0 голосов
/ 18 декабря 2018

Я изучаю Набор данных оптовых клиентов .Используя метод локтя, я обнаружил, что k = 5, по-видимому, хорошее количество кластеров.К сожалению, когда я стандартизирую свои функции, я получаю одноэлементный кластер, даже с несколькими узлами.Этого не происходит, когда я не стандартизирую.

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

Вот пример MDS-визуализации результата K-средних.Как видите, в левом нижнем углу рисунка есть точка, которая имеет свой кластер (он имеет уникальный цвет).Это потому, что это выброс?Должен ли я удалить его вручную перед запуском K-средних?

MDS viz of k-means result

Вот MWE, если вы хотите повторить эксперимент самостоятельно.Пожалуйста, не стесняйтесь быть прямолинейным, если я как-то ошибся.

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
from sklearn.manifold import MDS
df = pd.read_csv("./wholesale-dataset.csv")
X = StandardScaler().fit_transform(df.values[:,2:])
km = KMeans(5)
km.fit(X)
mds = MDS().fit_transform(X)
fkm = plt.figure()
fkm.gca().scatter(mds[:,0], mds[:,1], c=km.labels_)

1 Ответ

0 голосов
/ 18 декабря 2018

Нет ничего плохого в том, что k-средние производят кластеры Singleton.

Если в ваших данных есть выбросы, создание таких кластеров, вероятно, улучшает цель SSE для k-средних.Так что это поведение правильное.

Но, судя по вашему графику, я бы сказал, что ваш правильный k равен 1. Там есть один большой шарик, несколько выбросов, но не несколько кластеров.

...