-
Notifications
You must be signed in to change notification settings - Fork 0
/
MwKwavg-test.lua
123 lines (106 loc) · 3.46 KB
/
MwKwavg-test.lua
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
-- MwKwavg-test.lua
-- unit tests for class MwKwavg
require 'all'
tests = {}
tester = Tester()
function makeExample()
local nsamples = 10
local ndims = 3
local xs = torch.Tensor(nsamples, ndims)
local ys = torch.Tensor(nsamples)
for i = 1, nsamples do
for d = 1, ndims do
xs[i][d] = i
ys[i] = i
end
end
return nsamples, ndims, xs, ys
end
function tests.estimate()
local v = makeVerbose(false, 'test.estimate')
local trace = false
local nsamples, ndims, xs, ys = makeExample()
local query = torch.Tensor(ndims):zero()
-- for calculations, see lab book date 2012-08-23
-- lambda: 1 2 3 4 5 6
local expectedSeq = {0/0, 1, 1, 1.2353, 1.3714, 1.6364}
for lambda = 1, 6 do
local kwavg = MwKwavg(xs, ys, 'epanechnikov quadratic')
v('lambda', lambda)
local ok, actual = kwavg:estimate(query, lambda)
v('ok', ok)
v('actual', actual)
if lambda == 1 then
tester:assert(not ok, 'lambda=' .. lambda)
else
tester:assert(ok, 'lambda=' .. lambda)
local expected = expectedSeq[lambda]
if trace then
print('lambda, actual, expected', lambda, actual, expected)
end
local tolerance = 0.0001
tester:assert(math.abs(expected - actual) < tolerance,
'lambda=' .. lambda)
end
end
end
-- test smoothing without using the query point
function tests.smooth1()
if true then return end
local trace = false
local nsamples, ndims, xs, ys = makeExample()
local query = torch.Tensor(ndims):zero()
-- for calculations, see lab book date 2012-08-23
-- i: 1 2 3 4
local expectedSeq = {0/0, 2, 3, 3.9999}
for i = 1, 4 do
local kwavg = MwKwavg(xs, ys, 'epanechnikov quadratic')
local errorIfZeroSumWeights = false
local useQueryPoint = false
local ok, actual = kwavg:smooth(i, i, useQueryPoint)
if i == 1 then
tester:assert(not ok, 'i=' .. i)
else
tester:assert(ok, 'i=' .. i)
local expected = expectedSeq[i]
if trace then
print('i, actual, expected', i, actual, expected)
end
local tolerance = 0.0002
tester:assert(math.abs(expected - actual) < tolerance,
'i=' .. i)
end
end
end
-- test smoothing using the query point
function tests.smooth2()
if true then return end
local trace = false
local nsamples, ndims, xs, ys = makeExample()
local query = torch.Tensor(ndims):zero()
-- for calculations, see lab book date 2012-08-23
local function test(queryIndex, lambda, expected)
local kwavg = MwKwavg(xs, ys, 'epanechnikov quadratic')
local useQueryPoint = true
local ok, actual = kwavg:smooth(queryIndex, lambda, useQueryPoint)
tester:assert(ok, 'no error')
if trace then
print('queryIndex, lambda, actual, expected',
queryIndex, lambda, actual, expected)
end
local tolerance = 0.0001
tester:assert(math.abs(expected - actual) < tolerance,
'queryIndex=' .. queryIndex .. ' lambda=' .. lambda)
end
test(3, 0.4, 3.0)
test(1, 3, 1.4)
end
-- run unit tests
if false then
--tester:add(tests.estimate, 'test.estimate')
--tester:add(tests.smooth1, 'test.smooth1')
tester:add(tests.smooth2, 'test.smooth2')
else
tester:add(tests)
end
tester:run(true) -- true ==> verbose