diff options
author | Benjamin Franzke <benjaminfranzke@googlemail.com> | 2012-05-10 12:28:08 +0200 |
---|---|---|
committer | Benjamin Franzke <benjaminfranzke@googlemail.com> | 2012-05-10 12:28:08 +0200 |
commit | d0b29ac2f35923e05deda5dbe1856f04911c55bf (patch) | |
tree | c4c29e9b9ac725c9fd4de4861c056ecc99644774 | |
parent | 031f9ecc989d177215bc85e1827cf1d72db07643 (diff) | |
download | dmc-d0b29ac2f35923e05deda5dbe1856f04911c55bf.tar.gz dmc-d0b29ac2f35923e05deda5dbe1856f04911c55bf.tar.bz2 dmc-d0b29ac2f35923e05deda5dbe1856f04911c55bf.zip |
Add logarithmic interpolation predection
Slightly better than linear regression.
-rw-r--r-- | log_regress_pred.m | 22 | ||||
-rw-r--r-- | run_tests.m | 1 |
2 files changed, 23 insertions, 0 deletions
diff --git a/log_regress_pred.m b/log_regress_pred.m new file mode 100644 index 0000000..3c90441 --- /dev/null +++ b/log_regress_pred.m @@ -0,0 +1,22 @@ +function pred = log_regress_pred(price, quantity) + + days = size(price, 1) - size(quantity, 1); + product_count = size(price, 2); + test_count = size(quantity, 1); + test_set = 1:test_count; + pred_set = test_count+1:size(price, 1); + + pred = zeros(days, product_count); + for i = 1:product_count + [a,b] = regress_log(price(test_set, i), quantity(test_set, i)); + pred(:, i) = a * log(price(pred_set, i)) + b; + end + +endfunction + + +function [a,b] = regress_log(x, y) + ab = [ log(x) ones(length(x), 1) ] \ y; + a = ab(1); + b = ab(2);; +endfunction diff --git a/run_tests.m b/run_tests.m index 6ad92ce..b7b1a83 100644 --- a/run_tests.m +++ b/run_tests.m @@ -6,6 +6,7 @@ % plot prediction quallity calc_error('mean', q(29:42, :), mean_pred(q(1:28, :), 14)); calc_error('regress', q(29:42, :), regress_pred(p, q(1:28, :))); +calc_error('log regress', q(29:42, :), log_regress_pred(p, q(1:28, :))); calc_error('sevenday', q(29:42, :), repmat(sevenday_pred(q(1:28, :), 4), 2, 1)); calc_error('random', q(29:42, :), rand_pred(q(1:28, :), 14)); |