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

sklearn cosine_similarity无NaN仍报float64不支持值错误如何解决

报错原因及解决方案

错误产生原因

  • 你遇到的是旧版本scikit-learn(常见于0.22~0.24版本)的输入校验bug:校验逻辑在处理int64类型的输入数组时,会误将合法的整型值判定为超出float64取值范围的无效值,进而触发该报错。
  • 如果你实际使用的业务数据不是示例中的小数值,还有另一种可能:数据中存在大于2^53的超大整数,这类整数转换为float64时会出现精度损失,被校验逻辑判定为无效值。

可用解决方案

方案1:显式转换输入为float类型(最便捷,推荐优先尝试)

在传入cosine_similarity前将数组显式转为float类型即可绕开校验bug,修改后的代码如下:

cos_arr = cosine_similarity(df1.values.astype(float), df2.values.astype(float))

方案2:对特征做归一化处理

余弦相似度仅关注向量方向的相似性,特征的绝对数值大小不会影响最终结果,你可以提前对特征做min-max归一化或者标准化,既可以避免数值超限问题,也能避免大数值特征对相似度计算产生不合理的高权重影响,示例代码如下:

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
# 合并两个df做拟合保证缩放尺度一致
all_data = pd.concat([df1, df2])
scaler.fit(all_data)
df1_scaled = scaler.transform(df1)
df2_scaled = scaler.transform(df2)
cos_arr = cosine_similarity(df1_scaled, df2_scaled)

方案3:升级scikit-learn版本

将scikit-learn升级到1.0及以上版本,该版本已经修复了旧版的输入校验误判问题,升级命令如下:

pip install -U scikit-learn
# 用conda的用户执行以下命令
conda update scikit-learn

内容的提问来源于stack exchange,提问作者kms

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:48:03