Мне неясно, почему кластеризация k-средних может перекрываться в кластерах. От Чена (2018) я увидел следующее определение:
".. пусть наблюдения будут образцом, который будет разбит на K непересекающихся кластеров"
Однако я вижу наложение в моих графиках, и я не уверен, почему это так.
Для справки, я пытаюсь кластеризовать многомерный набор данных с тремя переменными (Recency, Frequency, Доход). Чтобы визуализировать кластеризацию, я могу проецировать 3D-данные в 2D с использованием PCA и запускать на этом k-means. Ниже приведен код и график, который я получаю:
df1=tx_user[["Recency","Frequency","Revenue"]]
#standardize
names = df1.columns
# Create the Scaler object
scaler = preprocessing.StandardScaler()
# Fit your data on the scaler object
scaled_df1 = scaler.fit_transform(df1)
df1 = pd.DataFrame(scaled_df1, columns=names)
df1.head()
del scaled_df1
sklearn_pca = PCA(n_components = 2)
X1 = sklearn_pca.fit_transform(df1)
X1 = X1[:, ::-1] # flip axes for better plotting
kmeans = KMeans(3, random_state=0)
labels = kmeans.fit(X1).predict(X1)
plt.scatter(X1[:, 0], X1[:, 1], c=labels, s=40, cmap='viridis');
from sklearn.cluster import KMeans
from scipy.spatial.distance import cdist
def plot_kmeans(kmeans, X, n_clusters=4, rseed=0, ax=None):
labels = kmeans.fit_predict(X)
# plot the input data
ax = ax or plt.gca()
ax.axis('equal')
#ax.set_ylim(-5000,7000)
ax.scatter(X[:, 0], X[:, 1], c=labels, s=40, cmap='viridis', zorder=2)
# plot the representation of the KMeans model
centers = kmeans.cluster_centers_
radii = [cdist(X[labels == i], [center]).max()
for i, center in enumerate(centers)]
for c, r in zip(centers, radii):
ax.add_patch(plt.Circle(c, r, fc='#CCCCCC', lw=3, alpha=0.5, zorder=1))
kmeans = KMeans(n_clusters=4, random_state=0)
plot_kmeans(kmeans, X1)
Мой вопрос: 1. Почему происходит наложение? Мое кластеризация неправильная, если есть? 2. Как k-means решает присвоение кластера в случае совпадения?
Спасибо
Ссылка: Chen, L., Xu, Z., Wang, H. & Liu, S. (2018). Упорядоченный алгоритм кластеризации на основе K-средних и метода PROMETHEE. Международный журнал машинного обучения и кибернетики, 9 (6), 917-926.