for i = 1:1000
try
a = rand(3);
c = cov(a) + .0001 * eye(3);
m = mean(a);
mvnpdf(a, m, c);
catch me
err_cnt = err_cnt + 1;
end
end
Results in 0 errors.
我当时也遇到了这个问题,采取的解决办法是利用shrink相关系数矩阵来使得协方差矩阵变为半正定,以下是代码实现:
def xiefangcha(cov,corr):#给定相关系数矩阵和协方差矩阵,求出相应的协方差矩阵
a=np.eye(100)#先生产一个100*100的单位阵,再一个个把协方差的对角线输进去
for i in range(100):
a[i][i]=cov.iloc[i,i]**0.5
cov_new=a@corr@a
return cov_new
def shrinkxishu(data,w):#shrink相关系数矩阵
for i in range(100):
for j in range(100):
if i!=j:
data.iloc[i,j]=data.iloc[i,j]*(1-w)
return data