我们有一个原始数据,我们把所有原始数据当做训练数据,然后使用训练数据训练模型
每当来一个新的数据,新的数据要和我们所有数据求出相应距离,找出前k小的距离
然后投票新的数据具体属于那种类别,我们用全部数据得到的模型用来预测新的数据所属的类型
我们要在真实的环境中使用这个模型
但是会有两种情况
1.模型很差怎么办? 存在真实损失
比如我们要训练一个股市的模型,使用这种方式我们根本没有机会调整我们的模型,只能把这个模型投入到真实的股市环境中 ,如果我们的模型很差就会造成真实损失,这是一个问题
2.真实环境难以拿到真实label,我们无从知道我们模型根本是好是坏,我们训练出来这个模型后只能听天由命让他运行在真实环境中。
举一个简单的例子,银行发放信用卡,每个用户,他的银行信用评级也好,显示高和低也好,很可能是银行跟进了用户两三年之后才得到了信用等级,形成了训练数据集,来进行预测给其他用户信用卡判断等级,但是这个模型训练出来之后我们直接投入正式环境中,拿给一个新的客户,这个客户信誉等级到底是怎么样,可能又要经过两三年的时间我们才能知道。
即使有了新的数据,由于在短时间内我们拿不到这个数据真实的label它真实的分类是怎么样的,我们也很难去改进。其实我们用所有原始数据都去当训练集,直接训练出模型投入到生产环境中,这样的做法是不恰当的。改进这个问题的最简单的方法,是训练和测试数据集的分离。
我们只从原始数据抽出一部分,通常是一大部分,比如80%或者70%数据当做训练数据,流出来一部分数据我们把他当做测试数据,我们相当只用训练数据训练模型,还留有一部分数据,我们假设这部分数据是测试数据,它不参与到我们模型的训练过程中,但我们使用训练数据拿到模型之后,我们用测试数据扔进模型,来让模型预测,由于测试数据本身包含了真实label值,我们可以很容易看到训练数据训练出来的模型是怎么样的,通过测试数据直接判断模型好坏,在模型进入真实环境前改进模型。
<