You need to enable JavaScript to run this app. 等权重下含布尔特征的多列行向量cosine similarity计算及id匹配咨询
优惠活动
大模型
产品
解决方案
定价
更多

等权重下含布尔特征的多列行向量cosine similarity计算及id匹配咨询

实现等权重余弦相似度匹配的完整流程

关键前置注意事项

如果直接用原始特征值计算余弦相似度,会出现特征量级差异导致的权重失衡问题:你当前数据集里size特征取值在1000-3000区间,剩下的计数/布尔特征取值在0-3区间,直接计算会让size的贡献度远高于其他特征,完全达不到“所有特征等权重”的要求。要实现真正的等权重,必须先对所有特征做min-max归一化,把每个特征的取值范围映射到[0,1]区间,保证单个特征对最终向量的贡献度对等。

具体计算步骤

  • 拆分数据:把id列单独作为样本标签,不参与相似度计算,剩下的size、numberOfPlants、三个布尔特征组成待计算的特征矩阵。
  • 特征归一化(实现等权重):对每一列特征单独做min-max归一化,公式为:归一化值 = (当前值 - 列最小值) / (列最大值 - 列最小值)
    以你给出的数据集为例:
    • size列的最小值是1191,最大值是3251,计算后四个样本的归一化值分别为0、1、0.218、0.457
    • numberOfPlants列的最小值是1,最大值是3,计算后四个样本的归一化值分别为1、0.5、0、1
    • 三个布尔特征本身已经是0/1取值,不需要额外调整
      最终每个样本的特征向量会被压缩到统一的取值尺度下,实现等权重贡献。
  • 全量余弦相似度计算:

    两个向量A、B的余弦相似度 = (A和B的逐元素乘积之和) / (A的模长 * B的模长)
    逐行两两计算所有样本的余弦值,得到一个N行N列的相似度矩阵(N为样本总数),矩阵中第i行第j列的数值,就对应id为i的样本和id为j的样本的相似度,取值范围为0-1(因为所有特征都是非负的),值越大代表相似度越高。

  • 按输入id查询最相似结果:
    1. 定位输入id在相似度矩阵中对应的行
    2. 剔除该行中对应自身的相似度值(固定为1,没有参考意义)
    3. 找到该行中剩余相似度值最大的位置,对应的列索引就是要返回的最相似样本id

实际计算示例

用你给出的原始数据集,归一化后四个样本的特征向量分别为:

  • id0: [0, 1, 0, 1, 1]
  • id1: [1, 0.5, 1, 0, 0]
  • id2: [0.218, 0, 1, 1, 0]
  • id3: [0.457, 1, 0, 0, 1]
    逐对计算后,当输入id=0时,和其他样本的相似度分别为0.577(匹配id1)、0.403(匹配id2)、0.778(匹配id3),最终返回的最相似id就是3。

快速实现思路

用Python完成全流程时不需要从零编写余弦相似度计算逻辑,可直接调用成熟的工具链:

  • 用MinMaxScaler完成特征归一化
  • 用cosine_similarity方法一次性计算全量相似度矩阵
  • 封装简单的查询函数,传入id即可直接返回最相似的匹配结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 03:15:04