我有一个矩阵未通过奇异测试,在该测试中我正在计算朴素贝叶斯分类器。我正在处理方程的
ln(det(sigma))
部分。
if np.linalg.cond(covarianceMatrix) < 1/sys.float_info.epsilon:
return np.log(np.linalg.det(covarianceMatrix))
else:
return a pseudo determinant
当协方差矩阵是奇异的时,我必须找到伪行列式。我怎样才能做到这一点?
eig_values = np.linalg.eig(covarianceMatrix)
pseudo_determinent = np.product(eig_values[eig_values > 1e-12])
你可以使用numpy的pinv来计算伪逆,然后用它来计算行列式吗? http://www.sosmath.com/matrix/inverse/inverse.html
第一个答案会给出错误(元组和浮点数之间不支持>符号),因为np.linalg.eig
函数给出元组中的特征值和特征向量。选择元组的第一个元素来获取特征值,然后计算伪行列式。
eig_values = np.linalg.eig(covarianceMatrix)[0]
pseudo_determinent = np.product(eig_values[eig_values > 1e-12])