我正在学习Wholesale customers dataset。运行肘部方法,我发现k=5似乎是一个很好的集群数量。不幸的是,当我标准化我的特性时,我得到了一个单例集群,即使有几个init。当我没有标准化的时候,这是不会发生的。
我知道功能的标准化是一个经常被问到的问题,但是我仍然不明白这是不是一个好的实践。在这里我进行标准化,因为某些功能的差异很大。如果这是个坏主意,你能解释一下为什么吗?
以下是K-means结果的MDS可视化示例。正如你所看到的,在图片的左下角有一个点,它有自己的簇(它有一个独特的颜色)。是因为它是异常值吗?在运行K-means之前,我应该手动删除它吗?

如果你想自己重新运行这个实验,这里有一个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_)发布于 2018-12-18 15:12:34
k-means生成Singleton集群没有什么问题。
当你的数据中有异常值时,进行这样的聚类可能会提高k-means的SSE目标。所以这个行为是正确的。
但从你的图来看,我认为你的正确k是1。那里有一个大的斑点,一些异常值,但不是多个集群。
https://stackoverflow.com/questions/53824036
复制相似问题