社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

复数numpy数组的python均值漂移聚类

Jens • 5 年前 • 597 次点击  

我继承了一年前写的一些代码,所以我想当时它使用的是 numpy 1.13 (现在是v1.15.2) scipy 1.00rc (现在是v1.1.0),以及 sklearn 0.19 (现在是v.0.20.0)。

它实现了 Fisher’s LDA 减少 n -1的维空间 n -一维空间,其结果是产生复数的numpy数组(由于浮点不精确)。然后这个数组被愉快地挑选并输入 sklearn.cluster.MeanShift 会立即引发异常:

  File "/…/lib/python3.6/site-packages/sklearn/cluster/mean_shift_.py", line 416, in fit
    X = check_array(X)
  File "/…/lib/python3.6/site-packages/sklearn/utils/validation.py", line 531, in check_array
    _ensure_no_complex_data(array)
  File "/…/lib/python3.6/site-packages/sklearn/utils/validation.py", line 354, in _ensure_no_complex_data
    "{}\n".format(array))
ValueError: Complex data not supported

我仍然在学习这里发生的事情的数学细节,但我觉得奇怪的是,这段代码被声明为可运行的。

我是不是丢了什么东西?版本更改是否导致了此回归,或者是否存在更基本的代码缺陷?我该如何着手解决这个问题?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/39711
 
597 次点击  
文章 [ 1 ]  |  最新文章 5 年前
Paul Panzer
Reply   •   1 楼
Paul Panzer    6 年前

在注释/聊天中,我们至少发现了一个问题,即

(cov_w + I)^-1 @ cov_b                       (1)

不是它应该的实数,而是返回重要的虚分量。这里@是矩阵乘法,cov_w和cov_b是协方差矩阵,i是恒等矩阵。这可以通过计算(cov_w+i)^-1的矩阵平方根来解决,我们称它为sq,然后使用(1)类似于

SQ @ cov_b @ SQ                              (2)

因此具有相同的特征值,如果v是(2)的特征向量,那么(1)的(右)特征向量是sq@v。

我们得到的结果是,因为(2)是一个对称矩阵,它的特征分解可以用 numpy.linalg.eigh 这保证了纯粹真实的结果。 eigh 也可用于计算sq,请参见 here . 一定要绕过逆时针方向 哎哟 直接打开 cov_w + I 甚至 cov_w .