【问题标题】:Use K-means to learn features in Python在 Python 中使用 K-means 学习特征
【发布时间】:2016-01-21 15:50:03
【问题描述】:

问题

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

如何使用这些质心来理解所学的“特征”?质心是否已经是特征(对我来说似乎不是这样)还是我需要再次将它们与输入数据结合起来?

由于一些答案:K-means 不“只是”一种聚类方法,而是一种矢量量化方法。也就是说,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)  

【问题讨论】:

    标签: python machine-learning k-means unsupervised-learning


    【解决方案1】:

    K-mean 算法生成的聚类将您的输入空间分成 K 个区域。当你有新数据时,你可以知道它属于哪个区域,从而对它进行分类。

    质心只是这些集群的一个属性。

    如果您不确定,可以查看 scikit-learn doc,并查看 map 以确保您选择了正确的算法。

    【讨论】:

    • 感谢您的回答。我知道 k-means 将我的输入数据分成 k 个区域。然而,问题是如何使用质心来实现和理解学习到的特征。因此,从特征学习的角度来看,质心基本上不仅仅是集群的“属性”。
    【解决方案2】:

    这是一个循环问题:“理解”需要了解 k-means 过程之外的特征。 k-means 所做的只是识别 k 个物理邻近组。它说“在这些 'k' 地方有一堆东西,这就是所有点如何选择最近的。”

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

    质心基本上是集群的“平均值”。如果您可以从质心的分布中获得更深入的了解,那就太好了——但这取决于数据和特征,而不是从 k-means 演变而来的任何重要意义。

    这是您需要的答案级别吗?

    【讨论】:

    • 不抱歉。层次不够深,对我来说太模糊了。根据大量文献,Kmeans 在特征学习方面是有意义的:“上述讨论提供了将 K-means 转变为简单的特征学习方法所需的基本要素。” (cs.stanford.edu/~acoates/papers/coatesng_nntot2012.pdf) 让我们不要讨论学习特征的重要性,因为那是完全不同的东西。
    【解决方案3】:

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

    通过一项观察,例如之前分成 10 个块,观察可能包含最多 10 个特征向量。

    示例:

    方法:K-means,k=10

    数据集:20 个观察值分为 2 个补丁,每个 = 40 个数据向量

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

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

    【讨论】:

      猜你喜欢
      • 2017-12-30
      • 2018-03-12
      • 2021-04-06
      • 2020-04-18
      • 2016-11-24
      • 2012-03-28
      • 2013-07-19
      • 2015-02-24
      • 1970-01-01
      相关资源
      最近更新 更多