当我对要素进行标准化时,K-means会找到一个单例集群(批发客户数据集)

时间:2018-12-17 22:41:17

标签: cluster-analysis data-mining k-means data-cleaning dimensionality-reduction

我正在研究Wholesale customers dataset。运行弯头方法,我发现k = 5似乎是很多簇。不幸的是,当我标准化功能时,我得到了一个单例集群,即使有多个init。当我不标准化时,不会发生这种情况。

我知道功能的标准化是一个经常提出的问题,但是我仍然不知道这是否是一个好习惯。我在这里进行标准化是因为某些功能的差异非常不同。如果这里不是个好主意,您能解释一下原因吗?

以下是K-均值结果的MDS可视化示例。如您所见,在图片的左下方有一个点,该点具有自己的簇(它具有唯一的颜色)。是因为这是一个离群值吗?我应该在运行K-means之前手动将其删除吗?

MDS viz of k-means result

如果您想自己重新运行实验,请点击此处。如果我以某种方式犯了一个错误,请不要犹豫。

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 :(得分:0)

产生单例簇的k均值没有问题。

当数据中存在异常值时,进行此类聚类可能会改善k均值的SSE目标。因此,这种行为是正确的。

但是从您的情节来看,我认为您的正确k为1。那里有一个大斑点,有些离群值,但没有多个聚类。