nearest_neighbors

class Neighbor(value: sensai.util.typing.PandasNamedTuple, distance: float)[source]

Bases: object

__init__(value: sensai.util.typing.PandasNamedTuple, distance: float)
class NeighborProvider(df_indexed_by_id: pandas.core.frame.DataFrame)[source]

Bases: abc.ABC

__init__(df_indexed_by_id: pandas.core.frame.DataFrame)
abstract iter_potential_neighbors(value: sensai.util.typing.PandasNamedTuple) Iterable[sensai.util.typing.PandasNamedTuple]
class AllNeighborsProvider(df_indexed_by_id: pandas.core.frame.DataFrame)[source]

Bases: sensai.nearest_neighbors.NeighborProvider

__init__(df_indexed_by_id: pandas.core.frame.DataFrame)
iter_potential_neighbors(value)
class TimerangeNeighborsProvider(df_indexed_by_id: pandas.core.frame.DataFrame, timestamps_column='timestamps', past_time_range_days=120, future_time_range_days=120)[source]

Bases: sensai.nearest_neighbors.NeighborProvider

__init__(df_indexed_by_id: pandas.core.frame.DataFrame, timestamps_column='timestamps', past_time_range_days=120, future_time_range_days=120)
iter_potential_neighbors(value: sensai.util.typing.PandasNamedTuple)
class AbstractKnnFinder[source]

Bases: abc.ABC

abstract find_neighbors(named_tuple: sensai.util.typing.PandasNamedTuple, n_neighbors=20) List[sensai.nearest_neighbors.Neighbor]
class CachingKNearestNeighboursFinder(cache: sensai.nearest_neighbors.CachingKNearestNeighboursFinder.DistanceMetricCache, distance_metric: sensai.distance_metric.DistanceMetric, neighbor_provider: sensai.nearest_neighbors.NeighborProvider)[source]

Bases: sensai.nearest_neighbors.AbstractKnnFinder

A nearest neighbor finder which uses a cache for distance metrics in order speed up repeated computations of the neighbors of the same data point by keeping a pandas.Series of distances to all provided data points cached. If the distance metric is of the composite type LinearCombinationDistanceMetric, its component distance metrics are cached, such that weights in the linear combination can be varied without necessitating recomputations.

__init__(cache: sensai.nearest_neighbors.CachingKNearestNeighboursFinder.DistanceMetricCache, distance_metric: sensai.distance_metric.DistanceMetric, neighbor_provider: sensai.nearest_neighbors.NeighborProvider)
class DistanceMetricCache

Bases: object

A cache for distance metrics which identifies equivalent distance metrics by their string representations. The cache can be passed (consecutively) to multiple KNN models in order to speed up computations for the same test data points. If the cache is reused, it is assumed that the neighbor provider remains the same.

__init__()
get_cached_metric(distance_metric)
class CachedSeriesDistanceMetric(distance_metric)

Bases: object

Provides caching for a wrapped distance metric: the series of all distances to provided potential neighbors are retained in a cache

__init__(distance_metric)
get_distance_series(named_tuple: sensai.util.typing.PandasNamedTuple, potential_neighbor_values)
find_neighbors(named_tuple: sensai.util.typing.PandasNamedTuple, n_neighbors=20) List[sensai.nearest_neighbors.Neighbor]
class KNearestNeighboursFinder(distance_metric: sensai.distance_metric.DistanceMetric, neighbor_provider: sensai.nearest_neighbors.NeighborProvider)[source]

Bases: sensai.nearest_neighbors.AbstractKnnFinder

__init__(distance_metric: sensai.distance_metric.DistanceMetric, neighbor_provider: sensai.nearest_neighbors.NeighborProvider)
find_neighbors(named_tuple: sensai.util.typing.PandasNamedTuple, n_neighbors=20) List[sensai.nearest_neighbors.Neighbor]
class KNearestNeighboursClassificationModel(num_neighbors: int, distance_metric: sensai.distance_metric.DistanceMetric, neighbor_provider_factory: typing.Callable[[pandas.core.frame.DataFrame], sensai.nearest_neighbors.NeighborProvider] = <class 'sensai.nearest_neighbors.AllNeighborsProvider'>, distance_based_weighting=False, distance_epsilon=0.001, distance_metric_cache: typing.Optional[sensai.nearest_neighbors.CachingKNearestNeighboursFinder.DistanceMetricCache] = None, **kwargs)[source]

Bases: sensai.vector_model.VectorClassificationModel

__init__(num_neighbors: int, distance_metric: sensai.distance_metric.DistanceMetric, neighbor_provider_factory: typing.Callable[[pandas.core.frame.DataFrame], sensai.nearest_neighbors.NeighborProvider] = <class 'sensai.nearest_neighbors.AllNeighborsProvider'>, distance_based_weighting=False, distance_epsilon=0.001, distance_metric_cache: typing.Optional[sensai.nearest_neighbors.CachingKNearestNeighboursFinder.DistanceMetricCache] = None, **kwargs)
Parameters
  • num_neighbors – the number of nearest neighbors to consider

  • distance_metric – the distance metric to use

  • neighbor_provider_factory – a factory with which a neighbor provider can be constructed using data

  • distance_based_weighting – whether to weight neighbors according to their distance (inverse); if False, use democratic vote

  • distance_epsilon – a distance that is added to all distances for distance-based weighting (in order to avoid 0 distances);

  • distance_metric_cache – a cache for distance metrics which shall be used to store speed up repeated computations of the neighbors of the same data point by keeping series of distances cached (particularly for composite distance metrics); see class CachingKNearestNeighboursFinder

  • kwargs – parameters to pass on to super-classes

find_neighbors(named_tuple)
class KNearestNeighboursRegressionModel(num_neighbors: int, distance_metric: sensai.distance_metric.DistanceMetric, neighbor_provider_factory: typing.Callable[[pandas.core.frame.DataFrame], sensai.nearest_neighbors.NeighborProvider] = <class 'sensai.nearest_neighbors.AllNeighborsProvider'>, distance_based_weighting=False, distance_epsilon=0.001, distance_metric_cache: typing.Optional[sensai.nearest_neighbors.CachingKNearestNeighboursFinder.DistanceMetricCache] = None, **kwargs)[source]

Bases: sensai.vector_model.VectorRegressionModel

__init__(num_neighbors: int, distance_metric: sensai.distance_metric.DistanceMetric, neighbor_provider_factory: typing.Callable[[pandas.core.frame.DataFrame], sensai.nearest_neighbors.NeighborProvider] = <class 'sensai.nearest_neighbors.AllNeighborsProvider'>, distance_based_weighting=False, distance_epsilon=0.001, distance_metric_cache: typing.Optional[sensai.nearest_neighbors.CachingKNearestNeighboursFinder.DistanceMetricCache] = None, **kwargs)
Parameters
  • num_neighbors – the number of nearest neighbors to consider

  • distance_metric – the distance metric to use

  • neighbor_provider_factory – a factory with which a neighbor provider can be constructed using data

  • distance_based_weighting – whether to weight neighbors according to their distance (inverse); if False, use democratic vote

  • distance_epsilon – a distance that is added to all distances for distance-based weighting (in order to avoid 0 distances);

  • distance_metric_cache – a cache for distance metrics which shall be used to store speed up repeated computations of the neighbors of the same data point by keeping series of distances cached (particularly for composite distance metrics); see class CachingKNearestNeighboursFinder

  • kwargs – parameters to pass on to super-classes

class FeatureGeneratorNeighbors(num_neighbors: int, neighbor_attributes: typing.List[str], distance_metric: sensai.distance_metric.DistanceMetric, neighbor_provider_factory: typing.Callable[[pandas.core.frame.DataFrame], sensai.nearest_neighbors.NeighborProvider] = <class 'sensai.nearest_neighbors.AllNeighborsProvider'>, cache: typing.Optional[sensai.util.cache.KeyValueCache] = None, categorical_feature_names: typing.Sequence[str] = (), normalisation_rules: typing.Sequence[sensai.data_transformation.dft.DFTNormalisation.Rule] = ())[source]

Bases: sensai.featuregen.feature_generator.FeatureGeneratorFromNamedTuples

Generates features based on nearest neighbors. For each neighbor, a set of features is added to the output data frame. Each feature has the name “n{0-based neighbor index}_{feature name}”, where the feature names are configurable at construction. The feature name “distance”, which indicates the distance of the neighbor to the data point is always present.

__init__(num_neighbors: int, neighbor_attributes: typing.List[str], distance_metric: sensai.distance_metric.DistanceMetric, neighbor_provider_factory: typing.Callable[[pandas.core.frame.DataFrame], sensai.nearest_neighbors.NeighborProvider] = <class 'sensai.nearest_neighbors.AllNeighborsProvider'>, cache: typing.Optional[sensai.util.cache.KeyValueCache] = None, categorical_feature_names: typing.Sequence[str] = (), normalisation_rules: typing.Sequence[sensai.data_transformation.dft.DFTNormalisation.Rule] = ())
Parameters
  • num_neighbors – the number of neighbors for to generate features

  • neighbor_attributes – the attributes of the neighbor’s named tuple to include as features (in addition to “distance”)

  • distance_metric – the distance metric defining which neighbors are near

  • neighbor_provider_factory – a factory for the creation of neighbor provider

  • cache – an optional key-value cache in which feature values are stored by data point identifier (as given by the DataFrame’s index)