# Kernelized mean change (CostCosine)#

Bases: BaseCost

Kernel change point detection with the cosine similarity.

Source code in ruptures/costs/costcosine.py
  8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 class CostCosine(BaseCost): r"""Kernel change point detection with the cosine similarity.""" model = "cosine" def __init__(self): """Initialize the object.""" self.signal = None self.min_size = 1 self._gram = None @property def gram(self): """Generate the gram matrix (lazy loading). Only access this function after a .fit() (otherwise self.signal is not defined). """ if self._gram is None: self._gram = squareform(1 - pdist(self.signal, metric="cosine")) return self._gram def fit(self, signal) -> "CostCosine": """Set parameters of the instance. Args: signal (array): array of shape (n_samples,) or (n_samples, n_features) Returns: self """ if signal.ndim == 1: self.signal = signal.reshape(-1, 1) else: self.signal = signal return self def error(self, start, end) -> float: """Return the approximation cost on the segment [start:end]. Args: start (int): start of the segment end (int): end of the segment Returns: segment cost Raises: NotEnoughPoints: when the segment is too short (less than min_size samples). """ if end - start < self.min_size: raise NotEnoughPoints sub_gram = self.gram[start:end, start:end] val = np.diagonal(sub_gram).sum() val -= sub_gram.sum() / (end - start) return val 

## gram property #

Only access this function after a .fit() (otherwise self.signal is not defined).

## __init__()#

Initialize the object.

Source code in ruptures/costs/costcosine.py
 13 14 15 16 17 def __init__(self): """Initialize the object.""" self.signal = None self.min_size = 1 self._gram = None 

## error(start, end)#

Return the approximation cost on the segment [start:end].

Parameters:

Name Type Description Default
start int

start of the segment

required
end int

end of the segment

required

Returns:

Type Description
float

segment cost

Raises:

Type Description
NotEnoughPoints

when the segment is too short (less than min_size samples).

Source code in ruptures/costs/costcosine.py
 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 def error(self, start, end) -> float: """Return the approximation cost on the segment [start:end]. Args: start (int): start of the segment end (int): end of the segment Returns: segment cost Raises: NotEnoughPoints: when the segment is too short (less than min_size samples). """ if end - start < self.min_size: raise NotEnoughPoints sub_gram = self.gram[start:end, start:end] val = np.diagonal(sub_gram).sum() val -= sub_gram.sum() / (end - start) return val 

## fit(signal)#

Set parameters of the instance.

Parameters:

Name Type Description Default
signal array

array of shape (n_samples,) or (n_samples, n_features)

required

Returns:

Type Description
CostCosine

self

Source code in ruptures/costs/costcosine.py
 30 31 32 33 34 35 36 37 38 39 40 41 42 43 def fit(self, signal) -> "CostCosine": """Set parameters of the instance. Args: signal (array): array of shape (n_samples,) or (n_samples, n_features) Returns: self """ if signal.ndim == 1: self.signal = signal.reshape(-1, 1) else: self.signal = signal return self