summaryrefslogtreecommitdiffstats
path: root/data/combined/scriptSkeletonFixedSplit.m
diff options
context:
space:
mode:
authorJon Whiteaker <jbw@berkeley.edu>2012-03-05 09:11:56 -0800
committerJon Whiteaker <jbw@berkeley.edu>2012-03-05 09:11:56 -0800
commit19bb0ff0935f8adc4b63ffd8e8aa58706bdcf7a2 (patch)
tree57538159d950a7bed088811c9fc00f1ea80513b9 /data/combined/scriptSkeletonFixedSplit.m
parentbc6242856f007f32319aa503efd7efbdc043bf4c (diff)
downloadkinect-19bb0ff0935f8adc4b63ffd8e8aa58706bdcf7a2.tar.gz
fixed some of the graphs
Diffstat (limited to 'data/combined/scriptSkeletonFixedSplit.m')
-rw-r--r--data/combined/scriptSkeletonFixedSplit.m130
1 files changed, 130 insertions, 0 deletions
diff --git a/data/combined/scriptSkeletonFixedSplit.m b/data/combined/scriptSkeletonFixedSplit.m
new file mode 100644
index 0000000..9430dc8
--- /dev/null
+++ b/data/combined/scriptSkeletonFixedSplit.m
@@ -0,0 +1,130 @@
+
+mostFreqClasses = 100;
+numEx = 1;
+scenario = 'off';
+solver = argv(){3};
+
+% load data
+trainD = dlmread(argv(){1}, ',', 1, 0);
+testD = dlmread(argv(){2}, ',', 1, 0);
+D = [trainD; testD];
+X = D(:, 6 : end);
+y = D(:, 2);
+session = D(:, 2);
+z = D(:, 5);
+
+% remove missing values and outliers
+active = all(X ~= -1, 2);
+active = active & (z > 2) & (z < 3);
+
+% remove least frequent classes
+tab = tabulate(y);
+[nil, delc] = sort(tab(:, 2), 'descend');
+delc = delc(mostFreqClasses + 1 : end);
+for c = delc'
+ active(y == c) = false;
+end
+
+% update data
+X = X(active, :);
+y = y(active);
+session = session(active);
+z = z(active);
+numClasses = max(y);
+N = size(X, 1);
+K = size(X, 2);
+
+% normalization
+X = zscore(X);
+
+train = 1 : sum(active(1 : size(trainD, 1)));
+test = train(end) + 1 : N;
+
+prec = zeros(numEx, 0);
+recall = zeros(numEx, 0);
+for ex = 1 : numEx
+ % NB classifier with multivariate Gaussians
+ Py = zeros(numClasses, 1);
+ Pxy = zeros(numClasses, K);
+ Sigma = zeros(K, K);
+ for c = 1 : numClasses
+ sub = train(y(train) == c);
+ if (~isempty(sub))
+ Py(c) = length(sub) / length(train);
+ Pxy(c, :) = mean(X(sub, :), 1);
+ Sigma = Sigma + Py(c) * cov(X(sub, :));
+ end
+ end
+
+ switch (solver)
+ case 'NB'
+ % NB inference
+ logp = repmat(log(Py)', N, 1);
+ for c = 1 : numClasses
+ if (Py(c) > 0)
+ logp(:, c) = log(Py(c)) + log(mvnpdf(X, Pxy(c, :), Sigma));
+ end
+ end
+
+ case 'SHT'
+ % sequential hypothesis testing
+ logp = zeros(N, numClasses);
+ for c = 1 : numClasses
+ if (Py(c) > 0)
+ logp(:, c) = log(mvnpdf(X, Pxy(c, :), Sigma));
+ end
+ end
+
+ nhyp = zeros(N, 1);
+ for i = 1 : N
+ if ((i == 1) || (session(i - 1) ~= session(i)))
+ logp(i, :) = logp(i, :) + log(Py');
+ nhyp(i) = 2;
+ else
+ logp(i, :) = logp(i, :) + logp(i - 1, :);
+ nhyp(i) = nhyp(i - 1) + 1;
+ end
+ end
+ end
+
+ % prediction
+ [conf, yp] = max(logp, [], 2);
+
+ % sum up all but the highest probability
+ norm1 = logp - repmat(conf, 1, numClasses);
+ norm1((1 : N) + (yp' - 1) * N) = -Inf;
+ norm1 = log(sum(exp(norm1), 2));
+
+ % evaluation
+ for i = 1 : 1000
+ th = 3 - i;
+ sub = test(norm1(test) < th);
+ prec(ex, i) = mean(y(sub) == yp(sub));
+ recall(ex, i) = length(sub) / length(test);
+ end
+end
+prec(isnan(prec)) = 1;
+
+hold on;
+plot(100 * recall, 100 * prec, '-', ...
+ 'LineWidth', 1, 'MarkerSize', 4, 'MarkerFaceColor', 'w');
+xlabel('Recall [%]');
+ylabel('Precision [%]');
+hold off;
+pause
+pr = [recall',prec'];
+save pr.mat pr;
+
+% figure;
+% A = X - Pxy(y, :);
+% for k = 1 : 9
+% subplot(2, 5, k);
+% hist(A(:, k), -5 : 0.1 : 5);
+% h = findobj(gca, 'Type', 'patch');
+% set(h, 'FaceColor', [0.5, 1, 0.5], 'LineStyle', 'none')
+% axis([-3, 3, 0, Inf]);
+% xlabel(sprintf('x_%i - E[x_%i | y]', k, k));
+% set(gca, 'XTick', []);
+% ylabel(sprintf('P(x_%i - E[x_%i | y])', k, k));
+% set(gca, 'YTick', []);
+% end