Skip to content

Commit 2bba02e

Browse files
TheSPARTAnorvig
authored andcommitted
Added some unittests in test_learning.py (aimacode#293)
1 parent 203a695 commit 2bba02e

1 file changed

Lines changed: 36 additions & 17 deletions

File tree

tests/test_learning.py

Lines changed: 36 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
from learning import parse_csv, weighted_mode, weighted_replicate, DataSet, \
2-
PluralityLearner, NaiveBayesLearner, NearestNeighborLearner, \
3-
NeuralNetLearner, PerceptronLearner, DecisionTreeLearner, \
4-
euclidean_distance, grade_learner, err_ratio, random_weights
1+
2+
import pytest
3+
import math
54
from utils import DataFile
5+
from learning import (parse_csv, weighted_mode, weighted_replicate, DataSet,
6+
PluralityLearner, NaiveBayesLearner, NearestNeighborLearner,
7+
rms_error, manhattan_distance, mean_boolean_error, mean_error)
68

79

810

@@ -74,16 +76,43 @@ def test_naive_bayes():
7476

7577
def test_k_nearest_neighbors():
7678
iris = DataSet(name="iris")
77-
7879
kNN = NearestNeighborLearner(iris,k=3)
80+
assert kNN([5,3,1,0.1]) == "setosa"
7981
assert kNN([5, 3, 1, 0.1]) == "setosa"
8082
assert kNN([6, 5, 3, 1.5]) == "versicolor"
8183
assert kNN([7.5, 4, 6, 2]) == "virginica"
8284

85+
def test_rms_error():
86+
assert rms_error([2,2], [2,2]) == 0
87+
assert rms_error((0,0), (0,1)) == math.sqrt(0.5)
88+
assert rms_error((1,0), (0,1)) == 1
89+
assert rms_error((0,0), (0,-1)) == math.sqrt(0.5)
90+
assert rms_error((0,0.5), (0,-0.5)) == math.sqrt(0.5)
91+
92+
def test_manhattan_distance():
93+
assert manhattan_distance([2,2], [2,2]) == 0
94+
assert manhattan_distance([0,0], [0,1]) == 1
95+
assert manhattan_distance([1,0], [0,1]) == 2
96+
assert manhattan_distance([0,0], [0,-1]) == 1
97+
assert manhattan_distance([0,0.5], [0,-0.5]) == 1
98+
99+
def test_mean_boolean_error():
100+
assert mean_boolean_error([1,1], [0,0]) == 1
101+
assert mean_boolean_error([0,1], [1,0]) == 1
102+
assert mean_boolean_error([1,1], [0,1]) == 0.5
103+
assert mean_boolean_error([0,0], [0,0]) == 0
104+
assert mean_boolean_error([1,1], [1,1]) == 0
105+
106+
def test_mean_error():
107+
assert mean_error([2,2], [2,2]) == 0
108+
assert mean_error([0,0], [0,1]) == 0.5
109+
assert mean_error([1,0], [0,1]) == 1
110+
assert mean_error([0,0], [0,-1]) == 0.5
111+
assert mean_error([0,0.5], [0,-0.5]) == 0.5
112+
83113

84114
def test_decision_tree_learner():
85115
iris = DataSet(name="iris")
86-
87116
dTL = DecisionTreeLearner(iris)
88117
assert dTL([5, 3, 1, 0.1]) == "setosa"
89118
assert dTL([6, 5, 3, 1.5]) == "versicolor"
@@ -92,36 +121,30 @@ def test_decision_tree_learner():
92121

93122
def test_neural_network_learner():
94123
iris = DataSet(name="iris")
95-
96124
classes = ["setosa","versicolor","virginica"]
97125
iris.classes_to_numbers(classes)
98-
99126
nNL = NeuralNetLearner(iris, [5], 0.15, 75)
100127
tests = [([5, 3, 1, 0.1], 0),
101128
([5, 3.5, 1, 0], 0),
102129
([6, 3, 4, 1.1], 1),
103130
([6, 2, 3.5, 1], 1),
104131
([7.5, 4, 6, 2], 2),
105132
([7, 3, 6, 2.5], 2)]
106-
107133
assert grade_learner(nNL, tests) >= 2/3
108134
assert err_ratio(nNL, iris) < 0.25
109135

110136

111137
def test_perceptron():
112138
iris = DataSet(name="iris")
113139
iris.classes_to_numbers()
114-
115140
classes_number = len(iris.values[iris.target])
116-
117141
perceptron = PerceptronLearner(iris)
118142
tests = [([5, 3, 1, 0.1], 0),
119143
([5, 3.5, 1, 0], 0),
120144
([6, 3, 4, 1.1], 1),
121145
([6, 2, 3.5, 1], 1),
122146
([7.5, 4, 6, 2], 2),
123147
([7, 3, 6, 2.5], 2)]
124-
125148
assert grade_learner(perceptron, tests) > 1/2
126149
assert err_ratio(perceptron, iris) < 0.4
127150

@@ -130,12 +153,8 @@ def test_random_weights():
130153
min_value = -0.5
131154
max_value = 0.5
132155
num_weights = 10
133-
134156
test_weights = random_weights(min_value, max_value, num_weights)
135-
136157
assert len(test_weights) == num_weights
137-
138158
for weight in test_weights:
139159
assert weight >= min_value and weight <= max_value
140-
141-
160+

0 commit comments

Comments
 (0)