Python &引用;矩阵不是正定的;scipy.cluster.vq.kmeans2中出错

Python &引用;矩阵不是正定的;scipy.cluster.vq.kmeans2中出错,python,numpy,scipy,k-means,Python,Numpy,Scipy,K Means,我试图在128维点(图像中感兴趣点的描述符)上执行kmeans聚类。 当我使用scipy.cluster.vq.kmeans2函数时,有时会出现以下错误: File "main.py", line 21, in level_routine current.centroids, current.labels = cluster.vq.kmeans2( current.descriptors, k) File "/usr/lib/python2.7/dist-packages/scipy/c

我试图在128维点(图像中感兴趣点的描述符)上执行kmeans聚类。 当我使用
scipy.cluster.vq.kmeans2
函数时,有时会出现以下错误:

  File "main.py", line 21, in level_routine
current.centroids, current.labels = cluster.vq.kmeans2( current.descriptors, k)
  File "/usr/lib/python2.7/dist-packages/scipy/cluster/vq.py", line 706, in kmeans2
    clusters = init(data, k)
  File "/usr/lib/python2.7/dist-packages/scipy/cluster/vq.py", line 593, in _krandinit
    return init_rankn(data)
  File "/usr/lib/python2.7/dist-packages/scipy/cluster/vq.py", line 586, in init_rankn
    x = np.dot(x, np.linalg.cholesky(cov).T) + mu
  File "/usr/lib/python2.7/dist-packages/numpy/linalg/linalg.py", line 603, in cholesky
    return wrap(gufunc(a, signature=signature, extobj=extobj).astype(result_t))
  File "/usr/lib/python2.7/dist-packages/numpy/linalg/linalg.py", line 93, in _raise_linalgerror_nonposdef
    raise LinAlgError("Matrix is not positive definite")
numpy.linalg.linalg.LinAlgError: Matrix is not positive definite
我知道这与随机初始化有关,因为对于相同的
数据
和相同的
k
,我有时不会得到此错误


My
data
是一个numpy矩阵,有128列,行数可变。我不是在构造协方差矩阵,因此不能控制协方差矩阵。是否有办法消除此错误。

尝试将minit参数更改为“points”:

kmeans2(obs,k,minit='points')

由于您得到的错误
矩阵不是正定的
,类似问题的答案可能会有所帮助,请看一看:您知道为什么这会解决它吗?Ie为什么默认的
minit=“random”
(如scipy v1.5.3)会引发这个问题?@bricoletc问题源于初始点。默认的“random”参数使用质心的标量值。如果数据点是n维向量,则会产生错误。通过将初始质心选择设置为“点”,该算法使用一些数据点作为质心,问题将得到解决。