为了账号安全,请及时绑定邮箱和手机立即绑定

脾气暴躁的错误

脾气暴躁的错误

富国沪深 2021-05-06 14:10:36
我现在正在学习子空间方法来对手写数字进行分类。子空间方法需要一个自相关矩阵,我发现np.corrcoef()可以进行计算。在的文档中np.corrcoef(),默认情况下说“每一行代表一个变量,列中带有观察值”。因此,我转置了输入数据,因为每一行都是一个观察值(4132 obs,784 vars)。但是,该函数将通过转置返回一个包含info或NaN的数组。然后,我无法计算特征值和特征向量。如果不进行转置,我可以完美地进行计算,但这不是我想要的(形状数组((4132,4132)))。我不明白为什么会这样。这是我的代码:X = train[train["label"]==i].iloc[:,1:] C = np.corrcoef(X.T)print(np.isnan(np.min(C))) #-> print True if there are Nan valueseig_val,eig_vec = linalg.eigh(C) #-> returns ValueErrorprint(eig_val.shape,eig_vec.shape)X是这样的(4132行,785列)
查看完整描述

1 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

问题在于,某些行(在转置后)没有方差,因此协方差矩阵中存在零值(可以使用进行检查np.cov)。如果检查文档是否为np.corrcoef,则相关系数除以协方差矩阵中的元素,因此除以0,因为某些行没有方差。


查看完整回答
反对 回复 2021-05-18
  • 1 回答
  • 0 关注
  • 129 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信