推荐系统为啥要分测试集和训练集
这个问题我也纠结了一段时间,现在明白了一些,希望能和大家交流下。
简单来说:推荐系统需要分测试集和训练集,但划分的方法和作用与机器学习等模型有些差异,所以会导致一些困惑。
1、训练集和测试集一般来说,训练集用来估计模型中的参数,使模型能够反映现实,进而预测未来或其他未知的信息,而测试集用来评估模型的预测性能。
例如:已知1000个小朋友的体重和身高数据,想建立体重与身高的线性回归模型。我们可以用900个小朋友的身高和体重数据(训练集)来拟合模型中的参数,进而预测另外100个小朋友的体重(已知身高数据),预测值和实际值的差别就可以用来衡量模型的预测性能(测试集是100个小朋友的体重和身高);或者使用1995-2018年的GDP数据建立线性回归模型来预测2019年的GDP数据;
这里可能会有个疑问:
为什么不用1000个小朋友的数据拿来做拟合?
将1000个小朋友的数据输入到模型拟合过程中,这在技术上是可以实现的,也可以计算出来每个小朋友的实际值和预测值,进而计算出误差。但是,这可能存在过拟合问题,即模型预测性能在其他数据集中表现会有明显降低。也就是说,用一个数据集既做训练又做测试,性能评估指标是不准确的,相当于你考试时做的都是平常做过的课后题,无法检测出实际水准。
为了更好地评价我们的模型,除非我们在1000个小朋友之外,再去找一些小朋友作为测试集。此时希望不会有人提出为什么不把新找的数据加入到训练集。同理,如果我们想测试基于1995-2018年GDP数据而建立的预测模型准确度,需要2019年的GDP数据(这可能就要等一年才行了)。
数据当然没那么容易获取,所以我们只能把现有的数据集人工分为训练集和测试集。此时,比如只能获得1995-2017年的数据,然后用2018年的GDP数据来检验模型预测的准确性。
2、推荐系统与机器学习机器学习模型中的训练集和测试集的划分是很好理解的,而推荐系统中有一些,特别是协同过滤算法,训练集和测试集的划分有所不同。
2.1 机器学习假如我们要给银行开发一个信用违约风险预测模型,通过每个客户的个人信息、消费行为、资产状况、借贷数额等状况来预测该客户是否会按时还贷。
这是一个经典的分类问题,我们可以使用机器学习模型来处理,像决策树、逻辑回归、神经网络等,用80%的用户作为训练集来拟合这些模型中的参数,然后把训练好的模型放到剩余那20%的用户中做测试,从而得到模型的性能指标。
这时,训练集和测试集的划分方法是基于用户的,训练集的作用是拟合模型中的参数。
2.2 推荐系统推荐系统中也有一些基于机器学习的推荐模型,这些和2.1是相同的,在这里不提。
我们着重提的是基于用户的协同过滤推荐算法,它与机器学习模型直观上有两点不同。
协同过滤推荐算法中没有像线性回归模型中那样待估计的参数α、β等。协同过滤推荐算法不能基于用户划分训练集和测试集。因为协同过滤推荐模型要输入的必须是个矩阵(需要近邻用户的购买行为信息),而不是某用户的一行数据(而决策树、逻辑回归模型是可以的)。我最初的想法也是觉得协同过滤推荐算法的训练集根本没有什么用,没有什么能贡献给测试集。后来才发现个推荐算法的不同之处。
训练集和测试集的划分方法
协同过滤推荐算法的训练集划分不是基于用户的,而是基于值的,即【用户,项目,评分】三元组。如果训练集为80%,测试集为20%,我们就可以将用户-项目评分中的80%抽取出来作为训练集,没抽取的那20%当做测试集(这些项目的值在训练集中表示为不存在)。
假如,某用户-项目评分矩阵中有100个项目,其中用户张三购买并评价了20个项目,也就是有80个项目未购买。这时,我们将20个项目中抽取80%,也就是16个项目作为训练集,另外4个项目作为测试集。即假设张三只购买并评价了100个项目中的16个项目,实际上已经购买的那4个项目就当做未购买。
推荐阅读
- 吉林丰满鱼道系统就绪静待松花江鱼类洄游产卵
- 为啥看到书柜上的藏书会有心旷神怡的感觉
- 银行系统的研发岗(程序员)是不是很难进(校招)推广到国企的研发岗(程序员)呢
- 为啥知乎上普便有一种【我在北上广深打工,所以拥有更好的视野】这样的错觉
- 为啥工商银行的用户体验如此之差
- 汽车|看了中消协4S店服务测评调查结果,终于知道法系车为啥卖不好了
- 你为啥从窝窝商城离职?
- 5.1声道片源对于没有5.1硬件系统的用户来说有意义吗
- 汽车知识|月薪5000元,推荐4款车型,可全款可分期,既有质量又有面子
- 环球车讯网|【帮你选车】简单粗暴 前后双电机+四驱 三款纯电SUV推荐
