diff --git a/machine_learning/support_vector_machines.py b/machine_learning/support_vector_machines.py index d17c9044a3e9..b9a5d99a1849 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,22 @@ 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. 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