我试图将MvNormal
分布拟合到光谱数据矩阵中,但我得到了以下错误:
Distributions.fit(MvNormal, myMatrix)
> ERROR: PosDefException: matrix is not positive definite; Cholesky factorization failed.
myMatrix
由多个连续波数(行(的吸光度读数(每个项目一列(组成。它不是一个平方矩阵,因此它不可能是正定的。
从我在网上看到的情况来看,很多人报告说,在Julia的Cholesky分解步骤中,各种方法都失败了。我知道这是因为它比其他语言在检查需要时是否满足PD标准时更严格。
其他人(例如,请参阅本文(通过在声明分布时对西格玛参数进行轻微更改,成功地解决了这个问题。然而,由于我不是根据参数创建分布,而是将其拟合到矩阵中,所以我不确定该怎么办
我非常感谢对的任何建议
- 如何尝试使矩阵适用于Cholesky分解,或者
- 使用任何其他方法或包将多元正态分布拟合到我的数据
在撰写本文时,我认为此错误消息具有高度误导性,或者可能是一个错误。
fit
并不期望myMatrix
是正定的,事实上它甚至不应该是一个平方矩阵。
fit
期望第二个参数是n
乘S
矩阵,其中n
是维度数,S
是要拟合的样本数。关于正定矩阵和正定问题的错误信息来自于它在拟合欠定系统时所执行的数学运算。在正常情况下,我们预计S
会比n
大得多。
示例:
# Construct samples:
C = [0.2 0; 0.1 0.3]
mean = [2.,3.]
d = MvNormal(mean, C)
samples = rand(d, 100) # This is your input data, in this case a 2x100 matrix.
# Fitting:
d_fit = Distributions.fit(MvNormal, samples)
比较d
和d_fit
,我看到了很好的匹配,并且随着样本数量的增加,它变得更好。
总之:你可能只需要更多(独特的(样本来适应。