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

Numpy相似度过滤结果异常:不同分组计算出现矛盾

分组计算余弦相似度结果不符合预期问题

我有一个样本DataFrame(共98行,原始数据有数百万行),包含4个数值列、1个ID列和1个集群ID列。我编写了一个函数,通过两种方式应用于该DataFrame:

  • 场景A:按individual分组后应用函数
  • 场景B:同时按individual和cluster分组后应用函数

函数代码

def vectorized_similarity_filtering2(df, cols = ["scaledPrice", "scaledAirlines", "scaledFlights", "scaledTrip"]):
    from sklearn.metrics.pairwise import cosine_similarity
    arr = df[cols].to_numpy()
    b = arr[..., None]
    c = arr.T[None, ...]
    # 过滤条件:当前行所有维度值均小于等于另一行,且至少一个维度值更小
    mask = (((b <= c).all(axis=1)) & ((b < c).any(axis=1)))
    mask |= mask.T
    sims = np.where(mask, np.nan, cosine_similarity(arr))
    return np.sum(sims >= 0.6, axis = 1)

函数执行步骤

  1. 将当前行与所有其他行进行比较
  2. 过滤掉所有在所有维度上当前行值均小于等于,且至少在一个维度上值更小的行
  3. 对剩余行,计算其与当前行的余弦相似度
  4. 统计相似度矩阵中大于等于0.6的元素数量并返回结果

按逻辑,场景A中每个individual下所有行的计算结果应不小于场景B的对应结果——因为场景B的分组内可比较的元素更少。但实际发现部分行的场景B结果反而更多,这不符合预期,希望有人能解释代码或我的理解中存在的问题。

复现步骤代码

# df为目标DataFrame
g = df.groupby("individual")
gc = df.groupby(["individual", "cluster"])

caseA = np.concatenate(g.apply(lambda x: vectorized_similarity_filtering2(x)).values)
caseB = np.concatenate(gc.apply(lambda x: vectorized_similarity_filtering2(x)).values)

caseA >= caseB

执行结果

array([ True,  True,  True,  True,  True,  True,  True, False, False,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True, False,
       False,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True, False,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True, False,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 16:35:21