做数据分析或者机器学习项目时,经常会听到“回归训练集测试集”这个说法。其实它没那么玄乎,就像你存重要文件前,总得先留个底、再试一遍能不能正常打开一样。
什么是回归中的训练集和测试集
假设你在做一个房价预测模型,手里有一堆历史成交数据。这些数据不能一股脑全拿去训练模型,否则你根本不知道模型在真实情况中表现如何。这时候就要把数据分成两部分:训练集和测试集。
训练集用来“教”模型识别规律,比如面积、地段和房价之间的关系;测试集则是“考卷”,用来检验模型学得怎么样。这种做法在回归问题中尤其关键,因为预测值是连续的,稍微过拟合一点,结果就可能偏差很大。
怎么分?常见比例参考
最简单的划分方式是按比例切分,比如 70% 做训练,30% 做测试。Python 里用 scikit-learn 几行代码就能搞定:
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42)
这里的 X 是特征数据,y 是目标值(比如房价),test_size 控制测试集占比。random_state 确保每次运行结果一致,方便复现。
为什么这和数据备份有关
很多人觉得数据备份就是复制粘贴、上传云盘,但真正重要的不只是保存原始数据,而是保留完整的建模流程记录。训练集和测试集的划分方式、随机种子、清洗规则,这些都得一起存下来。
举个例子,半年后你想更新模型,却发现当初是怎么分的数据已经记不清了,重新划分后结果对不上,那就白忙了。所以,把划分后的数据集连同脚本一起归档,相当于给整个分析过程做了个完整快照。
避免踩坑的小建议
别用太小的测试集,不然评估结果波动大。如果数据总量才100条,硬切成20条测试,那测出来准不准就得看运气了。
另外,时间序列数据要特别小心。不能随便打乱再分,否则就变成用未来数据预测过去,逻辑就乱了。这类情况应该按时间顺序切,比如前两年做训练,最近三个月做测试。
最后提醒一句:每次做完划分,记得把索引也保存下来。万一哪天原始数据动了,还能靠索引还原当时的样本组成。