繁体   English   中英

在python中使用scipy的kmeans2函数

[英]Using scipy's kmeans2 function in python

我发现在使用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])

所以我不知道为什么这样写。 也许有拼写错误?

下一个,

# whiten them
z = whiten(z)

美白只是简化了人口的方差。 请看这里的演示:

>>> 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算法的data

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM