【问题标题】:Using scipy's kmeans2 function in python在python中使用scipy的kmeans2函数
【发布时间】:2013-12-14 19:26:00
【问题描述】:

我找到了this 在 python 中使用 kmeans2 算法的示例。以下部分我无法获取

# make some z vlues
z = numpy.sin(xy[:,1]-0.2*xy[:,1])

# whiten them
z = whiten(z)

# let scipy do its magic (k==3 groups)
res, idx = kmeans2(numpy.array(zip(xy[:,0],xy[:,1],z)),3)

点是zip(xy[:,0],xy[:,1]),那么第三个值z在这里做什么呢?

还有什么是美白?

感谢任何解释。谢谢。

【问题讨论】:

    标签: python scipy k-means


    【解决方案1】:

    第一:

    # make some z vlues
    z = numpy.sin(xy[:,1]-0.2*xy[:,1])
    

    最奇怪的是它相当于:

    z = numpy.sin(0.8*xy[:, 1])
    

    所以我不知道为什么会这样写。可能有错别字?

    接下来,

    # whiten them
    z = whiten(z)
    

    whitening 只是对总体方差进行归一化。在这里查看演示:

    >>> z = np.sin(.8*xy[:, 1])      # the original z
    >>> zw = vq.whiten(z)            # save it under a different name
    >>> zn = z / z.std()             # make another 'normalized' array
    >>> map(np.std, [z, zw, zn])     # standard deviations of the three arrays
    [0.42645, 1.0, 1.0]
    >>> np.allclose(zw, zn)          # whitened is the same as normalized
    True
    

    这对我来说并不明显为什么它会变白。无论如何,继续前进:

    # let scipy do its magic (k==3 groups)
    res, idx = kmeans2(numpy.array(zip(xy[:,0],xy[:,1],z)),3)
    

    让我们把它分成两部分:

    data = np.array(zip(xy[:, 0], xy[:, 1], z))
    

    这是一种奇怪(且缓慢)的写作方式

    data = np.column_stack([xy, z])
    

    无论如何,您从两个数组开始并将它们合并为一个:

    >>> xy.shape
    (30, 2)
    >>> z.shape
    (30,)
    >>> data.shape
    (30, 3)
    

    然后是data 传递给kmeans 算法:

    res, idx = vq.kmeans2(data, 3)
    

    所以现在您可以看到传递给算法的是 3d 空间中的 30 个点,而令人困惑的部分是点集是如何创建的。

    【讨论】:

    • 这就是我的疑问,当我所要做的就是将 k-means 应用于 2D 点时,第三个值 z 的用途是什么。但是,感谢whitening is normalizing variance。我现在明白了。也许z,第三个坐标用于将点集划分为定义明确的簇,以便我们在绘制时看到一些有意义的簇。
    • @kamalbanga,我认为您链接到的示例的重点是将 kmeans 应用于 3d 点。
    猜你喜欢
    • 2014-10-07
    • 2014-01-06
    • 1970-01-01
    • 2015-01-29
    • 2016-03-08
    • 2021-09-25
    • 2023-03-06
    • 2016-07-24
    • 2012-07-22
    相关资源
    最近更新 更多