使用scipy';python中的s kmeans2函数

使用scipy';python中的s kmeans2函数,python,scipy,k-means,Python,Scipy,K Means,我找到了在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]),那么第三个

我找到了在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
在这里做什么呢

还有什么是美白

如有任何解释,我们将不胜感激。谢谢。

首先:

# make some z vlues
z = numpy.sin(xy[:,1]-0.2*xy[:,1])
最奇怪的是,它相当于:

z = numpy.sin(0.8*xy[:, 1])
所以我不知道为什么它是这样写的。也许有打字错误

其次,

白化只是使总体方差正常化。请参见此处以获取演示:

>>> 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)
然后是传递给kmeans算法的
数据

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

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

这就是我的疑问所在,当我所要做的就是对2D点应用k均值时,第三个值
z
有什么用。然而,感谢
的增白是方差的正常化
。我现在明白了。可能是
z
,第三个坐标用于将点集划分为定义良好的簇,以便我们在绘制时看到一些有意义的簇。@kamalbanga,我认为您链接的示例的要点是将kmeans应用于三维点。
res, idx = vq.kmeans2(data, 3)