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

cosine_similarity计算DataFrame整体与子集结果不一致问题咨询

cosine_similarity两种计算场景结果不一致的原因分析
  • 索引映射不匹配(最高发原因)
    scikit-learn的cosine_similarity返回的矩阵下标对应的是输入DataFrame的行位置(iloc序号),不是DataFrame的行索引标签(loc标签)。场景1中你筛选的是行索引标签为5031、9365的两行,场景2中你直接用cosine_sim[5031][9365]取的是矩阵第5032行、9366列的结果,对应原DataFrame的iloc位置为5031、9365的行。如果你的DataFrame有过行删除、自定义行索引、未重置索引的操作,行索引标签和iloc位置并不对齐,两次计算取的完全是不同的行数据,结果自然不一致。
    验证方法:执行print(df.index.get_loc(5031), df.index.get_loc(9365))获取两个索引标签对应的实际行号i、j,再打印cosine_sim[i][j],结果大概率和场景1的0.33一致。
  • 预处理流程不一致
    如果全量计算前你对完整df做过全量拟合的归一化、标准化、空值填充、特征筛选操作,而单独取两行计算时没有走完全相同的预处理流程,会导致输入到cosine_similarity的数值存在差异,最终计算结果不同。比如全量计算时你用了拟合全量数据的StandardScaler做标准化,单独取两行时没有做标准化,或者只用了两行数据拟合的scaler,结果会出现明显偏差。
  • 数据精度或存储格式差异
    如果你的df是稀疏矩阵格式,全量计算时调用的是稀疏矩阵专属的余弦相似度实现,单独取两行时自动转成了稠密矩阵计算,浮点精度累积误差会带来小范围的结果差异,但该原因通常不会导致0.25到0.33这么大的差值,仅作为次要排查方向。
  • 特征列不一致
    检查两次计算传入cosine_similarity的特征列是否完全一致,比如全量计算时你过滤了非数值的ID列、标签列,单独取两行时不小心带入了这些无关列,会直接影响余弦相似度的计算结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:06:03