1
我使用apache commons math3 library來計算協方差矩陣,特徵向量和特徵值。所以我的主要功能是這個(給出一個雙矩陣):使用apache常用數學庫的EigenVectors問題
private void coVariance(double[][] matrix) {
RealMatrix mx = MatrixUtils.createRealMatrix(matrix);
RealMatrix cov = new Covariance(mx).getCovarianceMatrix();
System.out.println("***************************************");
System.out.println("Covariance Matrix");
for (int i = 0; i < cov.getRowDimension(); i++) {
for (int j = 0; j < cov.getColumnDimension(); j++) {
System.out.print(cov.getEntry(i, j) + " ");
}
System.out.println();
}
System.out.println("***************************************");
EigenDecomposition e = new EigenDecomposition(cov);
double[] arrayEigenValue = e.getRealEigenvalues();
for (int i = 0; i < e.getRealEigenvalues().length; i++) {
System.out.println("eigenValue with index " + i + " " + arrayEigenValue[i]);
RealVector arrayEigenVector = e.getEigenvector(i);
for (int j = 0; j < arrayEigenVector.getDimension(); j++) {
System.out.print(arrayEigenVector.getEntry(j) + " ");
}
System.out.println();
System.out.println();
}
System.out.println("***************************************");
}
爲了瞭解如果一切是正確的我使用已得到協方差/特徵值的例子/特徵向量已經計算出:
2.5,2.4
0.5,0.7
2.2,2.9
1.9,2.2
3.1,3.0
2.3,2.7
2,1.6
1,1.1
1.5,1.6
1.1,0.9
它的協方差矩陣特徵值和特徵值的這個結果:
個0,616555556 0.615444444
0.615444444 0.716555556
特徵值:
0.0490833989
1.28402771
特徵向量:
1° = -0.735178656 -0.677873309
2° = 0.677873399 -0.735178656
我的程序的結果:
協方差矩陣
0.6165555555555556 0.6154444444444446
0.6154444444444446 0.7165555555555555
特徵值:
1.2840277121727839
0.04908339893832714
特徵向量:
1° = -0.7351786555444081 -0.6778733985280118
2° = -0.6778733985280118 0.7351786555444081
正如你所看到的,特徵向量是在第二個特徵向量0.7351786555444081
可能有人的第二個值的符號不同解釋我爲什麼?