Skip to content

kernels

Since the built-in log-kernels are internal to sklearn, I had to provide my own implementation.

log_cosine_kernel(dist)

log of the cosine kernel (unnormalized)

Source code in src/nadaraya_watson/kernels.py
38
39
40
41
42
43
def log_cosine_kernel(dist: np.ndarray) -> np.ndarray:
    """log of the cosine kernel (unnormalized)"""
    with warnings.catch_warnings():
        warnings.filterwarnings("ignore", message="invalid value encountered in log")
        warnings.filterwarnings("ignore", message="divide by zero encountered in log")
        return np.where(dist < 1.0, np.log(np.cos(0.5 * np.pi * dist)), -np.inf)

log_epanechnikov_kernel(dist)

log of the epanechnikov kernel (unnormalized)

Source code in src/nadaraya_watson/kernels.py
17
18
19
20
21
22
def log_epanechnikov_kernel(dist: np.ndarray) -> np.ndarray:
    """log of the epanechnikov kernel (unnormalized)"""
    with warnings.catch_warnings():
        warnings.filterwarnings("ignore", message="invalid value encountered in log")
        warnings.filterwarnings("ignore", message="divide by zero encountered in log")
        return np.where(dist < 1.0, np.log(1.0 - (dist * dist)), -np.inf)

log_exponential_kernel(dist)

log of the exponential kernel (unnormalized)

Source code in src/nadaraya_watson/kernels.py
25
26
27
def log_exponential_kernel(dist: np.ndarray) -> np.ndarray:
    """log of the exponential kernel (unnormalized)"""
    return -np.abs(dist)

log_gaussian_kernel(dist)

log of the gaussian kernel (unnormalized)

Source code in src/nadaraya_watson/kernels.py
7
8
9
def log_gaussian_kernel(dist: np.ndarray) -> np.ndarray:
    """log of the gaussian kernel (unnormalized)"""
    return -0.5 * (dist * dist)

log_triangular_kernel(dist)

log of the triangular kernel (unnormalized)

Source code in src/nadaraya_watson/kernels.py
30
31
32
33
34
35
def log_triangular_kernel(dist: np.ndarray) -> np.ndarray:
    """log of the triangular kernel (unnormalized)"""
    with warnings.catch_warnings():
        warnings.filterwarnings("ignore", message="invalid value encountered in log")
        warnings.filterwarnings("ignore", message="divide by zero encountered in log")
        return np.where(dist < 1.0, np.log(1 - dist), -np.inf)

log_uniform_kernel(dist)

log of the uniform kernel (unnormalized)

Source code in src/nadaraya_watson/kernels.py
12
13
14
def log_uniform_kernel(dist: np.ndarray) -> np.ndarray:
    """log of the uniform kernel (unnormalized)"""
    return np.where(dist < 1.0, 0.0, -np.inf).astype(dist.dtype)