Skip to content

Instantly share code, notes, and snippets.

@ende76
Created June 3, 2012 17:24
Show Gist options
  • Save ende76/2864268 to your computer and use it in GitHub Desktop.
Save ende76/2864268 to your computer and use it in GitHub Desktop.
Unit Test for Assignment "Dimensionality Reduction (Week 8)"
function [success] = test_pca()
eps = 1E-4;
X = [ ...
0.8414710 -0.2879033 -0.4040376 0.9017883 -0.9661178 0.5661076 0.1059875 -0.7271425 0.9988152 -0.7904332 0.2021499; ...
0.9092974 -0.9613975 0.5514267 0.1235731 -0.7391807 0.9995202 -0.7794661 0.1847817 0.4987132 -0.9425145 0.9333205; ...
0.1411200 -0.7509872 0.9999119 -0.7682547 0.1673557 0.5139785 -0.9482821 0.9268185 -0.4599035 -0.2280523 0.8064006; ...
0.7568025 0.1498772 0.5290827 -0.9537527 0.9200260 -0.4441127 -0.2452520 0.8167426 -0.9956870 0.6960801 -0.0619203; ...
0.9589243 0.9129453 -0.4281827 -0.2623749 0.8268287 -0.9938887 0.6832617 -0.0442427 -0.6160405 0.9802397 -0.8733120; ...
0.2794155 0.8366556 -0.9917789 0.6702292 -0.0265512 -0.6298880 0.9835877 -0.8645514 0.3299908 0.3631714 -0.8817846; ...
0.6569866 -0.0088513 -0.6435381 0.9866276 -0.8555200 0.3132288 0.3796077 -0.8899956 0.9726301 -0.5877950 -0.0795485; ...
0.9893582 -0.8462204 0.2963686 0.3959252 -0.8979277 0.9683645 -0.5733819 -0.0971819 0.7210377 -0.9983454 0.7958241; ...
0.4121185 -0.9055784 0.9637954 -0.5587890 -0.1147848 0.7331903 -0.9992068 0.7849804 -0.1934734 -0.4910216 0.9395197; ...
0.5440211 -0.1323518 0.7451132 -0.9997552 0.7738907 -0.1760756 -0.5063656 0.9454353 -0.9301060 0.4677452 0.2194253; ...
0.9999902 0.7625585 -0.1586227 -0.5215510 0.9510547 -0.9234584 0.4520258 0.2366614 -0.8116034 0.9964692 -0.7024078; ...
0.5365729 0.9563759 -0.9165215 0.4361648 0.2538234 -0.8218178 0.9948268 -0.6896979 0.0530836 0.6090440 -0.9784504; ...
0.4201670 0.2709058 -0.8317747 0.9928726 -0.6767720 0.0353983 0.6229886 -0.9819522 0.8689658 -0.3383334 -0.3549102; ...
0.9906074 -0.6636339 0.0177019 0.6367380 -0.9851463 0.8600694 -0.3216224 -0.3714041 0.8859248 -0.9746486 0.5949328; ...
0.6502878 -0.9880316 0.8509035 -0.3048106 -0.3877816 0.8939967 -0.9705353 0.5806112 0.0883687 -0.7148764 0.9977973 ...
];
Z = [ ...
0.5403023 0.8438540 -0.5328330 -0.8485703 0.5253220 0.8532201 -0.5177698 -0.8578031 0.5101770 0.8623189 -0.5025443; ...
-0.4161468 0.9074468 0.4241790 -0.9036922 -0.4321779 0.8998668 0.4401430 -0.8959709 -0.4480736 0.8920049 0.4559691; ...
-0.9899925 0.1367372 0.9912028 -0.1279637 -0.9923355 0.1191801 0.9933904 -0.1103872 -0.9943675 0.1015857 0.9952666; ...
-0.6536436 -0.7596879 0.6469193 0.7654141 -0.6401443 -0.7710802 0.6333192 0.7766860 -0.6264444 -0.7822309 0.6195206; ...
0.2836622 -0.9576595 -0.2921388 0.9550736 0.3005925 -0.9524130 -0.3090227 0.9496777 0.3174287 -0.9468680 -0.3258098; ...
0.9601703 -0.2751633 -0.9626059 0.2666429 0.9649660 -0.2581016 -0.9672506 0.2495401 0.9694594 -0.2409590 -0.9715922; ...
0.7539023 0.6603167 -0.7480575 -0.6669381 0.7421542 0.6735072 -0.7361927 -0.6800235 0.7301736 0.6864866 -0.7240972; ...
-0.1455000 0.9887046 0.1542514 -0.9873393 -0.1629908 0.9858966 0.1717173 -0.9843766 -0.1804304 0.9827796 0.1891294; ...
-0.9111303 0.4080821 0.9147424 -0.3999853 -0.9182828 0.3918572 0.9217513 -0.3836984 -0.9251475 0.3755096 0.9284713; ...
-0.8390715 -0.5477293 0.8342234 0.5551133 -0.8293098 -0.5624539 0.8243313 0.5697503 -0.8192882 -0.5770022 0.8141810; ...
0.0044257 -0.9999608 -0.0132767 0.9998433 0.0221268 -0.9996475 -0.0309750 0.9993733 0.0398209 -0.9990208 -0.0486636 ...
];
expected_U = [ ...
-8.7768e-02 6.6295e-02 9.9393e-01 -7.3541e-09 2.6126e-09 8.9342e-09 7.3746e-09 6.3307e-09 1.9330e-09 5.8837e-09 1.0748e-08; ...
4.1857e-01 6.3283e-02 3.2740e-02 1.0513e-01 -2.9956e-01 -4.1331e-01 -2.4501e-02 -3.9779e-01 -2.2319e-01 4.8715e-01 -3.1960e-01; ...
-2.7094e-01 -3.5168e-01 -4.6789e-04 -1.3334e-03 -5.0393e-01 5.3823e-01 -1.2617e-01 6.4610e-02 -2.4681e-01 8.7975e-02 -4.1296e-01; ...
-6.9175e-03 4.7105e-01 -3.2029e-02 -6.1519e-01 3.1182e-01 2.1042e-01 1.9123e-02 6.9813e-02 6.6817e-03 2.1285e-01 -4.5440e-01; ...
2.8145e-01 -3.6402e-01 4.9133e-02 -4.8541e-01 -2.9875e-01 -1.7364e-01 -1.8409e-01 3.3797e-01 5.0198e-01 1.4099e-01 1.0425e-01; ...
-4.2070e-01 8.2037e-02 -4.2622e-02 -3.7412e-01 -2.0548e-01 -3.7913e-01 -4.3340e-01 -3.7632e-01 -1.2082e-01 -3.7900e-01 2.9018e-02; ...
3.5776e-01 2.3938e-01 1.5625e-02 -6.0587e-02 -8.4835e-02 5.1898e-01 -4.4855e-01 -2.9060e-01 -5.4789e-02 9.5734e-02 4.8625e-01; ...
-1.2287e-01 -4.4574e-01 1.8881e-02 -4.0129e-01 2.4959e-01 -1.6747e-02 2.7836e-01 -1.4232e-01 -4.7096e-01 3.1732e-01 3.7684e-01; ...
-1.7108e-01 4.3787e-01 -4.4312e-02 1.6714e-02 -3.5479e-01 -1.8246e-01 -1.6218e-02 5.8739e-01 -3.6613e-01 2.2286e-01 2.9762e-01; ...
3.8280e-01 -2.1955e-01 4.8446e-02 3.5064e-02 3.3878e-01 -1.0977e-01 -4.5998e-01 3.5401e-01 -4.6721e-01 -2.7865e-01 -2.0502e-01; ...
-4.1054e-01 -1.0429e-01 -2.9296e-02 2.6208e-01 3.4276e-01 -7.9700e-02 -5.2045e-01 4.2613e-02 2.1329e-01 5.5584e-01 -8.1707e-03 ...
];
expected_S = [ ...
2.8647e+00 0 0 0 0 0 0 0 0 0 0; ...
0 2.1708e+00 0 0 0 0 0 0 0 0 0; ...
0 0 4.9910e-01 0 0 0 0 0 0 0 0; ...
0 0 0 2.1142e-15 0 0 0 0 0 0 0; ...
0 0 0 0 1.8959e-15 0 0 0 0 0 0; ...
0 0 0 0 0 1.0690e-15 0 0 0 0 0; ...
0 0 0 0 0 0 7.3374e-16 0 0 0 0; ...
0 0 0 0 0 0 0 3.9452e-16 0 0 0; ...
0 0 0 0 0 0 0 0 1.9139e-16 0 0; ...
0 0 0 0 0 0 0 0 0 1.1527e-16 0; ...
0 0 0 0 0 0 0 0 0 0 3.3199e-17 ...
];
expected_X_proj = [ ...
0.5942908 0.4673930 -0.5901537 -0.4726167 0.5859704; ...
0.7407769 -0.2362524 -0.7428681 0.2296770 0.7449011; ...
0.2061962 -0.7226883 -0.2125930 0.7208066 0.2189732; ...
0.2998439 0.7325736 -0.2933596 -0.7351702 0.2868523; ...
0.2703114 1.7524802 -0.2547995 -1.7547355 0.2392677; ...
-0.0077441 1.1611645 0.0180220 -1.1610050 -0.0282985; ...
0.4312629 0.6110811 -0.4258540 -0.6148505 0.4204117; ...
0.7757065 -0.0292558 -0.7759655 0.0223874 0.7761637; ...
0.4069691 -0.6426950 -0.4126578 0.6390424 0.4183142; ...
0.2519379 0.2529051 -0.2496993 -0.2551153 0.2474412; ...
0.3106133 1.6115212 -0.2963491 -1.6141443 0.2820616; ...
0.0837123 1.4885120 -0.0705369 -1.4891363 0.0573559; ...
0.2338810 0.7060910 -0.2276311 -0.7081058 0.2213634; ...
0.7488439 0.1800715 -0.7472500 -0.1866857 0.7455976; ...
0.5753230 -0.5115050 -0.5798506 0.5063725 0.5843327 ...
];
expected_X_rec = [ ...
-0.8457687 -1.1802209 -0.4295835 0.7160111 1.2033083 0.5842895 -0.5719224 -1.2023115 -0.7273009 0.4163868 1.1772504; ...
-1.1069703 -0.8091291 0.2326216 1.0605011 0.9133608 -0.0735193 -0.9928060 -0.9993115 -0.0870546 0.9052399 1.0652610; ...
-0.3504284 0.3058724 0.6809556 0.4299713 -0.2163266 -0.6637348 -0.5009083 0.1224510 0.6332294 0.5618196 -0.0261245; ...
1.5461000 0.5097743 -0.9952355 -1.5852304 -0.7177718 0.8096029 1.5926324 0.9114030 -0.6077661 -1.5681578 -1.0867925; ...
2.1736462 0.1275389 -2.0358271 -2.3274631 -0.4792402 1.8095939 2.4346957 0.8213495 -1.5471417 -2.4931979 -1.1470195; ...
0.8027520 -0.3719553 -1.2046886 -0.9298368 0.1999027 1.1458526 1.0383109 -0.0238491 -1.0640823 -1.1260032 -0.1526819; ...
-0.5962458 -1.0762811 -0.5667885 0.4638068 1.0679803 0.6902577 -0.3220847 -1.0383039 -0.7999113 0.1739161 0.9878458; ...
-1.1451204 -1.0236349 0.0389758 1.0657524 1.1126811 0.1366160 -0.9650533 -1.1794569 -0.3094734 0.8450386 1.2226260; ...
-0.6411766 -0.0298635 0.6089059 0.6878501 0.1343880 -0.5426298 -0.7207563 -0.2362228 0.4654928 0.7392365 0.3333295; ...
1.0401337 0.5385790 -0.4581428 -1.0336502 -0.6588244 0.3217215 1.0064781 0.7658834 -0.1788610 -0.9591614 -0.8576132; ...
2.2104871 0.2688508 -1.9199657 -2.3435745 -0.6125118 1.6816915 2.4297553 0.9439134 -1.4097582 -2.4673046 -1.2564225; ...
1.3485286 -0.2480577 -1.6165809 -1.4988271 -0.0030586 1.4955220 1.6191265 0.2541136 -1.3445302 -1.7070191 -0.5000826; ...
-0.2992262 -0.8866052 -0.6588435 0.1746559 0.8475775 0.7412402 -0.0465899 -0.7915855 -0.8088010 -0.0824086 0.7197499; ...
-1.0920507 -1.1565985 -0.1577749 0.9861062 1.2233658 0.3358685 -0.8604247 -1.2656474 -0.5072398 0.7175218 1.2825971; ...
-0.8808488 -0.3632203 0.4883513 0.8909350 0.4743971 -0.3782993 -0.8831891 -0.5760789 0.2606755 0.8577661 0.6662305 ...
];
[U, S] = pca(X);
success = 1;
success = assert(inDelta(norm( U - expected_U ), 0.0, eps), "pca(): principal components (output U)") && success;
success = assert(inDelta(norm( S - expected_S ), 0.0, eps), "pca(): principal components (output S)") && success;
X_proj = projectData(X, Z, 5);
success = assert(inDelta(norm( X_proj - expected_X_proj), 0.0, eps), "projectData()") && success;
X_rec = recoverData(X(:,1:5), Z, 5);
success = assert(inDelta(norm( X_rec - expected_X_rec), 0.0, eps), "recoverData()") && success;
printf("\n");
endfunction
function success = inDelta(actual, expected, delta)
success = abs(actual - expected) < delta;
endfunction
function success = assert(expected, msg)
if (~expected)
printf("\nFAILURE: %s\n", msg);
else
printf(".");
endif
success = expected;
endfunction
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment