1
1
from learning import parse_csv , weighted_mode , weighted_replicate , DataSet , \
2
2
PluralityLearner , NaiveBayesLearner , NearestNeighborLearner , \
3
3
NeuralNetLearner , PerceptronLearner , DecisionTreeLearner , \
4
- euclidean_distance
4
+ euclidean_distance , grade_learner
5
5
from utils import DataFile
6
6
7
7
8
8
9
9
def test_euclidean ():
10
- distance = euclidean_distance ([1 ,2 ], [3 ,4 ])
10
+ distance = euclidean_distance ([1 , 2 ], [3 , 4 ])
11
11
assert round (distance , 2 ) == 2.83
12
12
13
- distance = euclidean_distance ([1 ,2 , 3 ], [4 ,5 , 6 ])
13
+ distance = euclidean_distance ([1 , 2 , 3 ], [4 , 5 , 6 ])
14
14
assert round (distance , 2 ) == 5.2
15
15
16
- distance = euclidean_distance ([0 ,0 , 0 ], [0 ,0 , 0 ])
16
+ distance = euclidean_distance ([0 , 0 , 0 ], [0 , 0 , 0 ])
17
17
assert distance == 0
18
18
19
19
@@ -24,7 +24,7 @@ def test_exclude():
24
24
25
25
def test_parse_csv ():
26
26
Iris = DataFile ('iris.csv' ).read ()
27
- assert parse_csv (Iris )[0 ] == [5.1 ,3.5 ,1.4 ,0.2 ,'setosa' ]
27
+ assert parse_csv (Iris )[0 ] == [5.1 , 3.5 , 1.4 , 0.2 ,'setosa' ]
28
28
29
29
30
30
def test_weighted_mode ():
@@ -47,25 +47,25 @@ def test_naive_bayes():
47
47
48
48
# Discrete
49
49
nBD = NaiveBayesLearner (iris )
50
- assert nBD ([5 ,3 , 1 , 0.1 ]) == "setosa"
50
+ assert nBD ([5 , 3 , 1 , 0.1 ]) == "setosa"
51
51
52
52
53
53
def test_k_nearest_neighbors ():
54
54
iris = DataSet (name = "iris" )
55
55
56
56
kNN = NearestNeighborLearner (iris ,k = 3 )
57
- assert kNN ([5 ,3 , 1 , 0.1 ]) == "setosa"
58
- assert kNN ([6 ,5 , 3 , 1.5 ]) == "versicolor"
59
- assert kNN ([7.5 ,4 , 6 , 2 ]) == "virginica"
57
+ assert kNN ([5 , 3 , 1 , 0.1 ]) == "setosa"
58
+ assert kNN ([6 , 5 , 3 , 1.5 ]) == "versicolor"
59
+ assert kNN ([7.5 , 4 , 6 , 2 ]) == "virginica"
60
60
61
61
62
62
def test_decision_tree_learner ():
63
63
iris = DataSet (name = "iris" )
64
64
65
65
dTL = DecisionTreeLearner (iris )
66
- assert dTL ([5 ,3 , 1 , 0.1 ]) == "setosa"
67
- assert dTL ([6 ,5 , 3 , 1.5 ]) == "versicolor"
68
- assert dTL ([7.5 ,4 , 6 , 2 ]) == "virginica"
66
+ assert dTL ([5 , 3 , 1 , 0.1 ]) == "setosa"
67
+ assert dTL ([6 , 5 , 3 , 1.5 ]) == "versicolor"
68
+ assert dTL ([7.5 , 4 , 6 , 2 ]) == "virginica"
69
69
70
70
71
71
def test_neural_network_learner ():
@@ -75,14 +75,11 @@ def test_neural_network_learner():
75
75
iris .classes_to_numbers (classes )
76
76
77
77
nNL = NeuralNetLearner (iris , [5 ], 0.15 , 75 )
78
- pred1 = nNL ([5 ,3 , 1 , 0.1 ])
79
- pred2 = nNL ([6 ,3 , 3 , 1.5 ])
80
- pred3 = nNL ([7.5 ,4 , 6 , 2 ])
78
+ tests = [ ([5 , 3 , 1 , 0.1 ], 0 ),
79
+ ([6 , 3 , 3 , 1.5 ], 1 ),
80
+ ([7.5 , 4 , 6 , 2 ], 2 )]
81
81
82
- # NeuralNetLearner might be wrong. If it is, check if prediction is in range.
83
- assert pred1 == 0 or pred1 in range (len (classes ))
84
- assert pred2 == 1 or pred2 in range (len (classes ))
85
- assert pred3 == 2 or pred3 in range (len (classes ))
82
+ assert grade_learner (nNL , tests ) >= 2
86
83
87
84
88
85
def test_perceptron ():
@@ -92,11 +89,8 @@ def test_perceptron():
92
89
classes_number = len (iris .values [iris .target ])
93
90
94
91
perceptron = PerceptronLearner (iris )
95
- pred1 = perceptron ([5 ,3 ,1 ,0.1 ])
96
- pred2 = perceptron ([6 ,3 ,4 ,1 ])
97
- pred3 = perceptron ([7.5 ,4 ,6 ,2 ])
98
-
99
- # PerceptronLearner might be wrong. If it is, check if prediction is in range.
100
- assert pred1 == 0 or pred1 in range (classes_number )
101
- assert pred2 == 1 or pred2 in range (classes_number )
102
- assert pred3 == 2 or pred3 in range (classes_number )
92
+ tests = [([5 , 3 , 1 , 0.1 ], 0 ),
93
+ ([6 , 3 , 4 , 1.1 ], 1 ),
94
+ ([7.5 , 4 , 6 , 2 ], 2 )]
95
+
96
+ assert grade_learner (perceptron , tests ) >= 2
0 commit comments