Hdbscan: рдХреНрд░реИрд╢ рдЬрдм allow_single_cluster рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрд▓рд╕реНрдЯрд░_рдЪрдпрди_рдПрдкреНрд╕рд┐рд▓реЙрди рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 21 рдЕрдкреНрд░реИрд▓ 2020  ┬╖  13рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: scikit-learn-contrib/hdbscan

рдЬрдм рдореИрдВ cluster_selection_epsilon=x рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ x > 0 рдФрд░ allow_single_cluster=True рдПрдХ рд╕рд╛рде, HDBSCAN рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдореИрдВ no_structure рдЯреЙрдп рдбреЗрдЯрд╛рд╕реЗрдЯ (рдиреАрдЪреЗ рдХреА рдкрдВрдХреНрддрд┐, рд╡рд░реНрдЧ) рдХреЛ рдареАрдХ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрди рджреЛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдПрдХ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд░реНрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдиреАрд▓рд╛ рд╣реЛ рдЬреИрд╕реЗ рдбреАрдмреАрдПрд╕рд╕реАрдПрдПрди рдЗрд╕реЗ рдХрд░рддрд╛ рд╣реИред рдЬрдм рдореИрдВ рдХреЗрд╡рд▓ cluster_selection_epsilon рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдЙрд╕ рд╡рд░реНрдЧ рдореЗрдВ рдХрдИ рдХреНрд▓рд╕реНрдЯрд░ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред рдЬрдм рдореИрдВ рдХреЗрд╡рд▓ allow_single_cluster=True рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдЙрд╕ рд╡рд░реНрдЧ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЧреНрд░реЗ рд╣реЛрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХреЗрд╡рд▓ рдЙрди рджреЛрдиреЛрдВ рддрд░реНрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╛рдВрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдПрдЪрдбреАрдмреАрдПрд╕рд╕реАрдПрдПрди рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдХреЛрдб

import numpy as np
import hdbscan

if __name__ == '__main__':
    no_structure = np.random.rand(1500, 2)
    clusterer = hdbscan.HDBSCAN(min_cluster_size=15, cluster_selection_epsilon=3, allow_single_cluster=True)
    clusterer.fit(no_structure)

рдЕрдкреЗрдХреНрд╖рд┐рддреН рд╡реНрдпрд╡рд╣рд╛рд░

рдмрд┐рдирд╛ рдХреНрд░реИрд╢ рд╣реБрдП рдбреЗрдЯрд╛ рдХреЛ рдХреНрд▓рд╕реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП HDBSCANред рдЕрдзрд┐рдорд╛рдирддрдГ, рд╡рд░реНрдгрд┐рдд рдЕрдиреБрд╕рд╛рд░ рд╕рднреА рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╡рд░реНрдЧрд╛рдХрд╛рд░ рдиреАрд▓реЗ рд░рдВрдЧ рдореЗрдВ рд░рдВрдЧрдирд╛ред

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░

HDBSCAN рдирд┐рдореНрди рдЯреНрд░реЗрд╕рдмреИрдХ рдХреЗ рд╕рд╛рде рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:

Traceback (most recent call last):
  File "/home/home/PycharmProjects/sandbox/crash_example.py", line 7, in <module>
    clusterer.fit(no_structure)
  File "/home/home/PycharmProjects/sandbox/venv/lib/python3.8/site-packages/hdbscan/hdbscan_.py", line 919, in fit
    self._min_spanning_tree) = hdbscan(X, **kwargs)
  File "/home/home/PycharmProjects/sandbox/venv/lib/python3.8/site-packages/hdbscan/hdbscan_.py", line 632, in hdbscan
    return _tree_to_labels(X,
  File "/home/home/PycharmProjects/sandbox/venv/lib/python3.8/site-packages/hdbscan/hdbscan_.py", line 59, in _tree_to_labels
    labels, probabilities, stabilities = get_clusters(condensed_tree,
  File "hdbscan/_hdbscan_tree.pyx", line 645, in hdbscan._hdbscan_tree.get_clusters
  File "hdbscan/_hdbscan_tree.pyx", line 733, in hdbscan._hdbscan_tree.get_clusters
  File "hdbscan/_hdbscan_tree.pyx", line 631, in hdbscan._hdbscan_tree.epsilon_search
IndexError: index 0 is out of bounds for axis 0 with size 0

рд╕рднреА 13 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореИрдВ рднреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдХреЗрд╡рд▓ cluster_selection_method='eom' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╣реЛрддрд╛ рд╣реИред

._hdbscan_tree.pyx рдореЗрдВ рдХреНрд▓рд╕реНрдЯрд░_рдЯреНрд░реА рдЦрд╛рд▓реА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд░реВрдЯ рдиреЛрдб рдХреЗ рд╕рднреА рдмрдЪреНрдЪреЛрдВ рдХреЗ рдмрдЪреНрдЪреЗ рдХрд╛ рдЖрдХрд╛рд░ == 1 рд╣реИред 'рдкрддреНрддреА' рд╡рд┐рдзрд┐ рдЗрд╕рд╕реЗ рджреВрд░ рд╣реЛ рд╕рдХрддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ 'рдкрддреНрддрд┐рдпрд╛рдВ' рднреА рдЦрд╛рд▓реА рд╣реЛ рдЬрд╛рддреА рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐, 'eom_clusters' рдореЗрдВ рд░реВрдЯ рдиреЛрдб рд╣реЛрддрд╛ рд╣реИ рдФрд░ epsilon_search() рдХреЗрд╡рд▓ рдЪрд╛рдЗрд▓реНрдб рдиреЛрдбреНрд╕ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреНрд▓рд╕реНрдЯрд░_рдЯреНрд░реА рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд░реВрдЯ рдиреЛрдб рдХреЛ 'eom_clusters' рд╕реВрдЪреА рдореЗрдВ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

@danielzgtg рдХреГрдкрдпрд╛ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рджреЗрдЦреЗрдВред рдореИрдВ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдкреВрд░реА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдореБрдЭреЗ рдкреВрд░рд╛ рднрд░реЛрд╕рд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП рдорд╛рд▓реНрдЬрд╝рд░ рдФрд░ рдмреЙрдо рджреНрд╡рд╛рд░рд╛ рдПрдЪрдбреАрдмреАрдПрд╕рд╕реАрдПрдПрди* рдкреЗрдкрд░ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢рд╛рдпрдж 370 рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рдлрд┐рдХреНрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдердо рд░реВрдк рд╕реЗ рд╕рд╣реА рдирд╣реАрдВ рдерд╛; рдлрд┐рдХреНрд╕ рд╣рдореЗрдВ рдЙрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдЪрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рдПрдХ рдПрдХрд▓ рдХреНрд▓рд╕реНрдЯрд░ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред

рдзрд╛рд░рд╛ 4.3 рдХреЗ рддрд╣рдд рд╡рд┐рд╡рд░рдг рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдПрдкреНрд╕рд┐рд▓реЙрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рд▓рдп рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ "рдпрджрд┐ рд╣рдореЗрдВ рдПрдХ _рд░реВрдЯ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ_ рдорд┐рд▓ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд╕рднреА рд╡рдВрд╢рдЬреЛрдВ рдХреЛ рдЕрдЪрдпрдирд┐рдд рдХрд░рддреЗ рд╣реИрдВ"ред

@lmcinnes рдпрд╛ @cmalzer рдХреНрдпрд╛ рдЖрдк рдкреБрд╖реНрдЯрд┐ рдХрд░ рдкрд╛рдПрдВрдЧреЗ рдХрд┐ "allow_single_cluster" рдФрд░ "cluster_selection_epsilon" рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рд╣рдо рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рдКрдкрд░ рдХреА рдУрд░ рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдХреЗ рджреМрд░рд╛рди рд░реВрдЯ рдиреЛрдб рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдпрд╛ рдЕрдЧрд░ рдЗрд╕рдХреЗ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рд╣реИрдВ? рдпрд╣ рд╕рд╣реА рдХрджрдо рд▓рдЧрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдПрдХ рдирдИ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдмрдирд╛рдИ рд╣реИ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХреБрдЫ рдЧрд▓рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рдерд╛ред рдореИрдВ рдЕрдкрдиреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдзрд┐рдХ рдЧрд╣рди рд╢реЛрдз рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдирдорд╕реНрддреЗ, рдЗрд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж - рдореИрдВ "allow_single_cluster" рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╕реНрдЯрд░_рдЪрдпрди_рдПрдкреНрд╕рд┐рд▓реЙрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рднреВрд▓ рдЧрдпрд╛ред (рдХрд╛рдЧрдЬ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЗрд╡рд▓ рдЙрд╕ рдорд╛рдорд▓реЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдо рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ)

рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдирд╡реАрдирддрдо рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реА рдФрд░ рд░реВрдЯ рдХреЛ "traverse_upwards" рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдпрджрд┐ allow_single_cluster рд╕рд╣реА рдкрд░ рд╕реЗрдЯ рд╣реИ рддреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдкрдХреЛ рдзрдиреНрдпрд╡рд╛рдж!

рддреНрд╡рд░рд┐рдд рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдФрд░ рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдореЗрдВ рдЖрдкрдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

@lmcinnes рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдирд╣реАрдВ рд╣реБрдИ рд╣реИред

рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рджреВрд╕рд░реЗ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдиреЗ рдПрдХ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдПрдХрд▓ рдХреНрд▓рд╕реНрдЯрд░ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди @danielzgtg рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рдмрдврд╝рдд рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИред

рдореИрдВрдиреЗ рдХреБрдЫ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рд╕рдорд╕реНрдпрд╛ рддрдм рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ рдЬрдм _hdbscan_tree рдкрд░ cluster_tree['lambda_val] рдЦрд╛рд▓реА рд╣реИред рдкреАрдИрдПрдХреНрд╕: 638 ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд╕рд╛рдЗрдерди рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдореЗрдВ рдкрд░реЗрд╢рд╛рдиреА рд╣реЛ рд░рд╣реА рд╣реИ (рдЕрднреА рднреА рд╕рд╛рдЗрдерди рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдирдпрд╛ рд╣реИ)ред рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕рдХреА рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХрд░реВрдВрдЧрд╛ред

рдореИрдВрдиреЗ рдЕрднреА рдЗрд╕реЗ рджреЗрдЦрд╛ рдерд╛ред рд╕рдорд╕реНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдХреНрд▓рд╕реНрдЯрд░_рдЯреНрд░реА рдЦрд╛рд▓реА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдХреНрд▓рд╕реНрдЯрд░_рдЯреНрд░реА ['lambda_val'] [cluster_tree ['child'] == рд▓реАрдл] рдПрдХ рдЦрд╛рд▓реА рд╕рд░рдгреА рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рддрддреНрд╡ ([0]) рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдЖрдкрдХреЛ рдПрдХ рдЗрдВрдбреЗрдХреНрд╕ рдПрд░рд░ рдорд┐рд▓реЗрдЧрд╛ред

рдХреНрд▓рд╕реНрдЯрд░_рдЯреНрд░реА рдЦрд╛рд▓реА рд╣реЛрдиреЗ рдХрд╛ рдХрд╛рд░рдг "рдХреНрд▓рд╕реНрдЯрд░_рдЯреНрд░реА = рдЯреНрд░реА [рдЯреНрд░реА ['рдЪрд╛рдЗрд▓реНрдб_рд╕рд╛рдЗрдЬрд╝']> 1]" рд▓рд╛рдЗрди рд╣реИред рдкреЗрдбрд╝ рдореЗрдВ рдХреЗрд╡рд▓ рдЖрдХрд╛рд░ 1 рдХреЗ рдмрдЪреНрдЪреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдореВрд▓ рдиреЛрдб рд╣реЛрддрд╛ рд╣реИред

рдХреЛрдб рдХреНрд▓рд╕реНрдЯрд░_рд╕рд┐рд▓реЗрдХреНрд╢рди_рдореЗрдереЛрдб = "рд▓реАрдл" рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкрддреНрддрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдЦрд╛рд▓реА рд╣реИред "рдИрдУрдПрдо" рдХреЗ рд▓рд┐рдП, рдкреИрд░реЗрдВрдЯ рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ "рд▓реАрдл" рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕реЗ epsilon_search рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рдЬрд╛рдБрдЪ рдХрд░ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХреНрд▓рд╕реНрдЯрд░_рдЯреНрд░реА рдЦрд╛рд▓реА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рдЕрдЧрд░ рдХреНрд▓рд╕реНрдЯрд░_рд╕реЗрд▓реЗрдХреНрд╢рди_рдПрдкреНрд╕рд┐рд▓реЙрди!= 0.0 рдФрд░ рдХреНрд▓рд╕реНрдЯрд░_рдЯреНрд░реА.рдЖрдХрд╛рд░[0]> 0: ..."

рдореИрдВрдиреЗ рд╕рд╢рд░реНрдд рдореЗрдВ cluster_tree.shape[0] > 0 рдХреЗ рдЖрдкрдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдпрд╛ред рдереЛрдбрд╝рд╛ рд╕рд╛ рдкреНрд░рд┐рдВрдЯрдл рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдХреНрд▓рд╕реНрдЯрд░_рдЯреНрд░реА рдореЗрдВ ~ 26 рддрддреНрд╡ рдереЗ, рдФрд░ eom_clusters рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдПрдХ рд╣реИ, рдЬреЛ рд░реВрдЯ рдиреЛрдб рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЬрдм рд╣рдо рд▓рд╛рдЗрди 637 рдкрд░ cluster_tree['child'] == leaf рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд▓реАрдл рд░реВрдЯ рдиреЛрдб рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЪрд╛рдЗрд▓реНрдб рдПрдВрдЯреНрд░реА рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред

рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕рд╛ рд╣реИ?

cpdef set epsilon_search(set leaves, np.ndarray cluster_tree, np.double_t cluster_sel\
ection_epsilon, np.intp_t allow_single_cluster):                                      

    selected_clusters = list()                                                        
    processed = list()                                                                
    root_node = cluster_tree['parent'].min()                                          

    for leaf in leaves:                                                               
        if leaf == root_node:                                                         
            if allow_single_cluster:                                                  
                selected_clusters.append(leaf)                                        
                break                                                                 
            continue                                                                  
        eps = 1/cluster_tree['lambda_val'][cluster_tree['child'] == leaf][0]          
        if eps < cluster_selection_epsilon:                                           
            if leaf not in processed:                                                 

рд╕рдЪ рдХрд╣реВрдВ рддреЛ рдореИрдВ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рд╣реВрдВред рдЬрдм рд╣рдо рдПрдХрд▓ рдХреНрд▓рд╕реНрдЯрд░ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдХреЗрд╡рд▓ рд╢реЛрд░ рдХреНрд▓рд╕реНрдЯрд░ рд╣реЛрдиреЗ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдпрд╣ рд╣реЛрдЧрд╛:

cpdef set epsilon_search(set leaves, np.ndarray cluster_tree, np.double_t cluster_sel\
ection_epsilon, np.intp_t allow_single_cluster):                                      

    selected_clusters = list()                                                        
    processed = list()                                                                
    root_node = cluster_tree['parent'].min()                                          

    for leaf in leaves:                                                               
        if leaf == root_node:                                                         
            if not allow_single_cluster:                                              
                selected_clusters.append(leaf)                                        
            break                                                                     
        eps = 1/cluster_tree['lambda_val'][cluster_tree['child'] == leaf][0]          
        if eps < cluster_selection_epsilon:  

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдбреЗрдЯрд╛ рдмрд┐рдВрджреБрдУрдВ рдХреА рдЧрд▓рдд рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рдФрд░ рдлрд┐рд░ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА, рд▓реЗрдХрд┐рди рдПрдХ рдЕрд▓рдЧ рдХрд╛рд░рдг рд╕реЗред
рдЗрд╕реЗ рдХреИрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ; рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ epsilon_search рдХреЗ рдмрд╛рд╣рд░ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рддреЗрдЬрд╝ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдРрд╕рд╛

if cluster_selection_epsilon != 0.0 and cluster_tree.shape[0] > 0:

            eom_clusters = [c for c in is_cluster if is_cluster[c]]
            if not (len(eom_clusters) == 1 and eom_clusters[0] == cluster_tree['parent'].min()):
                selected_clusters = epsilon_search(set(eom_clusters), cluster_tree, cluster_selection_epsilon, allow_single_cluster)

(рдХрдИ рд╕рдВрдкрд╛рджрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ)

рд╢реАрдШреНрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рд╢реБрдХреНрд░рд┐рдпрд╛! рдпрд╣ рдЕрдЪреНрдЫрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдореИрдВ рдЖрдЬ рд░рд╛рдд рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдбрд╛рд▓реВрдБрдЧрд╛ред

@cmalzer

рдореИрдВрдиреЗ рдЖрдкрдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рд╕рд╛рде рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд░рдЦрд╛ рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ epsilon_search() рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рдЪреЗрдХ рд╣реЛрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдирд┐рд╢реНрдЪрд┐рдд рдерд╛ рдХрд┐ рд╣рдо рдЧрд╛рд░рдВрдЯреА рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм рд░реВрдЯ рдиреЛрдб eom_clusters рдореЗрдВ рдореМрдЬреВрдж рд╣реИ рдХрд┐ рдпрд╣ рдЙрд╕ рд╕реВрдЪреА рдореЗрдВ рдПрдХрдорд╛рддреНрд░ рдЖрдЗрдЯрдо рд╣реИред рдЕрдиреНрдпрдерд╛ рдпрджрд┐ рд╣рдо рдХреЗрд╡рд▓ рдЙрд╕ рдПрдХ рдорд╛рдорд▓реЗ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд░реВрдЯ рдиреЛрдб рдЕрднреА рднреА epsilon_search() рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдиреЗрдЧрд╛ рдпрджрд┐ рдпрд╣ рдЕрдиреНрдп рдкрддреНрддрд┐рдпреЛрдВ рдХреЗ рдорд┐рд╢реНрд░рдг рдХреЗ рд╕рд╛рде eom_clusters рд╕реВрдЪреА рдореЗрдВ рдХрд╣реАрдВ рднреА рдореМрдЬреВрдж рд╣реИред

рдЕрдЧрд░ рд╣рдо рд╡рд╣ рдзрд╛рд░рдгрд╛ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдореИрдВ рд╕рд╢рд░реНрдд рдХреЛ рдмрджрд▓ рджреВрдВрдЧрд╛

if (cluster_tree['parent'].min() in eom_clusters)

рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ рд░реВрдЯ рд╕реВрдЪреА рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдореМрдЬреВрдж рд╣реИ рдФрд░ рд╣рдо рдЗрд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЦреЛрдЬ рд╕реЗ рд▓реМрдЯрд╛ рдПрдХрдорд╛рддреНрд░ рдИрдкреАрдПрд╕рд▓реЙрди рдмрдЪреНрдЪрд╛ рдмрди рдЬрд╛рдПрдЧрд╛ред

рдпрджрд┐ HDBSCAN рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЙрд╕рдХреЗ рд╕рднреА рд╡рдВрд╢рдЬреЛрдВ рдХреЛ рднреА рдЕрдЪрдпрдирд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд░реВрдЯ рдХреНрд▓рд╕реНрдЯрд░ рдФрд░ рдЕрдиреНрдп рдХреНрд▓рд╕реНрдЯрд░ рд╕реВрдЪреА рдореЗрдВ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, "if .... in eom_clusters" рдХрд╛ рдЖрдкрдХрд╛ рд╕реБрдЭрд╛рд╡ рдореЗрд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкрдврд╝рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдб рдХреА рдЙрд╕ рдкрдВрдХреНрддрд┐ рдХреЛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ - рд╣рд╛рд▓рд╛рдБрдХрд┐ рдкрд╣рд▓реЗ рд▓рдВрдмрд╛рдИ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рддреЗрдЬрд╝ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдпрдерд╛ рд╣рдо рдЦреЛрдЬ рдХрд░рддреЗ рд╣реИрдВ рд░реВрдЯ рдиреЛрдб рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╕реНрдЯрд░ рдХреА рдкреВрд░реА рд╕реВрдЪреА рд╣рд░ рдмрд╛рд░ рдЬрдм рд╣рдо рдПрдкреНрд╕рд┐рд▓реЙрди рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рдпрд╣ рдПрдХ рджреБрд░реНрд▓рдн рдорд╛рдорд▓рд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд┐рддрдирд╛ рдкреНрд░рджрд░реНрд╢рди рдЕрдВрддрд░ рдмрдирд╛рддрд╛ рд╣реИ ... (рд╢рд╛рдпрдж рд▓рдВрдмрд╛рдИ рдХреА рдЬрд╛рдВрдЪ рдореЗрдВ рд╡реИрд╕реЗ рднреА рдЙрддрдирд╛ рд╣реА рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ?) рдореИрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдареАрдХ рд╣реВрдВред

рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢рд╛рдпрдж рдПрдХ рдордзреНрдп рдореИрджрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдВ рдЗрд╕реЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ рдФрд░ рдКрдкрд░ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдбрд╛рд▓реВрдВрдЧрд╛ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

s0j0urn picture s0j0urn  ┬╖  10рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

kevin-balkoski-enview picture kevin-balkoski-enview  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mickohara23 picture mickohara23  ┬╖  10рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

disimone picture disimone  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sigma23 picture sigma23  ┬╖  10рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ