【问题标题】:How can I initialize K means clustering on a data matrix with 569 rows (samples), and 30 columns (features)?如何初始化 K 表示在具有 569 行(样本)和 30 列(特征)的数据矩阵上聚类?
【发布时间】:2019-08-30 05:20:15
【问题描述】:

我无法理解如何开始我的解决方案。我有一个 569 行的矩阵,每行代表一个数据样本,30 列代表每个样本的特征。我的直觉是绘制每一行,看看集群(如果有的话)是什么样的,但我不知道如何在一个散点图上做超过 2 行。

我花了几个小时浏览教程,但无法理解如何将其应用于我的数据。我知道散点图需要 2 个向量作为参数,那么我怎么可能绘制所有 569 个样本来对它们进行聚类呢?我在这里遗漏了一些基本的东西吗?

 #our_data is a 2-dimensional matrix of size 569 x 30

 plt.scatter(our_data[0,:], our_data[1,:], s = 40)

我的目标是在 569 个样本上开始 k 均值聚类。

【问题讨论】:

    标签: python machine-learning k-means


    【解决方案1】:

    由于您有一个 30 维的因子空间,因此很难在 2D 空间(即画布上)中绘制此类数据。在这种情况下,通常首先应用降维技术。这有助于理解数据结构。您可以尝试申请,例如首先是 PCA(主成分分析),例如

    #your_matrix.shape = (569, 30)
    from sklearn.decomposition import PCA
    pca = PCA(n_components=2)
    projected_data = pca.fit_transform(your_matrix)
    plt.scatter(projected_data[:,0], projected_data[:, 1]) # This might be very helpful for data structure understanding... 
    plt.show() 
    

    您还可以查看其他(包括非线性)降维技术,例如T-sne。

    您还可以应用 k-means 或其他方法;或将 k-means 应用于投影数据。

    【讨论】:

    • 添加到@bubble 答案,在应用 K 表示之前,请确保在 0 到 1 的范围内缩放每一列,以便您的距离不会偏向任何列值。
    • 好的,谢谢。这是一个很好的表达方式。我是新手,所以这是非常好的指导。
    【解决方案2】:

    如果通过初始化是指选择 k 个初始聚类,那么常用的方法之一是使用 K-means++ described here,它是为了避免不良聚类而开发的。

    它本质上需要根据与完全随机选择的第一个中心的距离的概率分布来半随机选择中心。

    【讨论】:

      猜你喜欢
      • 2017-11-10
      • 2013-09-06
      • 1970-01-01
      • 2014-01-22
      • 1970-01-01
      • 2012-12-09
      • 1970-01-01
      • 2019-04-10
      相关资源
      最近更新 更多