Source code for libadalina_analytics.clustering.models.adalina_zoning_distance

from pydantic import BaseModel, Field, field_validator

_zoning_functions = ["euclidean", "manhattan", "chebyshev", "haversine", "hamming", "canberra", "braycurtis", "jaccard", "matching", "dice", "kulsinski", "rogerstanimoto", "russellrao", "sokalmichener", "sokalsneath"]

[docs] class ClusteringDistance(BaseModel): name: str = Field(description='Name of the column') """Name of the column in the input data to be used for distance calculation.""" weight: float | None = Field(description='Weight of the column', default=1.0) """Weight of the distance in the overall distance calculation. Default is 1.0.""" function: str | None = Field(description='Function used to compute the distance', default=None) """ Distance function to use. Must be one of the following: - euclidean - manhattan - chebyshev - haversine - hamming - canberra - braycurtis - jaccard - matching - dice - kulsinski - rogerstanimoto - russellrao - sokalmichener - sokalsneath If None, the default function depends on the type of the values in the column: - geometric values default to scipy distance_matrix - float and int values default to euclidean - string values default to hamming - boolean values default to jaccard """ @field_validator('function') def validate_func(cls, v): if v is not None and v not in _zoning_functions: raise ValueError(f'Function must be one of {_zoning_functions}') return v