Python 列车/测试拆分前是否应进行标准化和详细化?

Python 列车/测试拆分前是否应进行标准化和详细化?,python,machine-learning,train-test-split,standardized,Python,Machine Learning,Train Test Split,Standardized,我是python新手,尝试执行随机林回归任务。 我导入的数据集总共有5列(包括日期列)。我的数据取决于时间,因此我无法使用列车/测试拆分。因此,我做了以下几点 feature_cols = [ 'Rainfall' ,'Temperature','Usage amount'] target_v = df['water level'] X = df[feature_cols] y = target_v 然后,我使用sklearn中的时间序列拆分将数据拆分为训练和测试 from sklearn

我是python新手,尝试执行随机林回归任务。 我导入的数据集总共有5列(包括日期列)。我的数据取决于时间,因此我无法使用列车/测试拆分。因此,我做了以下几点

feature_cols = [ 'Rainfall' ,'Temperature','Usage amount']
target_v = df['water level']
X = df[feature_cols] 
y = target_v 
然后,我使用sklearn中的时间序列拆分将数据拆分为训练和测试

from sklearn.model_selection import TimeSeriesSplit
tss = TimeSeriesSplit(n_splits = 3)
for train_index, test_index in tss.split(X):
    X_train, X_test = X.iloc[train_index, :], X.iloc[test_index,:]
    y_train, y_test = y.iloc[train_index], y.iloc[test_index]
现在我需要执行预处理,例如缩放数据和删除平均值(detrend)。所以我的问题是我应该先做什么?i、 e.我是先删除平均值然后缩放数据,还是先缩放然后删除平均值

另外,我是在我的整个数据帧(df)上还是在我的数据子集上(即仅在训练数据上)执行这两种技术?如果是一个子集,我该怎么做

下面是一个我在整个数据帧上尝试过的缩放和平均值移除示例

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
df = pd.DataFrame(scaler.fit_transform(df), columns=df.columns, index=df.index)

mean = np.mean((df.values), axis=-1, keepdims=True)
detrended = df - mean

然后,我使用去渲染的数据帧将我的数据拆分为训练、测试和运行我的模型。我不确定这是否是正确的方法?欢迎提供任何帮助,谢谢

您几乎总是在列车测试后对数据进行标准化分割。当您稍后获取真实世界的数据以测试您的模型时,您将无法返回并修改您的缩放器,否则它将弄乱您的模型。 有些人甚至会考虑在缩放过拟合中包含测试数据,因为在缩放时让网络对测试数据进行解释是有弊的。p> 所以你首先应该做的是列车测试分离。 然后将定标器与训练数据相匹配,使用定标器转换训练数据,然后使用相同的定标器转换测试数据,而无需重新安装。通过这样做,您可以确保将来所有可能注入网络的数据都以相同的方式表示相同的值

-------

Sklearn有两个功能:拟合和变换。Fit更新缩放器的参数(缩放数据的方式)以匹配您的数据。Transform将缩放器应用于数据,以便缩放数据。Sklearn还有另一个同时拟合和变换的函数(fit_transform)

我们希望将定标器调整到训练集,然后缩放数据,因此我们运行fit_transform。对于我们的测试集,我们不想让定标器调整它如何缩放数据,我们只想让它缩放我们的数据,所以我们以与训练集相同的方式进行缩放。所以这次我们只运行Transform


如果您愿意,您可以在功能和标签上进行调整和转换,尽管缩放标签的重要性要小得多,因为当涉及到功能之间的值比例差异时,您不会遇到相同的问题。

这很有意义,谢谢@Mike。你能举个例子说明如何做到这一点吗?假设我已经成功地将数据拆分为X_列,X_测试和y_列,y_测试,我应该只将定标器适配到X_列?使用相同的定标器转换测试数据是什么意思?更新答案以回答评论太好了,谢谢。所以从我对这个的理解来看,我应该调整X,变换X,然后变换X,测试,让y,和测试保持不变?你可以这样做,或者你可以调整X,变换X,和y,变换X,和y,测试。两者都可以。只要记住在传递任何新预测时也要进行转换