0

嗨,我正在尝试使用在 scipy 中实现的 K 方法和 vq:这里有更多详细信息 --> http://docs.scipy.org/doc/scipy/reference/cluster.vq.html

关键是我有一个 [x, 36] 列表​​,其中每一行是一个观察值,每一列是一个观察值字段,所以基本上每个观察值都由 36 个值组成。

我试图将它们聚集在一起并了解哪一行在哪个集群中。根据文档,它应该是这样的:

data_array_n = np.array(data_array)
whitened = whiten(data_array_n)
print "Starting K means"
centroids, distortion = kmeans(whitened, k, iter=1000)

print centroids

idx, distortion = vq(whitened , centroids)

但是当我检查 idx 时,我得到了完全无用的值。data_array 是 36 个元素中的 x 个列表的列表。谢谢你的帮助

4

1 回答 1

1

一切都取决于美白功能的构建方式......

def whiten(obs)
     std_dev = std(obs, axis=0)
     return obs / std_dev

这没有任何意义,因为默认情况下它是在第一列上计算的,在我的情况下始终为 0,因为当时没有数据。修复了制作我自己的白化函数,它返回在整个数据集的 std 上白化的 numpy 数组,而不仅仅是在第一个轴上!

def whiten(obs)
     std_dev = std(obs)
     return obs / std_dev

使用相同的迭代从 1000+ 到 0.003 的量化误差获得更好的结果!

于 2013-07-12T19:25:47.543 回答