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

如何将similarity变量的字典数据按7:3拆分为训练集与测试集

余弦相似度数据7:3拆分训练集/测试集方案

问题说明

原代码直接将全量similarity数据同时赋值给训练集、测试集,造成训练测试数据完全重叠的数据泄露问题,最终得到虚高的100%准确率。需要按7:3比例无重叠拆分数据,70%作为训练集,30%作为测试集。


方案1:纯Numpy手动拆分(无额外依赖)

拆分前先打乱数据避免原数据排序规律带来的分布偏差,固定随机种子可保证拆分结果可复现:

import numpy as np
from numpy.linalg import norm

# 原始数据转numpy数组
data_arr = np.array(similarity)
# 固定随机种子,数值可自定义,去掉该行则每次拆分结果随机
np.random.seed(42)
# 打乱全量数据顺序
np.random.shuffle(data_arr)
# 计算70%占比的拆分索引
split_position = int(len(data_arr) * 0.7)
# 拆分训练集、测试集
train_r = data_arr[:split_position]
test_r = data_arr[split_position:]

# 原有计算逻辑保持不变
train_c = train_r[:,10]
test_c = test_r[:,10]
a = train_c
b = test_c
cos_sim = (np.dot(a, b)/(norm(a)*norm(b))) * 100
print(cos_sim)

方案2:Scikit-learn内置拆分方法(工业界常用)

如果已经安装scikit-learn(未安装可执行pip install scikit-learn安装),可直接用内置的train_test_split方法,支持分层拆分、多输出对齐等更灵活的配置:

import numpy as np
from numpy.linalg import norm
from sklearn.model_selection import train_test_split

data_arr = np.array(similarity)
# 按30%比例拆分测试集,固定随机种子保证可复现
train_r, test_r = train_test_split(
    data_arr,
    test_size=0.3,
    random_state=42,
    shuffle=True
)

# 原有计算逻辑保持不变
train_c = train_r[:,10]
test_c = test_r[:,10]
a = train_c
b = test_c
cos_sim = (np.dot(a, b)/(norm(a)*norm(b))) * 100
print(cos_sim)

注意事项

  • 若不需要拆分结果可复现,可删除随机种子相关参数,每次运行会得到不同的随机拆分结果
  • 所有数据预处理操作(如归一化、标准化)必须在拆分完成后,仅基于训练集数据计算参数,再应用到测试集,避免引入数据泄露
  • 转numpy数组前需确认similarity中所有数据条目维度一致,否则会触发维度不匹配报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:51:19