不要丢弃任何变量,但要考虑使用 PCA。这就是为什么。
首先,正如 Anony-mousse 所指出的,k-means 不会受到共线性/相关性的严重影响。您不需要因此而丢弃信息。
其次,如果您以错误的方式删除变量,您将人为地将一些样本拉得更近。一个例子:
Customer CatA CatB CatC
1 1 0 0
2 0 1 0
3 0 0 1
(我删除了 % 符号,只是将值置于 0 和 1 之间,受到约束,因此它们的总和为 1。)
每个客户在其自然 3d 空间中的欧式距离为(1−0)2+(0−1)2+(0−0)2−−−−−−−−−−−−−−−−−−−−−−−√=2–√
现在假设你放弃了 CatC。
Customer CatA CatB
1 1 0
2 0 1
3 0 0
现在客户 1 和 2 之间的距离仍然是,但客户 1 和 3 以及客户 2 和 3 之间的距离只有 . 您人为地使客户 3 与 1 和 2 更相似,这是原始数据不支持的。2–√(1−0)2+(0−0)2−−−−−−−−−−−−−−−√=1
第三,共线性/相关性不是问题。你的维度是。100 个变量足够大,即使有 1000 万个数据点,我担心 k-means 可能会在数据中找到虚假模式并与之匹配。相反,考虑使用 PCA 将其压缩到更易于管理的维数——比如从 10 或 12 开始(可能更高,也可能更低——你必须查看每个组件的方差,然后玩转一点,找到正确的数字)。这样做会人为地将一些样本拉得更近,是的,但是这样做的方式应该保留数据中的大部分方差,并且会优先消除相关性。
~~~~~
编辑:
回复,下面关于 PCA 的评论。是的,它绝对有病态。但它非常快速和容易尝试,所以如果你想减少问题的维度,对我来说仍然是一个不错的选择。
尽管如此,我还是尝试快速将几组 100 维合成数据放入 k-means 算法中,看看他们想出了什么。虽然集群中心位置估计不是那么准确,但集群成员(即两个样本是否分配到同一个集群,这似乎是 OP 感兴趣的)比我想象的要好得多。所以我之前的直觉很可能是错误的——k-means 可以很好地处理原始数据。