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
54from 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
7577def 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
84114def 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
93122def 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
111137def 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