Skip to content

Commit 2bba02e

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

File tree

1 file changed

+36
-17
lines changed

1 file changed

+36
-17
lines changed

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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy