深度学爬坑记录 – 在划分数据集之前还是之后标准化数据
提出一个问题:
- 如果我想把我的数据划分成训练、验证集和测试集,我应该在划分之前或之后对数据进行归一化吗?在建立预测模型时有什么不同吗?
回答:
为什么要进行归一化?因为它解决了梯度爆炸和各种特性之间的比例差异等问题
这取决于你的数据是否有标签,或者说是否存在多个观测数据
-
如果有标签,先划分数据集!
-
如果没有标签,只有一种数据,无关紧要。
对于我的数据是存在标签的,所以
- 应该先划分数据集!!
原因:
- 首先,要明白:测试集我们是将其表示为现实师世界的真值。
对于数据变量的特征标准化(或数据标准化)是一种通过减去均值除以方差来使数据标准化的技术。
如果你在划分数据集之前进行归一化或者标准化,那么:
换句话说,你在进行预测的时候可是不知道预测结果的均值和方差的。
因此,您应该先对训练集进行标准化,然后使用训练集的均值和方差应用到验证集合测试集。通过这种方式,我们可以测试和评估我们的模型是否能够很好地推广到新的、看不见的数据点。
下面给出一个具体的示例,使用最大最小标准化的方式:
from sklearn.preprocessing import MinMaxScaler, StandardScaler
scaler = MinMaxScaler()
scaler_X = MinMaxScaler()
scaler_Y = MinMaxScaler()
# fit_transform for training data:
X_train = scaler_X.fit_transform(x_train)
y_train = scaler_Y.fit_transform(y_train)
# only transform for test (unseen) data:
X_test = scaler_X.transform(x_test)
y_test = scaler_Y.transform(y_test)
反归一化:
preds = scaler_Y.inverse_transform(pred_data)
参考
https://stackoverflow.com/questions/49444262/normalize-data-before-or-after-split-of-training-and-testing-data
https://towardsdatascience.com/feature-scaling-and-normalisation-in-a-nutshell-5319af86f89b
https://stackoverflow.com/questions/66952880/how-can-i-unnormalize-minmaxscaler
https://datascience.stackexchange.com/questions/27615/should-we-apply-normalization-to-test-data-as-well