小编use*_*818的帖子

Python:将矩阵转换为正半正定

我正在研究内核方法,在某些时候我需要将一个非正半确定矩阵(即相似矩阵)组成一个PSD矩阵.我试过这种方法:

def makePSD(mat):
    #make symmetric
    k = (mat+mat.T)/2
    #make PSD
    min_eig = np.min(np.real(linalg.eigvals(mat)))
    e = np.max([0, -min_eig + 1e-4])
    mat = k + e*np.eye(mat.shape[0]);
    return mat
Run Code Online (Sandbox Code Playgroud)

但如果我使用以下函数测试结果矩阵,它将失败:

def isPSD(A, tol=1e-8):
    E,V = linalg.eigh(A)
    return np.all(E >= -tol)
Run Code Online (Sandbox Code Playgroud)

我也尝试了其他相关问题中建议的方法(如何计算最近的正半正定矩阵?),但得到的矩阵也未能通过isPSD测试.

对于如何正确地进行正确的转换,您有什么建议吗?

python matrix linear-algebra svm

5
推荐指数
1
解决办法
4889
查看次数

标签 统计

linear-algebra ×1

matrix ×1

python ×1

svm ×1