如何使用Python统计对比二分类相似度标识列的差异
二值相似度指标统计对比实现方案
你可以从以下几个维度落地分析,所有代码基于你给出的DataFrame结构实现:
基础占比统计
直接计算各方法判定为相似(取值为1)的样本占总样本的比例,快速了解不同方法的松紧程度:sim_cols = ["cos_sim", "jac_sim", "sentrf_sim", "gensim_sim"] # 计算1的占比,等价于列均值 sim_positive_rate = df[sim_cols].mean().rename("positive_rate").reset_index() print(sim_positive_rate) # 也可以输出完整描述统计 print(df[sim_cols].describe())输出结果中占比越高,说明该方法越容易把两个句子判定为相似。
两两方法一致性对比
计算不同方法判定结果的匹配度,判断哪些方法的判定逻辑更接近:# 1. 两两匹配率:取值相同的样本占总样本的比例 pairwise_agreement = pd.DataFrame(index=sim_cols, columns=sim_cols) for col1 in sim_cols: for col2 in sim_cols: pairwise_agreement.loc[col1, col2] = (df[col1] == df[col2]).mean() print(pairwise_agreement) # 2. 交叉表看具体分歧分布,示例为cos_sim和jac_sim的对比 print(pd.crosstab(df["cos_sim"], df["jac_sim"], rownames=["cos_sim"], colnames=["jac_sim"]))多方法投票分布统计
统计每个样本被多少个方法判定为相似,看整体分歧情况:df["vote_count"] = df[sim_cols].sum(axis=1) # 统计不同投票数的样本占比 vote_dist = df["vote_count"].value_counts(normalize=True).sort_index() print(vote_dist) # 筛选全一致的样本:要么所有方法都判1,要么都判0 full_agreement = df[(df["vote_count"] == 0) | (df["vote_count"] == len(sim_cols))] # 筛选分歧大的样本:不同方法判定结果差异大 high_disagreement = df[(df["vote_count"] > 0) & (df["vote_count"] < len(sim_cols))]分场景效果验证
如果你有真实的相似度人工标注,可以进一步计算每个方法的准确率、召回率、F1值;没有标注的话可以拉取分歧大的样本人工核验,判断不同方法的适用场景:# 假设已有真实标注列label,取值同样为0/1 # from sklearn.metrics import f1_score # for col in sim_cols: # print(f"{col} F1值: {f1_score(df['label'], df[col]):.3f}")
内容的提问来源于stack exchange,提问作者Nishant
相关产品推荐
相关产品推荐

