Source code for kerch.kernel.explicit

# coding=utf-8
"""
File containing the linear kernel class.

@author: HENRI DE PLAEN
@copyright: KU LEUVEN
@license: MIT
@date: March 2021
"""

import torch
from .. import utils
from .kernel import Kernel
from abc import ABCMeta, abstractmethod


[docs] @utils.extend_docstring(Kernel) class Explicit(Kernel, metaclass=ABCMeta): @utils.kwargs_decorator({}) def __init__(self, *args, **kwargs): super(Explicit, self).__init__(*args, **kwargs) self._dim_feature = None def __str__(self): return f"Explicit kernel." @property def explicit(self) -> bool: return True @property def dim_feature(self) -> int: if self._dim_feature is None: # if it has not been set before, we can compute it with a minimal example self._dim_feature = self._explicit_with_none(x=self.current_sample_projected[0:1, :]).shape[1] return self._dim_feature def _implicit(self, x, y): phi_x = self._explicit(x) phi_y = self._explicit(y) return phi_x @ phi_y.T @abstractmethod def _explicit(self, x): return x def _explicit_preimage(self, phi): raise NotImplementedError