python - 如何使用 StandardScaler 正确扩展训练、验证和测试集?
问题描述
有些文章说,如果只有训练集和测试集,我们首先需要使用 fit_transform() 来缩放训练集,然后只使用 transform() 进行测试集,以防止数据泄漏。
就我而言,我也有验证集。
我认为下面这些代码之一可以使用,但我不能完全依赖它们。任何形式的帮助将不胜感激,谢谢!
1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3)
X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size = 2/7)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_val = scaler.transform(X_val)
X_test = scaler.transform(X_test)
2)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size = 2/7)
X_test = scaler.transform(X_test)
解决方案
通常,您会希望使用选项 1 代码。使用拟合然后对训练数据进行转换的原因是 a) Fit 将计算训练集的均值、var 等,然后尝试将模型拟合到数据 b) 发布哪个转换将根据拟合模型转换数据。
如果您再次对测试集使用拟合,这将为您的模型增加偏差。
推荐阅读
- python - 在 django 迁移期间处理数据?
- c++ - 错误:公共成员的签名包含本机类型 'std::basic_string
,std::分配器 >' - javascript - Vue.js 在 v-for 循环中动态添加文件名
- python - 如何在 python 中执行 3 部分 if 语句?
- monaco-editor - 如何去除摩纳哥的装饰品?
- node.js - 电子无框窗口不关闭
- prometheus - 如何获取警报计数,在普罗米修斯上一周警报触发了多少次
- android - 在 Room 数据库中使用“enableMultiInstanceInvalidation”的用法和影响
- python - 使 /afk 命令在 python 中接受数字而不是字母
- javascript - 带有 div 的 JS 上的 10x10 板