-1

我正在使用 Jahmm java lib 进行分类。我想做一些测试,所以我生成了一些随机数据集。

我以这种格式创建数据集:

[val_1.1 val_1.2 val_1.3];[val_2.1 val_2.2 val_2.3]; [val_3.1 val_3.2 val_3.3] etc...

我使用随机函数,以便

 val_1.1 == val_1.2 == val_1.3

val_2.1 == val_2.2 == val_2.3 

等等。

当我使用此数据集调用以下函数时,它会引发 IllegalArgumentException

static double[][] decomposeCholesky(double[][] m)
{
    if (!isSquare(m))
        throw new IllegalArgumentException("Matrix is not square");

    double[][] l = matrix(nbRows(m), nbColumns(m));

    for (int j = 0; j < nbRows(m); j++)
    {
        double[] lj = l[j];
        double d = 0.;

        for (int k = 0; k < j; k++) {
            double[] lk = l[k];
            double s = 0.;

            for (int i = 0; i < k; i++)
                s += lk[i] * lj[i];

            lj[k] = s = (m[j][k] - s) / l[k][k];
            d = d + s * s;
        }

        if ((d = m[j][j] - d) <= 0.)
            throw new IllegalArgumentException("Matrix is not positive " + 
            "defined");

        l[j][j] = Math.sqrt(d);
        for (int k = j+1; k < nbRows(m); k++)
            l[j][k] = 0.;
    }

    return l;
}

所以我的序列矩阵不是“正定义的”,但它是什么意思?应该对我的数据集做些什么来避免它?

我数学不好!提前致谢

4

2 回答 2

5

我认为代码的作者的意思是“肯定的”。矩阵必须是正定矩阵才能被 Cholesky 分解分解。正式定义是一个方阵 A 是正定的当且仅当,对于所有向量 x:

x'Ax > 0

所有正定矩阵都是关于对角线和正方形对称的,所以一个好的开始是在测试中只使用正方形对称矩阵,看看它是如何工作的。为了绝对确保矩阵是正定的,您可以测试其所有特征值以查看它们是否每个 > 0。我不知道 JAHMM 是否有获取矩阵特征值的方法,但如果有,您可以这样做。

于 2012-04-12T16:12:15.707 回答
3

我不知道那个图书馆,但我认为你的意思是“肯定的”而不是“肯定的”。

事情是这样的:如果你有一个正常的数字,你可以通过查看符号轻松判断它是正数还是负数(或零)。确定性是该想法在矩阵世界中的扩展,在矩阵世界中,仅查看符号不再起作用,因为有些条目可能是正数,有些可能是负数。

确定性有许多不同的定义(可以证明是相等的),你可以在这里找到它们: http ://en.wikipedia.org/wiki/Positive-defined_matrix#Characterizations

现在,问题在于,当您平等地选择行时,并不能保证正定性。事实上,3x3 矩阵总是半正定的,永远不会是正定的。
我环顾四周;这里有一些提示如何生成正定矩阵: https ://ece.uwaterloo.ca/~dwharder/NumericalAnalysis/04LinearAlgebra/posdef/

( rand(n, n) + (n - 1)*eye( n ) )

所以你生成anxn矩阵,其中所有条目都是0到1之间的随机数,然后添加单位矩阵乘以n-1,在你的情况下是[2,0,0];[0,2,0];...

希望有帮助...


ps我忘了你的矩阵也必须是对称的,因为你想在它上面做一个cholesky。但这很简单,只需要生成上面提到的矩阵 A,然后选择 B = 1/2 * ( A + A.transposed() ); 这个矩阵 B 仍然是正定的,它也是对称的:)

于 2012-04-12T16:37:17.447 回答