使用 K-means 学习 Python 中的特征

Use K-means to learn features in Python

问题

我在 Python 中实现了 K-Means 算法。首先,我对输入数据应用 PCA 和白化。然后我使用 k-means 成功地从数据中减去 k 个质心。

如何使用这些质心来理解 "features" 所学的内容?质心是否已经具有特征(对我来说似乎不是这样)或者我是否需要再次将它们与输入数据组合?

由于一些答案:K-means 不是 "just" 一种聚类方法,而是一种矢量量化方法。也就是说,k-means 的目标是描述一个特征向量数量减少的数据集。因此,对于潜在结果,与稀疏过滤/学习等方法有很大的类比。

代码示例

# Perform K-means, data already pre-processed
centroids = k_means(matrix_pca_whitened,1000)

# Assign data to centroid
idx,_ = vq(song_matrix_pca,centroids)  

K 均值算法生成的聚类将您的输入 space 分成 K 个区域。当你有新的数据时,你可以判断它属于哪个区域,从而对其进行分类。

质心只是这些簇中的一个 属性。

您可以查看 scikit-learn doc if you are unsure, and at the map 以确保您选择了正确的算法。

这是一个循环问题:"understand" 需要了解一些关于 k-means 过程之外的特征。 k-means 所做的就是识别 k 组物理邻近度。它说 "there are clumps of stuff in these 'k' places, and here's how the all the points choose the nearest."

这在特征方面意味着什么取决于数据科学家,而不是 k-means 可以赋予的任何更深层次的含义。每组的方差可能会告诉您一些关于这些点聚类的紧密程度。请记住,k-means 也会随机选择起点;一个不幸的选择很容易给出 space.

的次优描述

质心基本上是集群的 "mean"。如果您可以从质心的分布中获得更深入的理解,那很好——但这取决于数据和特征,而不是从 k-means 衍生出的任何重要意义。

这是您需要的答案水平吗?

质心实际上是学习到的特征。由于 k-means 是一种矢量量化方法,我们查找哪个观察属于哪个集群,因此最好用特征向量(质心)来描述。

通过一项观察,例如之前分成 10 个补丁,观察可能由最多 10 个特征向量组成。

示例:

方法:K-均值,k=10

数据集:20 个观测值分成 2 个块,每个块 = 40 个数据向量

我们现在对这个修补后的数据集执行 K-means 并获得每个补丁最近的质心。然后,我们可以为长度为 10 (=k) 的 20 个观测值中的每一个创建一个向量,如果补丁 1 属于质心 5,补丁 2 属于质心 9,则向量可能如下所示:0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 1 - 0.

这意味着此观察由质心/特征 5 和 9 组成。您也可以使用补丁和质心之间的距离来测量,而不是这个硬分配。