-
Notifications
You must be signed in to change notification settings - Fork 0
/
fest_test_enron.m
70 lines (46 loc) · 1.67 KB
/
fest_test_enron.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
%% Estimated Fit Test for Enron Tensor
load ('/home/bwlarse/Tensors/tensor_data_enron_large/enron_emails');
load('/home/bwlarse/Tensors/tensor_data_enron_large/enron_emails_solutions')
fprintf('\n---Loading in Enron Tensor---\n')
X = enron;
P = M;
P_normal = normalize(P, 1);
sz = size(X);
N = ndims(X);
normX = norm(X);
nzidx = tt_sub2ind64(sz,X.subs);
nzidx = sort(nzidx);
[fh, gh, lb_] = tt_gcp_fg_setup('Gaussian', X);
%% Parameters for fit run
srng = [1e5, 1e6, 5e6, 1e7];
ntrials = 10;
ns = length(srng); % Number of s-values
%% Calculate regular fit
% Check that the regular fit is working
tic
normresidual = sqrt( normX^2 + norm(P)^2 - 2 * innerprod(X,P) );
fit = 1 - (normresidual / normX); %fraction explained by model
fit_time = toc;
fprintf('True fit: %.3e Time %f \n', fit, fit_time)
%% Loop over sample range
for sidx = 1:ns
s = srng(sidx);
fprintf('\n---Using %.2e Samples, %i Trials---\n', 2*s, ntrials)
fsampler = @() tt_sample_stratified(X, nzidx, s, s);
fit_est = zeros(ntrials, 1);
normresidual_est = zeros(ntrials, 1);
fit_time = zeros(ntrials, 1);
for tidx = 1:ntrials
tic;
[fsubs,fvals,fwgts] = fsampler();
normresidual_est(tidx) = sqrt(tt_gcp_fg_est(P_normal,fh,gh,fsubs,fvals,fwgts,true,false,false,false));
fit_est(tidx) = 1 - (normresidual_est(tidx) / normX);
fit_time(tidx) = toc;
end
% Calculate summary statistics
fit_mean = mean(fit_est);
fit_std = std(fit_est);
fit_bias = abs(fit - fit_mean);
time_mean = mean(fit_time);
fprintf('[Fit Stats] Mean=%.4e Standard Deviaton=%.4e Bias=%.4e Time=%f \n', fit_mean, fit_std, fit_bias, time_mean)
end