不要删除任何变量,但请考虑使用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不支持原始数据,从而使客户3更类似于1和2。 √2–√(1−0)2+(0−0)2−−−−−−−−−−−−−−−√=1
第三,直线性/相关性不是问题。你的维度是。100个变量足够大,即使有1000万个数据点,我担心k均值可能会在数据中找到虚假模式并适合这种情况。相反,请考虑使用PCA将其压缩到更易于管理的尺寸范围(例如从10或12开始)(可能更高,也许更低),您必须查看每个组件的差异,然后四处探索一点,以找到正确的数字)。是的,您将人为地将一些样本放在一起,但是,您这样做的方式应保留数据中的大部分方差,并优先删除相关性。
~~~~~
编辑:
关于以下有关PCA的评论。是的,它绝对有病态。但这很容易尝试,因此,如果您想减少问题的范围,对我来说仍然不错。
不过,在此说明上,我尝试快速将几套100维合成数据放入k均值算法中,以查看它们的结果。尽管聚类中心位置估计值不那么准确,但是聚类成员资格(即,是否将两个样本分配给同一聚类,这似乎是OP感兴趣的)比我想象的要好得多。所以我之前的直觉很可能是错误的-k均值migth在原始数据上工作得很好。