hdbscan有效性索引报错:dtype不匹配及零尺寸数组问题求助
人脸聚类DBCV计算错误的解决方法
错误1:Buffer dtype mismatch, expected 'double_t' but got 'float'
原因
hdbscan底层Cython实现的有效性指标计算逻辑仅支持float64(double)类型输入,而你的特征向量是float32,导致类型不匹配。
解决
将特征向量转换为float64类型:
feature_vectors = feature_vectors.astype(np.float64)
错误2:ValueError: zero-size array to reduction operation maximum which has no identity
原因
DBCV计算需要为每个聚类构建内部最小生成树(MST),但你的聚类标签中存在仅包含单个样本的聚类——单个样本无法生成MST,导致代码尝试对空数组执行max()操作时抛出错误。
解决
预处理过滤掉样本数≤1的聚类,只保留有效聚类的特征和标签:
import numpy as np # 统计每个聚类的样本数量 unique_labels, label_counts = np.unique(archive_labels, return_counts=True) # 筛选出样本数≥2的有效聚类 valid_clusters = unique_labels[label_counts >= 2] # 生成过滤掩码 filter_mask = np.isin(archive_labels, valid_clusters) # 过滤特征和标签 filtered_features = feature_vectors[filter_mask].astype(np.float64) filtered_labels = archive_labels[filter_mask] # 重新计算DBCV分数 dbcv_score_output = hdbscan.validity.validity_index(filtered_features, filtered_labels)
额外说明
- 转换为
float64后出现的invalid value encountered in true_divide警告,本质也是单样本聚类导致的,过滤后会自动消失 - 原始的
overflow encountered in power警告是float32精度不足引发的,转成float64即可解决
内容的提问来源于stack exchange,提问作者Faisal Aldhuwayhi
相关产品推荐
相关产品推荐

