-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathweak_classifier_test.py
More file actions
98 lines (79 loc) · 3.86 KB
/
weak_classifier_test.py
File metadata and controls
98 lines (79 loc) · 3.86 KB
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
import unittest
import numpy
import faces
import weak_classifier
def norm_label(label):
if label == True:
return 1
elif label == False:
return -1
else:
assert label == 1 or label == -1
return label
class TestBestThresh(unittest.TestCase):
def validate(self, features, labels, weights, output):
assert len(features) == len(labels) == len(weights)
data = [faces.Datum(str(idx),
norm_label(labels[idx]),
faces.f_vec([features[idx]]))
for idx in xrange(len(features))]
self.assertEqual(weak_classifier.best_thresh(data, weights, 0),
output)
def test_failure(self):
with self.assertRaises(AssertionError):
self.validate([], [], [], (-1, 1, 0))
def test_single(self):
self.validate([1], [True], [1], (float("-inf"), -1, 0))
self.validate([0], [True], [1], (float("-inf"), -1, 0))
self.validate([0], [False], [1], (float("-inf"), 1, 0))
def test_double(self):
self.validate([0, 10], [False, False], [1, 1], (float("-inf"), 1, 0))
self.validate([0, 10], [False, True], [1, 1], (5, -1, 0))
self.validate([0, 10], [True, False], [1, 1], (5, 1, 0))
self.validate([0, 10], [True, True], [1, 1], (float("-inf"), -1, 0))
self.validate([0, 10], [False, False], [1, 0], (float("-inf"), 1, 0))
self.validate([0, 10], [False, False], [0, 1], (float("-inf"), 1, 0))
self.validate([0, 10], [False, True], [1, 0], (float("-inf"), 1, 0))
self.validate([0, 10], [False, True], [0, 1], (float("-inf"), -1, 0))
self.validate([0, 10], [True, False], [1, 0], (float("-inf"), -1, 0))
def test_triple(self):
self.validate([0, 10, 20], [False, False, False], [1, 1, 1], (float("-inf"), 1, 0))
self.validate([0, 10, 20], [True, False, False], [1, 1, 1], (5, 1, 0))
self.validate([0, 10, 20], [False, True, False], [1, 1, 1], (float("-inf"), 1, 1))
self.validate([0, 10, 20], [False, False, True], [1, 1, 1], (15, -1, 0))
self.validate([0, 10, 20], [False, True, False], [0.5, 1, 1], (15, 1, 0.5))
self.validate([0, 10, 20], [False, True, False], [1, 1, 0.5], (5, -1, 0.5))
class TestBestFeature(unittest.TestCase):
def validate(self, feature_grid, labels, weights, output):
assert len(feature_grid) == len(labels) == len(weights)
data = [faces.Datum(str(idx),
norm_label(labels[idx]),
faces.f_vec(feature_grid[idx]))
for idx in xrange(len(feature_grid))]
self.assertEqual(weak_classifier.best_feature(data, weights),
output)
def test_min(self):
self.validate([[7]], [True], [1], (0, float("-inf"), -1, 0))
self.validate([[7, -75]], [True], [1], (0, float("-inf"), -1, 0))
self.validate([[7],[69]], [True, True], [1,1], (0, float("-inf"), -1, 0))
self.validate([[7],[69]], [True, False], [1,1], (0, 38, 1, 0))
def test_square(self):
self.validate([[7, -75],
[69, 30]],
[True, True], [1,1], (0, float("-inf"), -1, 0))
self.validate([[7, -75],
[69, 30]],
[True, False], [1,1], (0, 38, 1, 0))
self.validate([[7, -75],
[7, 30]],
[True, False], [1,1], (1, -22.5, 1, 0))
self.validate([[7, -75],
[7, 30]],
[False, True], [1,1], (1, -22.5, -1, 0))
def test_triple_square(self):
self.validate([[7, -75, -410],
[69, 100, -78],
[180, -17, 1]],
[False, True, False], [1,1,1], (1, 41.5, -1, 0))
if __name__ == '__main__':
unittest.main()