在我看来,当你缩放一个数值变量时,你应该在训练集和测试集中分别进行。
例如,如果您有一个数值变量 X。归一化 X 为:( X - m(X) ) / s(X)。当您拥有训练集和测试集时,应针对每个总体计算 m(X) 和 s(X)。如果不是某些信息(包含在全局 m 和 s 中),则通过全局标准化变量从训练传递到测试集。
这样想对吗?感谢您的回答。
在我看来,当你缩放一个数值变量时,你应该在训练集和测试集中分别进行。
例如,如果您有一个数值变量 X。归一化 X 为:( X - m(X) ) / s(X)。当您拥有训练集和测试集时,应针对每个总体计算 m(X) 和 s(X)。如果不是某些信息(包含在全局 m 和 s 中),则通过全局标准化变量从训练传递到测试集。
这样想对吗?感谢您的回答。
从数据中“获取”信息的任何类型的数据表示转换都应该只“拟合”在训练数据上。这是因为:
因此,在通常的带有 ERM 评估的批量训练或深度学习中的随机优化的情况下,这种归一化应该只在训练阶段进行。
这也是为什么在大多数 ML 库设计中,这种转换与模型一起被分组到一个管道中的原因。因为这样它们就可以安装在一起,也可以作为一个整体部署。
当然,这可能会导致在运行时打破假设。假设您 min-max-normalize,您会期望该属性属于后。说最大值是,那么很可能新数据具有具有值的属性, 因此应用 min-max-normalization 你会得到一个转换后的值. 这在某些情况下效果不佳,因此您需要进行某种截断并将值设置为. 如果你预计会有很多异常值,你可能想看看scikit-learn 中的RobustScaler。
您应该使用训练数据的均值和标准。偏差。例如,在 scikit-learn 库的 StdScaler 类中,您将首先对训练数据使用 fit() 函数,对测试数据使用 transform() 函数,它使用从训练数据计算的拟合 m 和 s 值转换给定的测试数据你有。如果您的均值和标准显着不同。开发。如果您拥有的训练集和测试集的值,那么您的训练集可能不能很好地代表您的整体人口,这可能会导致更严重的问题,而不仅限于您所要求的标准缩放。或者,您的测试集非常倾斜。如果它是倾斜的,当您对其进行标准缩放时,您的测试样本可能与您的训练样本具有相似的性质,例如异常情况可能看起来很正常。还,