使用 Sklearn 的 GridSearchCV 降低聚类分析的 DBCV 分数

问题描述 投票:0回答:0

我在 UTM 坐标中有一个地理数据集“坐标”,我正在对其执行 HDBSCAN,并且希望让 sklearn 的 GridSearchCV 使用 DBCV 验证各种参数。在手动评估 HDBSCAN 的参数时,我得到了以下结果,它比 sklearn 的 GridSearchCV 更好:

clusters = hdbscan.HDBSCAN(min_cluster_size=75, min_samples=60, 
                           cluster_selection_method ='eom', gen_min_span_tree=True, 
                           prediction_data=True).fit(coordinates)
Obtained DBCV Score:  0.2580606238793024

使用 sklearn 的 GridSearchCV 时,它会选择获得较低 DBCV 值的模型参数,即使手动选择的参数在参数字典中也是如此。顺便说一句,在使用 RandomizedSearchCV 时,我能够使用不同范围的参数获得 0.28 的 DBCV 值,但没有写下使用了哪些参数。

*更新:当我运行 RandomizedSearchCV 和 GridSearchCV 时,选择的“最佳”模型是参数网格中的第一项或第一个选择的随机样本。例如,在下面的代码中,它总是选择 min_samples & min_cluster_size 中的第一个条目。我怀疑是因为它遇到了错误。当我添加 error_score="raise" 时,它会引发 TypeError,这可能与它无法与 y 进行比较有关,但这是没有数据标签的无监督聚类。

TypeError: _BaseScorer.call() missing 1 required positional 参数:'y_true'

    from sklearn.model_selection import RandomizedSearchCV
    from sklearn.model_selection import GridSearchCV
    import hdbscan
    from sklearn.metrics import make_scorer
    import logging # to further silence deprecation warnings
    logging.captureWarnings(True)
    
    # ### GridSearch CV Model Tuning ###
    logging.captureWarnings(True)
    hdb = hdbscan.HDBSCAN(gen_min_span_tree=True).fit(coordinates)
    
    # # specify parameters to sample from
    grid = {'min_samples': [50,55,60,65,70,75,80,90,100,110],
                  'min_cluster_size':[40,45,50,55,60,65,75,80,85,90,95,100],  
                  'cluster_selection_method' : ['eom','leaf'],
                  'metric' : ['euclidean','manhattan'] 
                 }
    #validity_scroer = "hdbscan__hdbscan___HDBSCAN__validity_index"
    validity_scorer = make_scorer(hdbscan.validity.validity_index,greater_is_better=True)
    
    grid_search = GridSearchCV(hdb
                               ,param_grid=grid
                               ,scoring=validity_scorer)
    
    grid_search.fit(coordinates)
    
    
    print(f"Best Parameters {grid_search.best_params_}")
    print(f"DBCV score :{grid_search.best_estimator_.relative_validity_}")
Best Parameters {'cluster_selection_method': 'eom', 'metric': 'euclidean', 'min_cluster_size': 40, 'min_samples': 50}
DBCV score :0.22213170637127946
scikit-learn cluster-analysis hdbscan
© www.soinside.com 2019 - 2024. All rights reserved.