Distributions.jl不接受my(非正定)协方差函数(而numpy接受)
我正试图在下面实现高斯过程(GPs) numpy实现的工作方式很有魅力:Distributions.jl不接受my(非正定)协方差函数(而numpy接受),numpy,julia,linear-algebra,normal-distribution,Numpy,Julia,Linear Algebra,Normal Distribution,我正试图在下面实现高斯过程(GPs) numpy实现的工作方式很有魅力: 将numpy导入为np def内核(X1,X2,l=1.0,sigma_f=1.0): ''各向同性平方指数核。从X1和X2中的点计算协方差矩阵。Args:X1:m个点的数组(m x d)。X2:n个点的数组(n x d)。返回:协方差矩阵(m x n)。'' sqdist=np.sum(X1**2,1)。重塑(-1,1)+np.sum(X2**2,1)-2*np.dot(X1,X2.T) 返回西格玛函数**2*np.ex
将numpy导入为np
def内核(X1,X2,l=1.0,sigma_f=1.0):
''各向同性平方指数核。从X1和X2中的点计算协方差矩阵。Args:X1:m个点的数组(m x d)。X2:n个点的数组(n x d)。返回:协方差矩阵(m x n)。''
sqdist=np.sum(X1**2,1)。重塑(-1,1)+np.sum(X2**2,1)-2*np.dot(X1,X2.T)
返回西格玛函数**2*np.exp(-0.5/l**2*sqdist)
X=np.arange(-1,1,0.1)。重塑(-1,1)
mu=np.零(X.形)
cov=内核(X,X)
样本=np.随机.多元正态(mu.ravel(),cov,3)
而我在使用Distributions.jl创建多元正态分布时有一个错误
以下是我尝试过的:
using LinearAlgebra
using Distributions
function kernel(x₁, x₂; l=1.0, σ=1.0)
t₁ = sum(x₁.^2, dims=2)
t₂ = sum(x₂.^2, dims=2)
t₃ = 2*x₁*x₂'
t = (t₁ .+ t₂') - t₃
return σ^2 * exp.(-0.5/l^2 * t)
end
x = -1:0.1:0.9
μ = zeros(length(x))
σ = kernel(x, x)
D = MvNormal(μ, σ)
问题似乎是我的协方差不是正(半)定的
朱莉娅:
σ
20×20 Array{Float64,2}:
1.0 0.995012 0.980199 0.955997 … 0.235746 0.197899 0.164474
0.995012 1.0 0.995012 0.980199 0.278037 0.235746 0.197899
0.980199 0.995012 1.0 0.995012 0.324652 0.278037 0.235746
0.955997 0.980199 0.995012 1.0 0.375311 0.324652 0.278037
0.923116 0.955997 0.980199 0.995012 0.429557 0.375311 0.324652
0.882497 0.923116 0.955997 0.980199 … 0.486752 0.429557 0.375311
0.83527 0.882497 0.923116 0.955997 0.546074 0.486752 0.429557
0.782705 0.83527 0.882497 0.923116 0.606531 0.546074 0.486752
0.726149 0.782705 0.83527 0.882497 0.666977 0.606531 0.546074
0.666977 0.726149 0.782705 0.83527 0.726149 0.666977 0.606531
0.606531 0.666977 0.726149 0.782705 … 0.782705 0.726149 0.666977
0.546074 0.606531 0.666977 0.726149 0.83527 0.782705 0.726149
0.486752 0.546074 0.606531 0.666977 0.882497 0.83527 0.782705
0.429557 0.486752 0.546074 0.606531 0.923116 0.882497 0.83527
0.375311 0.429557 0.486752 0.546074 0.955997 0.923116 0.882497
0.324652 0.375311 0.429557 0.486752 … 0.980199 0.955997 0.923116
0.278037 0.324652 0.375311 0.429557 0.995012 0.980199 0.955997
0.235746 0.278037 0.324652 0.375311 1.0 0.995012 0.980199
0.197899 0.235746 0.278037 0.324652 0.995012 1.0 0.995012
0.164474 0.197899 0.235746 0.278037 0.980199 0.995012 1.0
python:
>>cov
阵列([[1,0.99501248,0.98019867,0.95599748,0.92311635,
0.8824969 , 0.83527021, 0.78270454, 0.72614904, 0.66697681,
0.60653066, 0.54607443, 0.48675226, 0.42955736, 0.3753111 ,
0.32465247, 0.2780373 , 0.23574608, 0.1978987 , 0.16447446],
[0.99501248, 1. , 0.99501248, 0.98019867, 0.95599748,
0.92311635, 0.8824969 , 0.83527021, 0.78270454, 0.72614904,
0.66697681, 0.60653066, 0.54607443, 0.48675226, 0.42955736,
0.3753111 , 0.32465247, 0.2780373 , 0.23574608, 0.1978987 ],
[0.98019867, 0.99501248, 1. , 0.99501248, 0.98019867,
0.95599748, 0.92311635, 0.8824969 , 0.83527021, 0.78270454,
0.72614904, 0.66697681, 0.60653066, 0.54607443, 0.48675226,
0.42955736, 0.3753111 , 0.32465247, 0.2780373 , 0.23574608],
[0.95599748, 0.98019867, 0.99501248, 1. , 0.99501248,
0.98019867, 0.95599748, 0.92311635, 0.8824969 , 0.83527021,
0.78270454, 0.72614904, 0.66697681, 0.60653066, 0.54607443,
0.48675226, 0.42955736, 0.3753111 , 0.32465247, 0.2780373 ],
[0.92311635, 0.95599748, 0.98019867, 0.99501248, 1. ,
0.99501248, 0.98019867, 0.95599748, 0.92311635, 0.8824969 ,
0.83527021, 0.78270454, 0.72614904, 0.66697681, 0.60653066,
0.54607443, 0.48675226, 0.42955736, 0.3753111 , 0.32465247],
[0.8824969 , 0.92311635, 0.95599748, 0.98019867, 0.99501248,
1. , 0.99501248, 0.98019867, 0.95599748, 0.92311635,
0.8824969 , 0.83527021, 0.78270454, 0.72614904, 0.66697681,
0.60653066, 0.54607443, 0.48675226, 0.42955736, 0.3753111 ],
[0.83527021, 0.8824969 , 0.92311635, 0.95599748, 0.98019867,
0.99501248, 1. , 0.99501248, 0.98019867, 0.95599748,
0.92311635, 0.8824969 , 0.83527021, 0.78270454, 0.72614904,
0.66697681, 0.60653066, 0.54607443, 0.48675226, 0.42955736],
[0.78270454, 0.83527021, 0.8824969 , 0.92311635, 0.95599748,
0.98019867, 0.99501248, 1. , 0.99501248, 0.98019867,
0.95599748, 0.92311635, 0.8824969 , 0.83527021, 0.78270454,
0.72614904, 0.66697681, 0.60653066, 0.54607443, 0.48675226],
[0.72614904, 0.78270454, 0.83527021, 0.8824969 , 0.92311635,
0.95599748, 0.98019867, 0.99501248, 1. , 0.99501248,
0.98019867, 0.95599748, 0.92311635, 0.8824969 , 0.83527021,
0.78270454, 0.72614904, 0.66697681, 0.60653066, 0.54607443],
[0.66697681, 0.72614904, 0.78270454, 0.83527021, 0.8824969 ,
0.92311635, 0.95599748, 0.98019867, 0.99501248, 1. ,
0.99501248, 0.98019867, 0.95599748, 0.92311635, 0.8824969 ,
0.83527021, 0.78270454, 0.72614904, 0.66697681, 0.60653066],
[0.60653066, 0.66697681, 0.72614904, 0.78270454, 0.83527021,
0.8824969 , 0.92311635, 0.95599748, 0.98019867, 0.99501248,
1. , 0.99501248, 0.98019867, 0.95599748, 0.92311635,
0.8824969 , 0.83527021, 0.78270454, 0.72614904, 0.66697681],
[0.54607443, 0.60653066, 0.66697681, 0.72614904, 0.78270454,
0.83527021, 0.8824969 , 0.92311635, 0.95599748, 0.98019867,
0.99501248, 1. , 0.99501248, 0.98019867, 0.95599748,
0.92311635, 0.8824969 , 0.83527021, 0.78270454, 0.72614904],
[0.48675226, 0.54607443, 0.60653066, 0.66697681, 0.72614904,
0.78270454, 0.83527021, 0.8824969 , 0.92311635, 0.95599748,
0.98019867, 0.99501248, 1. , 0.99501248, 0.98019867,
0.95599748, 0.92311635, 0.8824969 , 0.83527021, 0.78270454],
[0.42955736, 0.48675226, 0.54607443, 0.60653066, 0.66697681,
0.72614904, 0.78270454, 0.83527021, 0.8824969 , 0.92311635,
0.95599748, 0.98019867, 0.99501248, 1. , 0.99501248,
0.98019867, 0.95599748, 0.92311635, 0.8824969 , 0.83527021],
[0.3753111 , 0.42955736, 0.48675226, 0.54607443, 0.60653066,
0.66697681, 0.72614904, 0.78270454, 0.83527021, 0.8824969 ,
0.92311635, 0.95599748, 0.98019867, 0.99501248, 1. ,
0.99501248, 0.98019867, 0.95599748, 0.92311635, 0.8824969 ],
[0.32465247, 0.3753111 , 0.42955736, 0.48675226, 0.54607443,
0.60653066, 0.66697681, 0.72614904, 0.78270454, 0.83527021,
0.8824969 , 0.92311635, 0.95599748, 0.98019867, 0.99501248,
1. , 0.99501248, 0.98019867, 0.95599748, 0.92311635],
[0.2780373 , 0.32465247, 0.3753111 , 0.42955736, 0.48675226,
0.54607443, 0.60653066, 0.66697681, 0.72614904, 0.78270454,
0.83527021, 0.8824969 , 0.92311635, 0.95599748, 0.98019867,
0.99501248, 1. , 0.99501248, 0.98019867, 0.95599748],
[0.23574608, 0.2780373 , 0.32465247, 0.3753111 , 0.42955736,
0.48675226, 0.54607443, 0.60653066, 0.66697681, 0.72614904,
0.78270454, 0.83527021, 0.8824969 , 0.92311635, 0.95599748,
0.98019867, 0.99501248, 1. , 0.99501248, 0.98019867],
[0.1978987 , 0.23574608, 0.2780373 , 0.32465247, 0
PosDefException: matrix is not Hermitian; Cholesky factorization failed.
PosDefException: matrix is not positive definite; Cholesky factorization failed.
σ = σ + maximum([0.0, -minimum(eigvals(σ))])*I
D = MvNormal(μ, σ)
σ = Symmetric(σ)
D = MvNormal(σ.data)
D = MvNormal(Matrix(Hermitian(σ)))
σ = σ + 0.00000000001*I
D = MvNormal(σ)