For example we have 2 algorithms from R: SVD and irlba and I want to compare them int terms of speed,memory and precision.
But I don't understand how to compare output of algorithms, they must be differ on some epsilon, but how to define epsilon?
And why sign of principal vectors can be different?
Here is some test code:
rows= 10
cols= 8
A <- matrix(runif(rows*cols),rows,cols)
pc=5
a <- irlba(A,nu=pc,nv=pc)
b <- svd(A,nu=pc,nv=pc)
#false
a$u == b$u
a$v == b$v
#show all vars
a$u
b$u
a$v
b$v
a$d
b$d
#compare u
.list <- list(abs(a$u), abs(b$u))
Reduce('-', .list)
#compare v
.list <- list(abs(a$v), abs(b$v))
Reduce('-', .list)
#compare d
.list <- list(abs(a$d), abs(b$d[c(1:pc)]))
Reduce('-', .list)
output:
> #compare u
> .list <- list(abs(a$u), abs(b$u))
> Reduce('-', .list)
[,1] [,2] [,3] [,4] [,5]
[1,] 6.383782e-16 -5.551115e-17 -1.082467e-15 1.665335e-15 -0.123009729
[2,] 0.000000e+00 5.689893e-16 -3.053113e-16 -1.665335e-15 -0.117362383
[3,] 1.110223e-16 -5.481726e-16 -2.220446e-16 7.216450e-16 0.142286325
[4,] 3.885781e-16 -3.053113e-16 -1.526557e-16 -2.942091e-15 0.096784035
[5,] 4.996004e-16 -9.436896e-16 1.776357e-15 -1.956768e-15 -0.081504771
[6,] -2.775558e-16 -6.661338e-16 7.216450e-16 1.137979e-15 0.007450404
[7,] -5.551115e-16 4.440892e-16 -5.273559e-16 5.551115e-17 0.018699113
[8,] -5.551115e-16 7.216450e-16 4.440892e-16 1.665335e-16 -0.013035052
[9,] -4.440892e-16 1.054712e-15 -1.942890e-16 2.498002e-16 0.048095160
[10,] 3.330669e-16 3.330669e-16 7.771561e-16 6.106227e-16 0.044937739
>
> #compare v
> .list <- list(abs(a$v), abs(b$v))
> Reduce('-', .list)
[,1] [,2] [,3] [,4] [,5]
[1,] -1.887379e-15 -2.775558e-16 -9.020562e-17 -1.193490e-15 -0.02102106
[2,] 1.831868e-15 -1.276756e-15 -6.661338e-16 3.386180e-15 -0.09872305
[3,] 7.216450e-16 -3.885781e-15 -9.436896e-16 9.992007e-16 0.04699264
[4,] -2.053913e-15 2.331468e-15 -4.996004e-16 1.498801e-15 0.05876057
[5,] 8.881784e-16 -5.551115e-16 -8.881784e-16 -1.942890e-16 0.16146650
[6,] -2.053913e-15 8.881784e-16 5.551115e-16 -2.775558e-16 0.11420391
[7,] 1.498801e-15 -1.665335e-16 1.665335e-16 9.714451e-16 -0.13600871
[8,] 8.326673e-16 -2.831069e-15 -7.042977e-16 -2.997602e-15 -0.01507590
>
> #compare d
> .list <- list(abs(a$d), abs(b$d[c(1:pc)]))
> Reduce('-', .list)
[1] -8.881784e-16 0.000000e+00 8.881784e-16 2.220446e-16 -2.483630e-02
here is also some comparision https://github.com/graphlab-code/graphlab/issues/48