K-mean 聚类之前的 PCA

数据挖掘 聚类 特征选择 scikit-学习 k-均值 主成分分析
2021-10-03 08:39:13

如果我在特征向量上应用 PCA,然后进行聚类,如下所示:

reduced_data = PCA(n_components=2).fit_transform(data)
kmeans = KMeans(init='k-means++', n_clusters=n_digits, n_init=10)
kmeans.fit(reduced_data)
  1. 减少的数据将是 PCA 组件方面的,因此在 kmean 中聚类后,您可以获得每个点的标签(reduced_data),如何从原始数据中知道哪一个?

  2. 如何使用有关集群数量的多个 PCA 组件?谢谢。

3个回答
  1. PCA 降低了维度。它不会改变您拥有的观察次数。它也不会改变数据的顺序。原始数据集中的第 n 个观测值仍将是 PCA 后的第 n 个观测值。

  2. 在 PCA 中选择组件的数量和在 K-Means 中选择集群的数量是相互独立的。K-Means 和 PCA 都试图“简化/总结”数据,但它们的机制却大不相同。PCA 试图找到解释大部分方差的低维表示。K-Means 寻求在观察中找到同质子组。

    • 对于 PCA,最佳分量数是通过碎石图直观地确定或使用 Kaiser 准则以数学方式确定(删除特征值 <1 的所有分量)。根据我的经验,两者并不总是给出相同的结果,但差异可以忽略不计。

Screeplot (source) 超出第 4 个组件没有多大意义。边际收益递减规律。

  • 对于 K-Means:由于增加聚类的数量总是会减小从质心到数据点的距离,所以增加 K 总是会减小这个度量,当 K 与数据点的数量相同时,会达到 0 的极端。如果我们绘制簇内到质心的平均值与簇数的关系图,我们会发现“肘部”是一个停止的好地方。

来源

PCA 不会改变您的积分顺序。第一点仍然是第一点。

至于第二个,这个太不清楚了,无法回答。集群数量和PC数量之间没有明显的关系。如果您使用的 PC 太少,则您的数据近似值太粗糙。如果你使用太多,那么你会使用太多的随机偏差,结果通常会更糟,与集群的数量无关。

我没有使用过sklearn,但我会尽我所能回答这个问题。

假设你有一个n×F矩阵(数据),现在简化为n×d(减少数据)。假设第一个缩减的数据点被映射到某个集群,这不对应于缩减矩阵中的第一个数据点被分类到同一个集群吗?(每一行表示一个数据点)基本上,排序不会改变。

或者,如果您想更数学地看待它,假设W=(w1,w2...wd) 形成要将特征向量映射到的子空间的基向量(数据协方差矩阵的第一个 d 特征向量)。

现在每个数据点都可以表示为这些基向量的线性组合: X=α1w1+α2w2...+αdwd

这里的向量 α=(α1,α2...,αd) 是您的数据点在 d 维度中的表示,即在子空间中,您的原始数据点是: X=Wα

我不太清楚您在第 2 部分中要问什么)。您可以根据愿意容忍的错误量来选择要保留在 PCA 中的组件数量。假设您希望减少的数据点对应于 95% 的方差,则选择前 d 个特征向量,使其特征值对应于上述方差百分比。 一世=1dλ一世一世=1nλ一世×100=95%

希望有帮助!