我有一个由约 200 个 99x20 频率数组组成的数据集,每列总和为单位。我已经使用热图(如. 每个数组都非常稀疏,每 99 个位置只有大约 1-7/20 个值是非零的。
但是,我想根据它们的频率分布的相似程度(最小欧几里德距离或类似的东西)对这些样本进行聚类。我将每个 99x20 阵列排列成一个 1980x1 阵列,并将它们聚合成一个 200x1980 观察阵列。
在找到集群之前,我尝试使用scipy.cluster.vq.whiten
. whiten
通过方差对每列进行归一化,但由于我展平数据数组的方式,我有一些 (8) 列的频率全为零,因此方差为零。因此,白化数组具有无限值,质心查找失败(或给出约 200 个质心)。
我的问题是,我应该如何解决这个问题?到目前为止,我已经尝试过
- 不要白化数据。这导致 k-means 每次运行时都会给出不同的质心(有点预期),尽管大大增加了
iter
关键字。 - 在展平阵列之前转置阵列。零方差列只是移动。
可以只删除其中一些零方差列吗?这会以任何方式偏向聚类吗?
编辑:我也尝试过使用我自己的 whiten 函数
for i in range(arr.shape[1]):
if np.abs(arr[:,i].std()) < 1e-8: continue
arr[:,i] /= arr[:,i].std()
这似乎可行,但我不确定这是否会以任何方式偏向聚类。
谢谢