Source code for secml.ml.kernel.c_kernel_hamming

"""
.. module:: CKernelHamming
   :synopsis: Hamming distances kernel

.. moduleauthor:: Ambra Demontis <ambra.demontis@unica.it>
.. moduleauthor:: Marco Melis <marco.melis@unica.it>

"""
from sklearn import metrics

from secml.array import CArray
from secml.ml.kernel import CKernel


[docs]class CKernelHamming(CKernel): """Hamming distance kernel. Attributes ---------- class_type : 'hamming' Parameters ---------- batch_size : int or None, optional Size of the batch used for kernel computation. Default None. Examples -------- >>> from secml.array import CArray >>> from secml.ml.kernel.c_kernel_hamming import CKernelHamming >>> print(CKernelHamming().k(CArray([[1,2],[3,4]]), CArray([[10,20],[30,40]]))) CArray([[1. 1.] [1. 1.]]) >>> print(CKernelHamming().k(CArray([[1,2],[3,4]]))) CArray([[0. 1.] [1. 0.]]) """ __class_type = 'hamming' def _k(self, x, y): """Compute the hamming distances kernel between x and y. Parameters ---------- x : CArray or array_like First array of shape (n_x, n_features). y : CArray or array_like Second array of shape (n_y, n_features). Returns ------- kernel : CArray Kernel between x and y, shape (n_x, n_y). See Also -------- :meth:`.CKernel.k` : Main computation interface for kernels. """ return CArray(metrics.pairwise.pairwise_distances( CArray(x).get_data(), CArray(y).get_data(), metric='hamming')) def _gradient(self, u, v): """Calculate hamming kernel gradient wrt vector 'v'.""" raise NotImplementedError( "Gradient of Hamming Kernel is not available.")