Demo for PAA codes
copyright (c) Sohan Seth, sohan.seth@hiit.fi
Contents
Poisson observation
close all rng default, options = generate_options(); options.verbose = true; options.display = true; options.eps = 10^-10; options.maxIter = 100000; options.matFeatLat = []; n = 100; % Generating data matFeatSam = [ceil(rand(1,n)*10); ceil(rand(1,n)*10)]; % Learning archetypes [matSamLat, matLatSam_1, ~] = paa_Poisson(matFeatSam, 4, options); archetypes = matFeatSam * matSamLat; axis([0 11 0 11]), box on, set(gca, 'fontsize', 20) % Computing projections given archetypes options.matFeatLat = archetypes; options.display = false; [~, matLatSam_2, ~] = paa_Poisson(matFeatSam, [], options); fprintf('difference between projections %0.6f\n', ... norm(archetypes * matLatSam_2 - archetypes * matLatSam_1, 1) / numel(matFeatSam))
.......... [1000] .......... [2000] .......... [3000] .......... [4000] .......... [5000] .......... [6000] .......... [7000] .......... [8000] .......... [9000] .......... [10000] .......... [11000] .......... [12000] .......... [13000] .......... [14000] .......... [15000] .......... [16000] .......... [17000] .......... [18000] .......... [19000] .......... [20000] .......... [21000] .......... [22000] .......... [23000] .......... [24000] .......... [25000] .......... [26000] .......... [27000] ..... convergence reached in 27547 iterations .......... [1000] .......... [2000] .......... [3000] .......... [4000] .......... [5000] .......... [6000] .......... [7000] .......... [8000] .......... [9000] ......... convergence reached in 9991 iterations difference between projections 0.000096
Bernoulli observation
close all rng default, options = generate_options(); options.verbose = true; options.display = true; options.eps = 10^-6; options.maxIter = 1000; options.matFeatLat = []; n = 500; % Generating data matFeatSam = [rand(1,n) > 0.8; rand(1,n) > 0.2]; % Learning archetypes [matSamLat, matLatSam_1, ~] = paa_Bernoulli(matFeatSam, 4, options); archetypes = matFeatSam * matSamLat; axis([-0.1 1.1 -0.1 1.1]), box on, set(gca, 'fontsize', 20) % Computing projections given archetypes options.matFeatLat = archetypes; options.display = false; [~, matLatSam_2, ~] = paa_Bernoulli(matFeatSam, [], options); fprintf('difference between projections %0.6f\n', ... norm(archetypes * matLatSam_2 - archetypes * matLatSam_1, 1) / numel(matFeatSam))
.......... [100] convergence reached in 105 iterations ..... convergence reached in 54 iterations difference between projections 0.000000
Multinomial observations
close all rng default, options = generate_options(); options.verbose = true; options.display = true; options.eps = 10^-6; options.maxIter = 10000; options.matFeatLat = []; n = 500; % Generating data matFeatSam = rand(3, n); matFeatSam = bsxfun(@rdivide, matFeatSam, sum(matFeatSam)); nFeatSam = mnrnd(1000, matFeatSam')'; matFeatSam = bsxfun(@rdivide, nFeatSam, sum(nFeatSam)); % empirical probabilities % Learning archetypes [matSamLat, matLatSam_1, ~] = paa_stochastic(nFeatSam, 3, options); archetypes = matFeatSam * matSamLat; axis([0 1000 0 1000]), box on, set(gca, 'fontsize', 20) % Computing projections given archetypes options.matFeatLat = archetypes; options.display = false; [~, matLatSam_2, ~] = paa_stochastic(nFeatSam, [], options); fprintf('difference between projections %0.6f\n', ... norm(archetypes * matLatSam_2 - archetypes * matLatSam_1, 1) / numel(matFeatSam))
More than two features. Only the first two will be displayed. .......... [100] .......... [200] .......... [300] .......... [400] .......... [500] .......... [600] ..... convergence reached in 657 iterations .. convergence reached in 23 iterations difference between projections 0.000024
Normal observation
close all rng default, options = generate_options(); options.verbose = true; options.display = true; options.eps = 10^-6; options.maxIter = 20; options.matFeatLat = []; n = 100; % Generating data matFeatSam = [rand(1,n); rand(1,n)]; % Learning archetypes [matSamLat, matLatSam_1, ~] = paa_normal(matFeatSam, 4, options); archetypes = matFeatSam * matSamLat; axis([0 1 0 1]), box on, set(gca, 'fontsize', 20) % Computing projections given archetypes options.matFeatLat = archetypes; options.display = false; [~, matLatSam_2, ~] = paa_normal(matFeatSam, [], options); fprintf('difference between projections %0.6f\n', ... norm(archetypes * matLatSam_2 - archetypes * matLatSam_1, 1) / numel(matFeatSam))
alpha 1.00 beta 1.00 [Iteration 1] [Iteration 2] [Iteration 3] [Iteration 4] [Iteration 5] [Iteration 6] [Iteration 7] [Iteration 8] [Iteration 9] [Iteration 10] [Iteration 11] [Iteration 12] [Iteration 13] [Iteration 14] [Iteration 15] [Iteration 16] [Iteration 17] [Iteration 18] [Iteration 19] [Iteration 20] alpha 1.00 beta 1.00 difference between projections 0.001373
Normal observation with R interface
close all rng default, % Generating data matFeatSam = [rand(1,n); rand(1,n)]; % Learning archetypes [matSamLat, matLatSam_1, ~] = classic_aa(matFeatSam, 4); archetypes = matFeatSam * matSamLat; % Computing projections given archetypes matLatSam_2 = classic_aa_test(matFeatSam); fprintf('difference between projections %0.6f\n', ... norm(archetypes * matLatSam_2 - archetypes * matLatSam_1, 1) / numel(matFeatSam))
Loading required package: methods Loading required package: modeltools Loading required package: stats4 Loading required package: nnls R.matlab v3.1.1 (2014-10-10) successfully loaded. See ?R.matlab for help. Attaching package: 'R.matlab' The following objects are masked from 'package:base': getOption, isOpen *** k=4, rep=1: *** k=4, rep=2: *** k=4, rep=3: *** k=4, rep=4: *** k=4, rep=5: *** k=4, rep=6: *** k=4, rep=7: *** k=4, rep=8: *** k=4, rep=9: *** k=4, rep=10: Warning messages: 1: In method(..., k = k[i]) : k=4: Error in qr.solve(alphas %*% t(alphas)): singular matrix 'a' in solve 2: In method(..., k = k[i]) : k=4: Error in qr.solve(alphas %*% t(alphas)): singular matrix 'a' in solve Loading required package: methods Loading required package: modeltools Loading required package: stats4 Loading required package: nnls R.matlab v3.1.1 (2014-10-10) successfully loaded. See ?R.matlab for help. Attaching package: 'R.matlab' The following objects are masked from 'package:base': getOption, isOpen difference between projections 0.000000