You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UMAP降维报错:ufunc 'correct_alternative_cosine'不匹配float32类型

解决UMAP处理大样本时correct_alternative_cosine类型匹配错误

问题分析

这个错误源于UMAP中cosine度量相关的numba编译函数不支持float32数据类型,当数据集规模超过5000行时触发了类型不兼容的执行分支。

解决方案

1. 将嵌入向量转换为float64类型

直接把embeddings从float32转为float64,适配UMAP的cosine度量函数类型要求:

embeddings = my_embedder.encode(
    data_df.normalization.values, show_progress_bar=False
)
# 转换数据类型
embeddings = embeddings.astype(np.float64)

umap_embeddings = umap.UMAP(
    n_neighbors=np.min([5, data_df.shape[0]]),
    n_components=3,
    metric='cosine',
    random_state=17
).fit_transform(embeddings)

2. 升级依赖库版本

当前使用的umap-learn(0.5.3)和numba(0.55.1)版本较旧,后续版本修复了不少类型兼容问题。通过poetry更新:

# 在pyproject.toml中更新版本约束
numpy = "^1.24.4"
umap-learn = "^0.5.4"
numba = "^0.56.4"

执行更新命令:

poetry update umap-learn numba

注:numba 0.56+适配numpy 1.21-1.24版本,当前numpy 1.24.4符合兼容要求。

3. 替换余弦度量为归一化后的欧氏距离

余弦距离与L2归一化后的欧氏距离等价,可绕开cosine度量的类型问题:

embeddings = my_embedder.encode(
    data_df.normalization.values, show_progress_bar=False
)
# L2归一化嵌入向量
embeddings = embeddings / np.linalg.norm(embeddings, axis=1, keepdims=True)

umap_embeddings = umap.UMAP(
    n_neighbors=np.min([5, data_df.shape[0]]),
    n_components=3,
    metric='euclidean',  # 改用欧氏度量
    random_state=17
).fit_transform(embeddings)

内容的提问来源于stack exchange,提问作者Harvindar Singh Garcha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 10:25:02