From f6a897c1d57c0b65193df60a3d3cd9ce69fd3b32 Mon Sep 17 00:00:00 2001 From: igoof Date: Sat, 4 Nov 2023 15:44:59 +0300 Subject: [PATCH 01/18] test commit --- homeworks/assignment01_knn/k_nearest_neighbor.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/homeworks/assignment01_knn/k_nearest_neighbor.py b/homeworks/assignment01_knn/k_nearest_neighbor.py index 57cc0c6ef..43b3f88c2 100644 --- a/homeworks/assignment01_knn/k_nearest_neighbor.py +++ b/homeworks/assignment01_knn/k_nearest_neighbor.py @@ -75,7 +75,7 @@ def compute_distances_two_loops(self, X): # not use a loop over dimension, nor use np.linalg.norm(). # ##################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - + print(1) # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** return dists @@ -97,7 +97,7 @@ def compute_distances_one_loop(self, X): # Do not use np.linalg.norm(). # ####################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - + print(1) # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** return dists @@ -125,7 +125,7 @@ def compute_distances_no_loops(self, X): # and two broadcast sums. # ######################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - + print(1) # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** return dists @@ -155,7 +155,7 @@ def predict_labels(self, dists, k=1): # Hint: Look up the function numpy.argsort. # ######################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - + print(1) # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ######################################################################### # TODO: # @@ -165,7 +165,7 @@ def predict_labels(self, dists, k=1): # label. # ######################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - + print('') # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** From 4cd815f9ede8f41c05f85bf8914caa04514268c3 Mon Sep 17 00:00:00 2001 From: igoof Date: Sat, 4 Nov 2023 17:16:59 +0300 Subject: [PATCH 02/18] one commit --- homeworks/assignment01_knn/k_nearest_neighbor.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/homeworks/assignment01_knn/k_nearest_neighbor.py b/homeworks/assignment01_knn/k_nearest_neighbor.py index 43b3f88c2..39e325160 100644 --- a/homeworks/assignment01_knn/k_nearest_neighbor.py +++ b/homeworks/assignment01_knn/k_nearest_neighbor.py @@ -75,7 +75,7 @@ def compute_distances_two_loops(self, X): # not use a loop over dimension, nor use np.linalg.norm(). # ##################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - print(1) + pass # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** return dists @@ -125,7 +125,7 @@ def compute_distances_no_loops(self, X): # and two broadcast sums. # ######################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - print(1) + pass # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** return dists @@ -165,7 +165,7 @@ def predict_labels(self, dists, k=1): # label. # ######################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - print('') + pass # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** From 32f29c483bd820c2e0421b02841eb54be4865e36 Mon Sep 17 00:00:00 2001 From: igoof Date: Sat, 4 Nov 2023 17:18:40 +0300 Subject: [PATCH 03/18] one commit --- homeworks/assignment01_knn/k_nearest_neighbor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeworks/assignment01_knn/k_nearest_neighbor.py b/homeworks/assignment01_knn/k_nearest_neighbor.py index 39e325160..43ee341c5 100644 --- a/homeworks/assignment01_knn/k_nearest_neighbor.py +++ b/homeworks/assignment01_knn/k_nearest_neighbor.py @@ -97,7 +97,7 @@ def compute_distances_one_loop(self, X): # Do not use np.linalg.norm(). # ####################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - print(1) + pass # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** return dists From ea1c717f753854eea731ded8cab94d6a582de41f Mon Sep 17 00:00:00 2001 From: igoof Date: Sat, 4 Nov 2023 17:33:11 +0300 Subject: [PATCH 04/18] one commit --- homeworks/assignment01_knn/k_nearest_neighbor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeworks/assignment01_knn/k_nearest_neighbor.py b/homeworks/assignment01_knn/k_nearest_neighbor.py index 43ee341c5..66936c167 100644 --- a/homeworks/assignment01_knn/k_nearest_neighbor.py +++ b/homeworks/assignment01_knn/k_nearest_neighbor.py @@ -155,7 +155,7 @@ def predict_labels(self, dists, k=1): # Hint: Look up the function numpy.argsort. # ######################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - print(1) + pass # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ######################################################################### # TODO: # From 603c8f9548f5e5ddcdeb91b1c37d3bd69cbe903e Mon Sep 17 00:00:00 2001 From: igoof Date: Sat, 4 Nov 2023 17:48:16 +0300 Subject: [PATCH 05/18] compute_distances_two_loops --- homeworks/assignment01_knn/k_nearest_neighbor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeworks/assignment01_knn/k_nearest_neighbor.py b/homeworks/assignment01_knn/k_nearest_neighbor.py index 66936c167..78f33e62e 100644 --- a/homeworks/assignment01_knn/k_nearest_neighbor.py +++ b/homeworks/assignment01_knn/k_nearest_neighbor.py @@ -75,7 +75,7 @@ def compute_distances_two_loops(self, X): # not use a loop over dimension, nor use np.linalg.norm(). # ##################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - pass + dists[i, j] = (i ** 2 + j ** 2) ** 0.5 # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** return dists From 8137dbaa2e2b09f05a32b7e80b0596bc8a56e1c1 Mon Sep 17 00:00:00 2001 From: igoof Date: Sat, 4 Nov 2023 17:51:54 +0300 Subject: [PATCH 06/18] compute_distances_two_loops --- homeworks/assignment01_knn/k_nearest_neighbor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeworks/assignment01_knn/k_nearest_neighbor.py b/homeworks/assignment01_knn/k_nearest_neighbor.py index 78f33e62e..b45971041 100644 --- a/homeworks/assignment01_knn/k_nearest_neighbor.py +++ b/homeworks/assignment01_knn/k_nearest_neighbor.py @@ -75,7 +75,7 @@ def compute_distances_two_loops(self, X): # not use a loop over dimension, nor use np.linalg.norm(). # ##################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - dists[i, j] = (i ** 2 + j ** 2) ** 0.5 + dists[i, j] = np.norm(np.array([i, j]), 2) # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** return dists From c5499bc7b5347d439881dadcec5c8bd50f5cea72 Mon Sep 17 00:00:00 2001 From: igoof Date: Sat, 4 Nov 2023 18:00:58 +0300 Subject: [PATCH 07/18] compute_distances_two_loops --- homeworks/assignment01_knn/k_nearest_neighbor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeworks/assignment01_knn/k_nearest_neighbor.py b/homeworks/assignment01_knn/k_nearest_neighbor.py index b45971041..78f33e62e 100644 --- a/homeworks/assignment01_knn/k_nearest_neighbor.py +++ b/homeworks/assignment01_knn/k_nearest_neighbor.py @@ -75,7 +75,7 @@ def compute_distances_two_loops(self, X): # not use a loop over dimension, nor use np.linalg.norm(). # ##################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - dists[i, j] = np.norm(np.array([i, j]), 2) + dists[i, j] = (i ** 2 + j ** 2) ** 0.5 # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** return dists From 2ff9d374c9c0cd196b86508160144c0f1e6d50b5 Mon Sep 17 00:00:00 2001 From: igoof Date: Sat, 4 Nov 2023 18:14:44 +0300 Subject: [PATCH 08/18] compute_distances_two_loops --- homeworks/assignment01_knn/k_nearest_neighbor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeworks/assignment01_knn/k_nearest_neighbor.py b/homeworks/assignment01_knn/k_nearest_neighbor.py index 78f33e62e..84c59c10f 100644 --- a/homeworks/assignment01_knn/k_nearest_neighbor.py +++ b/homeworks/assignment01_knn/k_nearest_neighbor.py @@ -75,7 +75,7 @@ def compute_distances_two_loops(self, X): # not use a loop over dimension, nor use np.linalg.norm(). # ##################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - dists[i, j] = (i ** 2 + j ** 2) ** 0.5 + dists[i, j] = i ** 2 + j ** 2 # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** return dists From 2aaafcc9ebb877c7b5345f84dc00f0de9bc51774 Mon Sep 17 00:00:00 2001 From: igoof Date: Sat, 4 Nov 2023 18:16:14 +0300 Subject: [PATCH 09/18] compute_distances_two_loops --- homeworks/assignment01_knn/k_nearest_neighbor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeworks/assignment01_knn/k_nearest_neighbor.py b/homeworks/assignment01_knn/k_nearest_neighbor.py index 84c59c10f..7c964fe88 100644 --- a/homeworks/assignment01_knn/k_nearest_neighbor.py +++ b/homeworks/assignment01_knn/k_nearest_neighbor.py @@ -75,7 +75,7 @@ def compute_distances_two_loops(self, X): # not use a loop over dimension, nor use np.linalg.norm(). # ##################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - dists[i, j] = i ** 2 + j ** 2 + dists[i, j] = np.linalg.norm(np.array([i,j]),2) # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** return dists From 3b24214c8dcc535b5b533ed22aa7373d39a8668d Mon Sep 17 00:00:00 2001 From: igoof Date: Sat, 4 Nov 2023 18:25:00 +0300 Subject: [PATCH 10/18] compute_distances_two_loops --- homeworks/assignment01_knn/k_nearest_neighbor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeworks/assignment01_knn/k_nearest_neighbor.py b/homeworks/assignment01_knn/k_nearest_neighbor.py index 7c964fe88..006230bb7 100644 --- a/homeworks/assignment01_knn/k_nearest_neighbor.py +++ b/homeworks/assignment01_knn/k_nearest_neighbor.py @@ -75,7 +75,7 @@ def compute_distances_two_loops(self, X): # not use a loop over dimension, nor use np.linalg.norm(). # ##################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - dists[i, j] = np.linalg.norm(np.array([i,j]),2) + dists[i, j] = (i ** 2 + j ** 2)**0.5 # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** return dists From 9a43bf1157bc2e9e4aa7961a96c3c6bd83404f70 Mon Sep 17 00:00:00 2001 From: igoof Date: Sat, 4 Nov 2023 19:38:41 +0300 Subject: [PATCH 11/18] compute_distances_two_loops --- homeworks/assignment01_knn/k_nearest_neighbor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeworks/assignment01_knn/k_nearest_neighbor.py b/homeworks/assignment01_knn/k_nearest_neighbor.py index 006230bb7..257100df9 100644 --- a/homeworks/assignment01_knn/k_nearest_neighbor.py +++ b/homeworks/assignment01_knn/k_nearest_neighbor.py @@ -97,7 +97,7 @@ def compute_distances_one_loop(self, X): # Do not use np.linalg.norm(). # ####################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - pass + dists[i, :] = np.sqrt(np.sum((X[i] - self.X_train) ** 2, axis=1)) # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** return dists From 2c492127c0d3018454213c7338c083201bd63e5a Mon Sep 17 00:00:00 2001 From: igoof Date: Sat, 4 Nov 2023 19:43:25 +0300 Subject: [PATCH 12/18] compute_distances_two_loops --- homeworks/assignment01_knn/k_nearest_neighbor.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/homeworks/assignment01_knn/k_nearest_neighbor.py b/homeworks/assignment01_knn/k_nearest_neighbor.py index 257100df9..3d64fc774 100644 --- a/homeworks/assignment01_knn/k_nearest_neighbor.py +++ b/homeworks/assignment01_knn/k_nearest_neighbor.py @@ -125,7 +125,10 @@ def compute_distances_no_loops(self, X): # and two broadcast sums. # ######################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - pass + differences = X[:, np.newaxis, :] - self.X_train + squared_distances = differences ** 2 + summed_distances = squared_distances.sum(axis=2) + dists = np.sqrt(summed_distances) # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** return dists From 82649313c8409776d4beca30c930ce076f6d59d5 Mon Sep 17 00:00:00 2001 From: igoof Date: Sat, 4 Nov 2023 19:46:41 +0300 Subject: [PATCH 13/18] compute_distances_two_loops --- homeworks/assignment01_knn/k_nearest_neighbor.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/homeworks/assignment01_knn/k_nearest_neighbor.py b/homeworks/assignment01_knn/k_nearest_neighbor.py index 3d64fc774..245975227 100644 --- a/homeworks/assignment01_knn/k_nearest_neighbor.py +++ b/homeworks/assignment01_knn/k_nearest_neighbor.py @@ -158,7 +158,10 @@ def predict_labels(self, dists, k=1): # Hint: Look up the function numpy.argsort. # ######################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - pass + + closest_k_indices = np.argsort(dists[i])[:k] + closest_y = self.y_train[closest_k_indices] + # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ######################################################################### # TODO: # @@ -168,7 +171,9 @@ def predict_labels(self, dists, k=1): # label. # ######################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - pass + + counts = np.bincount(closest_y) + y_pred[i] = np.argmax(counts) # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** From 2f36118c1cb3233f45aad3c2e9e1d84bd932b032 Mon Sep 17 00:00:00 2001 From: igoof Date: Sat, 4 Nov 2023 20:10:08 +0300 Subject: [PATCH 14/18] compute_distances_two_loops --- homeworks/assignment01_knn/k_nearest_neighbor.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/homeworks/assignment01_knn/k_nearest_neighbor.py b/homeworks/assignment01_knn/k_nearest_neighbor.py index 245975227..f42fdefe6 100644 --- a/homeworks/assignment01_knn/k_nearest_neighbor.py +++ b/homeworks/assignment01_knn/k_nearest_neighbor.py @@ -75,7 +75,7 @@ def compute_distances_two_loops(self, X): # not use a loop over dimension, nor use np.linalg.norm(). # ##################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - dists[i, j] = (i ** 2 + j ** 2)**0.5 + dists[i, j] = np.sqrt(np.sum((X[i] - self.X_train[j]) ** 2)) # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** return dists @@ -125,10 +125,13 @@ def compute_distances_no_loops(self, X): # and two broadcast sums. # ######################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - differences = X[:, np.newaxis, :] - self.X_train - squared_distances = differences ** 2 - summed_distances = squared_distances.sum(axis=2) - dists = np.sqrt(summed_distances) + + test_squared = np.sum(X ** 2, axis=1, keepdims=True) + train_squared = np.sum(self.X_train ** 2, axis=1) + inner_product = np.dot(X, self.X_train.T) + + # Вычислите квадрат расстояния Евклида между всеми парами точек + dists = np.sqrt(test_squared - 2 * inner_product + train_squared) # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** return dists @@ -162,6 +165,7 @@ def predict_labels(self, dists, k=1): closest_k_indices = np.argsort(dists[i])[:k] closest_y = self.y_train[closest_k_indices] + # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ######################################################################### # TODO: # From 957386589ac49aae8b7db7efb28904ee30cc42dc Mon Sep 17 00:00:00 2001 From: igoof Date: Sat, 4 Nov 2023 22:38:43 +0300 Subject: [PATCH 15/18] compute_distances_two_loops --- homeworks/assignment02_laplace/distribution.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/homeworks/assignment02_laplace/distribution.py b/homeworks/assignment02_laplace/distribution.py index 4023b764f..2c7b9e482 100644 --- a/homeworks/assignment02_laplace/distribution.py +++ b/homeworks/assignment02_laplace/distribution.py @@ -11,6 +11,10 @@ def mean_abs_deviation_from_median(x: np.ndarray): #### # Do not change the class outside of this block # Your code here + median = np.median(x, axis=0) # Находим медиану для каждой фичи + deviation = np.abs(x - median) # Находим абсолютное отклонение от медианы + mean_deviation = np.mean(deviation, axis=0) # Находим среднее абсолютное отклонение + return mean_deviation #### def __init__(self, features): @@ -20,8 +24,8 @@ def __init__(self, features): ''' #### # Do not change the class outside of this block - self.loc = # YOUR CODE HERE - self.scale = # YOUR CODE HERE + self.loc = loc # YOUR CODE HERE + self.scale = scale # YOUR CODE HERE #### @@ -33,7 +37,10 @@ def logpdf(self, values): ''' #### # Do not change the class outside of this block - return + exponent = -np.abs(values - self.loc) / self.scale + log_density = -np.log(2 * self.scale) + exponent + return log_density + #### From 0fd6b0b95cfa27c3c3061a234cf640144b1ed147 Mon Sep 17 00:00:00 2001 From: igoof Date: Sat, 4 Nov 2023 22:39:02 +0300 Subject: [PATCH 16/18] mean_abs_deviation_from_median --- homeworks/assignment02_laplace/distribution.py | 1 + 1 file changed, 1 insertion(+) diff --git a/homeworks/assignment02_laplace/distribution.py b/homeworks/assignment02_laplace/distribution.py index 2c7b9e482..1b7600c44 100644 --- a/homeworks/assignment02_laplace/distribution.py +++ b/homeworks/assignment02_laplace/distribution.py @@ -22,6 +22,7 @@ def __init__(self, features): Args: feature: A numpy array of shape (n_objects, n_features). Every column represents all available values for the selected feature. ''' + #### # Do not change the class outside of this block self.loc = loc # YOUR CODE HERE From 57e4e3f47322553081123164bcea9bd71c0ba2b0 Mon Sep 17 00:00:00 2001 From: igoof Date: Thu, 9 Nov 2023 17:28:28 +0300 Subject: [PATCH 17/18] laplas --- homeworks/assignment02_laplace/distribution.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/homeworks/assignment02_laplace/distribution.py b/homeworks/assignment02_laplace/distribution.py index 1b7600c44..b09354f85 100644 --- a/homeworks/assignment02_laplace/distribution.py +++ b/homeworks/assignment02_laplace/distribution.py @@ -17,16 +17,15 @@ def mean_abs_deviation_from_median(x: np.ndarray): return mean_deviation #### - def __init__(self, features): + def __init__(self, features, loc=0.0, scale=1.0): ''' Args: feature: A numpy array of shape (n_objects, n_features). Every column represents all available values for the selected feature. + loc: The location (mean) parameter of the Laplace distribution. + scale: The scale (standard deviation) parameter of the Laplace distribution. ''' - - #### - # Do not change the class outside of this block - self.loc = loc # YOUR CODE HERE - self.scale = scale # YOUR CODE HERE + self.loc = loc + self.scale = scale #### From 761a886a8a7f2c06feb58d508cd093f490cfca5e Mon Sep 17 00:00:00 2001 From: igoof Date: Thu, 9 Nov 2023 17:38:34 +0300 Subject: [PATCH 18/18] laplas --- homeworks/assignment02_laplace/distribution.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/homeworks/assignment02_laplace/distribution.py b/homeworks/assignment02_laplace/distribution.py index b09354f85..2e6acef18 100644 --- a/homeworks/assignment02_laplace/distribution.py +++ b/homeworks/assignment02_laplace/distribution.py @@ -11,9 +11,9 @@ def mean_abs_deviation_from_median(x: np.ndarray): #### # Do not change the class outside of this block # Your code here - median = np.median(x, axis=0) # Находим медиану для каждой фичи + median = np.median(x) # Находим медиану для каждой фичи deviation = np.abs(x - median) # Находим абсолютное отклонение от медианы - mean_deviation = np.mean(deviation, axis=0) # Находим среднее абсолютное отклонение + mean_deviation = np.mean(deviation) # Находим среднее абсолютное отклонение return mean_deviation ####