From 0a8a6d49e68abf1d6408770a8fac00f1d88eb142 Mon Sep 17 00:00:00 2001 From: Yixuan <130672541+faefabsdgd@users.noreply.github.com> Date: Wed, 14 May 2025 16:22:58 +0800 Subject: [PATCH 1/2] Update support_vector_machines.py to add the polynomial kernel --- machine_learning/support_vector_machines.py | 42 +++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/machine_learning/support_vector_machines.py b/machine_learning/support_vector_machines.py index d17c9044a3e9..5667ccf7e3da 100644 --- a/machine_learning/support_vector_machines.py +++ b/machine_learning/support_vector_machines.py @@ -49,6 +49,19 @@ class SVC: Traceback (most recent call last): ... ValueError: gamma must be > 0 + + >>> SVC(kernel="polynomial") + Traceback (most recent call last): + ... + ValueError: polynomial kernel requires degree + >>> SVC(kernel="polynomial",degree=None) + Traceback (most recent call last): + ... + ValueError: degree must be float or int + >>> SVC(kernel="polynomial",degree=-1.0) + Traceback (most recent call last): + ... + ValueError: degree must be > 0 """ def __init__( @@ -57,9 +70,13 @@ def __init__( regularization: float = np.inf, kernel: str = "linear", gamma: float = 0.0, + degree: float=0.0, + coef0: float = 0.0, ) -> None: self.regularization = regularization self.gamma = gamma + self.degree = degree + self.coef0 = coef0 if kernel == "linear": self.kernel = self.__linear elif kernel == "rbf": @@ -73,6 +90,14 @@ def __init__( # in the future, there could be a default value like in sklearn # sklear: def_gamma = 1/(n_features * X.var()) (wiki) # previously it was 1/(n_features) + elif kernel == "polynomial": + if self.degree == 0: + raise ValueError("polynomial kernel requires degree") + if not isinstance(self.degree, (float, int)) : + raise ValueError("degree must be float or int") + if not self.degree > 0: + raise ValueError("degree must be > 0") + self.kernel = self.__polynomial else: msg = f"Unknown kernel: {kernel}" raise ValueError(msg) @@ -98,6 +123,23 @@ def __rbf(self, vector1: ndarray, vector2: ndarray) -> float: """ return np.exp(-(self.gamma * norm_squared(vector1 - vector2))) + + def __polynomial(self, vector1: ndarray, vector2: ndarray) -> float: + """ + Polynomial kernel: (x . y + coef0)^degree + + Note: for more information see: + https://en.wikipedia.org/wiki/Polynomial_kernel + + Args: + vector1 (ndarray): first vector + vector2 (ndarray): second vector + + Returns: + float: (vector1 . vector2 + coef0)^degree + """ + return (np.dot(vector1, vector2) + self.coef0) ** self.degree + def fit(self, observations: list[ndarray], classes: ndarray) -> None: """ Fits the SVC with a set of observations. From 190ed5a37a79935c55a6c75af5e9a756d05e326b Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 14 May 2025 08:28:05 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- machine_learning/support_vector_machines.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/machine_learning/support_vector_machines.py b/machine_learning/support_vector_machines.py index 5667ccf7e3da..b9a5d99a1849 100644 --- a/machine_learning/support_vector_machines.py +++ b/machine_learning/support_vector_machines.py @@ -70,7 +70,7 @@ def __init__( regularization: float = np.inf, kernel: str = "linear", gamma: float = 0.0, - degree: float=0.0, + degree: float = 0.0, coef0: float = 0.0, ) -> None: self.regularization = regularization @@ -93,7 +93,7 @@ def __init__( elif kernel == "polynomial": if self.degree == 0: raise ValueError("polynomial kernel requires degree") - if not isinstance(self.degree, (float, int)) : + if not isinstance(self.degree, (float, int)): raise ValueError("degree must be float or int") if not self.degree > 0: raise ValueError("degree must be > 0") @@ -123,7 +123,6 @@ def __rbf(self, vector1: ndarray, vector2: ndarray) -> float: """ return np.exp(-(self.gamma * norm_squared(vector1 - vector2))) - def __polynomial(self, vector1: ndarray, vector2: ndarray) -> float: """ Polynomial kernel: (x . y + coef0)^degree
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: