我想将我的数据分成火车和测试集,我应该在拆分之前或之后对数据进行规范化吗?在构建预测模型时是否有任何区别?提前谢谢。
答案 0 :(得分:23)
首先需要将数据拆分为训练和测试集(可能还需要验证集)。
不要忘记测试数据点代表真实世界的数据。 解释性(或预测变量)变量的特征归一化(或数据标准化)是用于通过减去均值并除以方差来对数据进行居中和归一化的技术。如果您采用整个数据集的均值和方差,您将把未来的信息引入训练解释变量(即均值和方差)。
因此,您应该对训练数据执行特征标准化。然后对测试实例执行规范化,但这次使用训练解释变量的均值和方差。通过这种方式,我们可以测试和评估我们的模型是否可以很好地推广到新的,看不见的数据点。
答案 1 :(得分:1)
您可以使用fit然后进行变换 学习
$content = file_get_contents($filename);
$actualHash = sha1($content);
// ... Do comparison
转换
normalizer = preprocessing.Normalizer().fit(xtrain)
答案 2 :(得分:1)
一个好问题要问自己:如果在拆分之前或之后进行转换,数据是否会有所不同。如果您要进行log2
转换,则顺序无关紧要,因为每个值都以相同的方式转换。如果您要缩放和居中数据,则顺序确实重要,因为离群值可以极大地改变最终分布。本质上,您是在允许继续发生的数据成为“溢出”测试集并影响您的训练集,从而可能导致过于乐观的性能指标。
对于R
使用而言,caret
软件包非常擅长处理测试/训练拆分。您可以将参数preProcess = c("scale", "center")
添加到train
函数中,它将自动将训练数据中的任何变换应用于测试数据。
Tl; dr-如果数据是不同的,具体取决于您在拆分之前还是之后进行规格化,请在