Skip to content

ValueError: Unknown Distance Metric: wminkowski #3

@HadiKutabi

Description

@HadiKutabi

in "dswizard/core/similaritystore.py" (last code line) the distance metric "wminkowski" is used for NearestNeighbors

Under SimilarityStore class:
`

def __init__(self, model: Optional[Pipeline]):
    self.mfs = None
    if model is not None:
        self.model: Pipeline = model
        # Remove OHE encoded algorithm
        self.weight = self.model.steps[-1][1].feature_importances_[0:SimilarityStore.N_MF]
        self.weight = (self.weight / self.weight.sum()) * SimilarityStore.N_MF
    else:
        self.model = None
        self.weight = np.ones(SimilarityStore.N_MF)
    self.neighbours = NearestNeighbors(metric='wminkowski', p=2, metric_params={'w': self.weight})`

However by if you run dswizard like that you may get an error because in Scipy 1.8.0 there is no wminkowski. However there is minkowski with weight:

https://docs.scipy.org/doc/scipy-1.8.0/reference/generated/scipy.spatial.distance.minkowski.html#scipy.spatial.distance.minkowski

Error:

Traceback (most recent call last):
  File "/home/h/PycharmProjects/DSWIZARD/venv/lib/python3.8/site-packages/dswizard/core/master.py", line 388, in _structure_callback
    cs = FixedStructure(steps=[('ohe', OneHotEncoderComponent()),
  File "/home/h/PycharmProjects/DSWIZARD/venv/lib/python3.8/site-packages/dswizard/optimizers/structure_generators/fixed.py", line 20, in fill_candidate
    key = self.cfg_cache.get_config_key(configspace=task.get_hyperparameter_search_space(),
  File "<string>", line 2, in get_config_key
  File "/usr/local/lib/python3.8/multiprocessing/managers.py", line 850, in _callmethod
    raise convert_to_error(kind, result)
  File "/usr/local/lib/python3.8/multiprocessing/managers.py", line 263, in serve_client
    res = function(*args, **kwds)
  File "/home/h/PycharmProjects/DSWIZARD/venv/lib/python3.8/site-packages/dswizard/core/config_cache.py", line 77, in get_config_key
    distance, idx, _ = entry.store.get_similar(mf)
  File "/home/h/PycharmProjects/DSWIZARD/venv/lib/python3.8/site-packages/dswizard/core/similaritystore.py", line 41, in get_similar
    distance, idx = self.neighbours.kneighbors(X, n_neighbors=1)
  File "/home/h/PycharmProjects/DSWIZARD/venv/lib/python3.8/site-packages/sklearn/neighbors/_base.py", line 752, in kneighbors
    chunked_results = list(
  File "/home/h/PycharmProjects/DSWIZARD/venv/lib/python3.8/site-packages/sklearn/metrics/pairwise.py", line 1717, in pairwise_distances_chunked
    D_chunk = pairwise_distances(X_chunk, Y, metric=metric, n_jobs=n_jobs, **kwds)
  File "/home/h/PycharmProjects/DSWIZARD/venv/lib/python3.8/site-packages/sklearn/metrics/pairwise.py", line 1889, in pairwise_distances
    return _parallel_pairwise(X, Y, func, n_jobs, **kwds)
  File "/home/h/PycharmProjects/DSWIZARD/venv/lib/python3.8/site-packages/sklearn/metrics/pairwise.py", line 1430, in _parallel_pairwise
    return func(X, Y, **kwds)
  File "/home/h/PycharmProjects/DSWIZARD/venv/lib/python3.8/site-packages/scipy/spatial/distance.py", line 2957, in cdist
    raise ValueError('Unknown Distance Metric: %s' % mstr)
ValueError: Unknown Distance Metric: wminkowski

possible Solution:

you can just use minkowski as a metric as follow in "dswizard/core/similaritystore.py":
self.neighbours = NearestNeighbors(metric='minkowski', p=2, metric_params={'w': self.weight})

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions