k均值聚类中可以有重叠吗?

问题描述 投票:0回答:1

我不清楚为什么k均值聚类可以在聚类中重叠。在Chen(2018)中,我看到了以下定义:

“ ..让观察结果成为样本集,将其划分为K个不相交的簇”

但是我发现地块有重叠,并且不确定为什么会这样。

作为参考,我正在尝试将具有三个变量(新近度,频率,收入)的多维数据集聚类。为了可视化群集,我可以使用PCA将3D数据投影到2D并在其上运行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)

k-means plot

我的问题是:1.为什么会有重叠?如果存在我的聚类错误吗?2.万一有重叠,k-means如何决定簇的分配?

谢谢

参考:Chen,L.,Xu,Z.,Wang,H.,and Liu,S.(2018年)。基于K均值和PROMETHEE方法的有序聚类算法。国际机器学习与控制论杂志,9(6),917-926。

cluster-analysis k-means
1个回答
0
投票

K-均值通过平均逼近计算k个聚类。每个聚类由其计算的中心定义,因此按定义是唯一的。

样品分配是在距群集中心最近距离的群集上进行的,根据定义,群集也是唯一的。因此,从这个意义上讲,存在NO OVERLAP

但是对于给定的距离d>0,一个样本可能在d距离以内的一个以上聚类中心的距离内(可能)。这就是您说overlap时看到的。但是,样本仍被分配给最接近的聚类,而不是所有样本。因此没有重叠。

NOTE:如果样本到一个以上聚类中心的距离最近完全相同,则可以在最接近的聚类之间进行随机分配,并且这对算法或结果没有什么影响,因为聚类可以重新分配后计算。

© www.soinside.com 2019 - 2024. All rights reserved.