【问题标题】:initial centroids for scikit-learn kmeans clusteringscikit-learn kmeans 聚类的初始质心
【发布时间】:2016-11-16 05:54:48
【问题描述】:

如果我已经有一个可以用作初始质心的 numpy 数组,我该如何正确初始化 kmeans 算法?我正在使用 scikit-learn Kmeans 类

这篇文章 (k-means with selected initial centers) 表明如果我使用 numpy 数组作为初始质心,我只需要设置 n_init=1 但我不确定我的初始化是否正常工作

Naftali Harris 出色的可视化页面展示了我正在尝试做的事情 http://www.naftaliharris.com/blog/visualizing-k-means-clustering/

"我会选择" --> "Packed Circles" --> 运行 kmeans

#numpy array of initial centroids
startpts=np.array([[-0.12, 0.939, 0.321, 0.011], [0.0, 0.874, -0.486, 0.862], [0.0, 1.0, 0.0, 0.033], [0.12, 0.939, 0.321, -0.7], [0.0, 1.0, 0.0, -0.203], [0.12, 0.939, -0.321, 0.25], [0.0, 0.874, 0.486, -0.575], [-0.12, 0.939, -0.321, 0.961]], np.float64)

centroids= sk.KMeans(n_clusters=8, init=startpts, n_init=1)

centroids.fit(actual_data_points)

#get the array
centroids_array=centroids.cluster_centers_

【问题讨论】:

    标签: python scikit-learn cluster-analysis k-means


    【解决方案1】:

    是的,通过init 设置初始质心应该可以工作。这是来自 scikit-learn documentation 的引用:

     init : {‘k-means++’, ‘random’ or an ndarray}
    
         Method for initialization, defaults to ‘k-means++’:   
    
         If an ndarray is passed, it should be of shape (n_clusters, n_features)
         and gives the initial centers.
    

    (n_clusters, n_features) 指的是什么形状?

    形状要求意味着init必须恰好有n_clusters行,并且每行中的元素数量应该与actual_data_points的维数相匹配:

    >>> init = np.array([[-0.12, 0.939, 0.321, 0.011],
                         [0.0, 0.874, -0.486, 0.862],
                         [0.0, 1.0, 0.0, 0.033],
                         [0.12, 0.939, 0.321, -0.7],
                         [0.0, 1.0, 0.0, -0.203],
                         [0.12, 0.939, -0.321, 0.25],
                         [0.0, 0.874, 0.486, -0.575],
                         [-0.12, 0.939, -0.321, 0.961]],
                        np.float64)
    >>> init.shape[0] == 8  
    True  # n_clusters
    >>> init.shape[1] == actual_data_points.shape[1]
    True  # n_features
    

    什么是 n_features?

    n_features 是样本的维度。例如,如果您要在 2D 平面上对点进行聚类,n_features 将是 2。

    【讨论】:

    • 这就是我感到困惑的地方,形状 (n_clusters, n_features) 指的是什么?是(n_clusters=8,n_features=startpts)吗?其中 startpts 是 ndarray
    • 什么是 n_features? sklearn 文档站点上唯一的示例使用init='k-means++' 库源代码也没有示例
    • 使用 numpy 数组初始化似乎不会改变 kmeans 算法的运行方式。我也用init='kmeans++' 运行过它,我没有看到显着的差异。有没有办法验证?
    • 最直接的方法是查看code,它只是按原样使用init。请注意,K-means 是一种迭代算法,可能会从不同的起点(手动和'kmeans++')收敛到相同的参数值。
    猜你喜欢
    • 2015-02-20
    • 2015-11-20
    • 2019-11-29
    • 2015-09-17
    • 2019-10-20
    • 2012-07-05
    • 2019-11-12
    • 2015-09-28
    • 2020-05-03
    相关资源
    最近更新 更多