转载自:https://www.zhihu.com/question/312639136

机器学习中,对于数据的预处理是否是测试集和训练集一起进行?

最近在尝试训练和应用模型,遇上一个问题,就是针对数据的预处理过程,如归一化等等,测试集和训练集是否需要分开进行?网上查了很多资料众说纷纭,有人说应该分开进行,如果一起进行,训练模型就利用了测试集的信息;有人说要一起进行,模型预测效果更好;有人说分开进行,但是测试集归一化的参数 要使用原训练集的,如均值标准差等等。

个人的一点看法是,归一化相当原特征空间的点映射到新特征空间中,既然是在新特征空间中训练模型,就应当保证测试集和训练集同处于一个空间中,模型才有意义。所以不论是一起进行归一化,还是测试集应用训练集的参数,都是可以的。更进一步的,对于后期模型实际应用,新数据也就当运用旧数据的参数和映射方法进行归一化。

另外,本人也使用了主成分分析方法,认为主成分分析也就当是测试集和训练集一起进行,或是测试集使用训练集计算出的转换矩阵,才能保证测试集和训练集同处于一个特征空间。

以上纯属个人见解,如有错误,请各位大佬不吝指正,谢谢!

关注者

83

被浏览

9,223

关注问题​写回答

​邀请回答

​添加评论

​分享

收起 ​

4 个回答

默认排序

Jon Lee

GEHC Senior Scientist

89 人赞同了该回答

这个问题有两点:

1. training data和test data是否应该使用相同的预处理

2. 归一化时,是否应该将training data和test data混合计算(如均值,方差,主成分,等)

第一点的回答是肯定的,第二点是否定的。

  1. 抛开domain adaptation不讲,一般的机器学习算法是建立在training和test data服从同一/类似分布的假设之上的。所以有一条准则:预处理对于training和test data要保持一致。如果预处理不同,那怎么还能保证training和test data分布一致?
  2. 在machine learning中,test data原则上是与training data独立的数据集。它的目的是验证在training data上训练好的模型是否在完全独立的,未知的数据集上有相同的表现。做归一化时,如果将test data和training data混合一起计算了,那么归一化之后的training data就相包含了test data的信息。这样就打破了test data应该与training data独立的原则,实属作弊:哪怕得到的结果较好,也不能证明在未来某天新采集的数据上会有相同的表现。再者,你现在手里有一定数量的test data,你拿去跟training data一起计算做归一化了。但在真正的工业应用中,你的test data可能是在你模型部署之后一个个采集的:有可能今天来10个,明天来6个,后天来1个。这种情况下如果将training和test data一起用来计算做归一化,那岂不是每天采集一次数据都要计算一次,再重新训练?

综合以上两点,在做归一化时,普遍的做法是只用training data计算数据如均值,方差,主成分,等,然后用保存好的计算数据对test data进行归一化。

发布于 2019-02-18

​赞同 89​​12 条评论

​分享

​收藏​喜欢

疯猫子

数据分析/人工智能/人生项目投资人,执行人

9 人赞同了该回答

正确的处理流程是:

1、将清洗完的数据先进行样本内外拆分,将样本内数据再次进行训练集和测试集的拆分

2、对训练集进行特征工程,特征数据预处理->特征选择->生成训练集

3、使用训练集进行训练,固化模型

4、用测试集数据按照已固化的标准,先进行特征工程处理,之后带入模型进行测试

5、用样本外数据集,按照固化模型,单独生成特征数据集,进行数据预处理,带入模型看结果。

以上就是我常用的流程。

发布于 2019-02-18

​赞同 9​​1 条评论

​分享

​收藏​喜欢

二十二画生

泥腿子

6 人赞同了该回答

先划分训练集-测试集,然后在训练集上做预处理,最后将训练集上得到的预处理操作运用到测试集上。

就像你自己说的,训练模型是一定不能把测试集的信息带入的,要假设测试集不存在。因为你的模型不是要应用在测试集上,而是要应用在未知的新数据上的。

所谓的"训练集测试集一起归一化可以提高模型效果"是伪命题,因为模型效果好坏是要看在未来的新数据上的表现的,在测试集上即使准确率百分百也不能保证实际运行起来是完美的。

除非,在你按照上述原则得到模型参数,并在测试集上得到评价模型表现的报告后,可以把训练集、测试集再放到一起作为新的训练集,然后按照之前得到的模型参数重新训练,作为最后的模型。

编辑于 2019-02-18

​赞同 6​​3 条评论

​分享

​收藏​喜欢

小周周的爸爸

预处理大致分两类

1. 非监督的预处理: 可以一起处理。如标准 归一 等等。

2. 监督型的预处理:不能一起处理。如点击率,卡方分箱等。这类处理只能训练集合处理好,验证集合按照字典去查找对应的值。

发布于 2019-04-19

​赞同​​添加评论

​分享

​收藏​喜欢

===================================sklearn 示例==========================

https://scikit-learn.org/stable/modules/preprocessing.html#preprocessing

The preprocessing module further provides a utility class StandardScaler that implements the Transformer API to compute the mean and standard deviation on a training set so as to be able to later reapply the same transformation on the testing set. This class is hence suitable for use in the early steps of a sklearn.pipeline.Pipeline:

>>>

>>> scaler = preprocessing.StandardScaler().fit(X_train)
>>> scaler
StandardScaler()>>> scaler.mean_
array([1. ..., 0. ..., 0.33...])>>> scaler.scale_
array([0.81..., 0.81..., 1.24...])>>> scaler.transform(X_train)
array([[ 0.  ..., -1.22...,  1.33...],[ 1.22...,  0.  ..., -0.26...],[-1.22...,  1.22..., -1.06...]])

The scaler instance can then be used on new data to transform it the same way it did on the training set:

>>>

>>> X_test = [[-1., 1., 0.]]
>>> scaler.transform(X_test)
array([[-2.44...,  1.22..., -0.26...]])

It is possible to disable either centering or scaling by either passing with_mean=False or with_std=False to the constructor of StandardScaler.

he SimpleImputer class provides basic strategies for imputing missing values. Missing values can be imputed with a provided constant value, or using the statistics (mean, median or most frequent) of each column in which the missing values are located. This class also allows for different missing values encodings.

The following snippet demonstrates how to replace missing values, encoded as np.nan, using the mean value of the columns (axis 0) that contain the missing values:

>>>

>>> import numpy as np
>>> from sklearn.impute import SimpleImputer
>>> imp = SimpleImputer(missing_values=np.nan, strategy='mean')
>>> imp.fit([[1, 2], [np.nan, 3], [7, 6]])
SimpleImputer()
>>> X = [[np.nan, 2], [6, np.nan], [7, 6]]
>>> print(imp.transform(X))
[[4.          2.        ][6.          3.666...][7.          6.        ]]

The SimpleImputer class also supports sparse matrices:

>>>

>>> import scipy.sparse as sp
>>> X = sp.csc_matrix([[1, 2], [0, -1], [8, 4]])
>>> imp = SimpleImputer(missing_values=-1, strategy='mean')
>>> imp.fit(X)
SimpleImputer(missing_values=-1)
>>> X_test = sp.csc_matrix([[-1, 2], [6, -1], [7, 6]])
>>> print(imp.transform(X_test).toarray())
[[3. 2.][6. 3.][7. 6.]]

机器学习中,对于数据的预处理是否是测试集和训练集一起进行?相关推荐

  1. yolov3的训练(五)darknet的VOC测试集和训练集以及训练前准备

    VOC测试集和训练集     ################################## 同学们,这个系列的文件不要直接就跟着我操作了,因为这个是踩坑的记录,不是教程,我只是将整个流程记录下 ...

  2. 测试集和训练集8:2切分

    测试集和训练集8:2切分 最近接到个需求:测试集和训练集8:2切分,翻阅了很多资料封装了一个切分方法. 首先介绍下shuffle()函数 shuffle() 方法将序列的所有元素随机排序. impor ...

  3. R语言构建随机森林模型randomForest分类模型并评估模型在测试集和训练集上的效果(accuray、F1、偏差Deviance):随机森林在Bagging算法的基础上加入了列采样(分枝特征随机)

    R语言构建随机森林模型randomForest分类模型并评估模型在测试集和训练集上的效果(accuray.F1.偏差Deviance):随机森林在Bagging算法的基础上加入了列采样(分枝特征随机) ...

  4. R语言基于Bagging算法(融合多个决策树)构建集成学习Bagging分类模型、并评估模型在测试集和训练集上的分类效果(accuray、F1、偏差Deviance):Bagging算法与随机森林对比

    R语言基于Bagging算法(融合多个决策树)构建集成学习Bagging分类模型.并评估模型在测试集和训练集上的分类效果(accuray.F1.偏差Deviance):Bagging算法与随机森林对比 ...

  5. python基于模型对测试集和训练集的预测概率结果文件可视化模型的校准曲线、多个模型的校准曲线(calibration curve)

    python基于模型对测试集和训练集的预测概率结果文件可视化模型的校准曲线.多个模型的校准曲线(calibration curve) 目录

  6. 如何划分测试集和训练集

    机器学习划分训练集和测试集的方法 目前遇到如何划分机器学习中训练集和测试集的问题,找了各方面的资料,发现知乎大佬给出了详细解答,故转载如下(文末附参考链接): 机器学习常见步骤 1.对数据集进行划分, ...

  7. KS检验样本测试集和训练集分布问题

    最初引入KS检验的原因:用SVM 做分类问题时,发现在测试集上跑出来的准确率等参数比在训练集高许多,经过分析,推断可能是由于训练集和测试集上的数据分布情况不一致.所以想通过KS检验一下数据分布情况. ...

  8. python划分训练集和测试集_杨涛的Python机器学习3:单特征与多特征、训练集与测试集,杨桃...

    本人CSDN博客专栏:https://blog.csdn.net/yty_7 Github地址:https://github.com/yot777/ 单特征与多特征 在上一节标签和特征的示例中,我们使 ...

  9. 在数据中随机抽取一定比例的数据为训练集,剩下的为测试集的小方法

    在进行常见机器学习任务中,我们经常会随机抽取一定比例的数据为训练集,而剩下的为测试集.一般情况下都比较繁琐,所以看了其他的博客之后,准备了一个小函数实现这个功能. EG: def getRandomI ...

最新文章

  1. WSUS控制台由于程序异常崩溃
  2. 学习笔记Flink(五)—— Flink开发环境配置及运行实例(单词计数)
  3. ECCV 2020 《Propagating Over Phrase Relations for One-Stage Visual Grounding》论文笔记
  4. hadoop2.8 ha 集群搭建
  5. 03 Oracle分区表
  6. 计算机屏幕亮度调到多少合适,电脑屏幕的亮度和对比度调到多少比较合适,对眼睛伤害最小?有哪位高手了解?...
  7. [转载] python面向对象编程实例
  8. 10张思维导图--javascript
  9. 2021-2027全球与中国地质与矿山规划软件市场现状及未来发展趋势
  10. 手机状态信息里的IP地址和通过浏览器ip.cn查到的IP地址区别
  11. 鸿蒙系统玩游戏要分区么,虽然还没办法上手体验鸿蒙,但可以先试试这款国产操作系统...
  12. 大疆 —— 后端开发工程师(北京)
  13. VS Code写C语言输出long double类型数据不正确的问题
  14. (十八)树莓派3B+ wiringPi库的使用--外部中断
  15. 老司机 iOS 周报 #48 | 2018-12-17
  16. EMC选定计划首现国内厂商(迪思杰)
  17. 射影几何--圆锥曲线在平面上某点确定的对合线束
  18. 数字,字符,字符串转换
  19. IPv4协议中的UDP分片问题
  20. matlab/simulink 搭建 基于mpc的车道保持辅助系统

热门文章

  1. Mac 终端的入门指南与进阶技巧
  2. 攻防世界 Misc高手进阶区 7分题 Russian-zips
  3. 群晖服务器删除文件后不见可用空间增大的,查询群晖NAS硬盘空间占用情况,解决删除文件空间不增加问题...
  4. 46 理论计算机科学基础-北京大学
  5. 本量利分析计算机,2017年自学考试(管理会计(一))知识点复习:成本性态分析和变动成本法--本量利分析的应用[经营杠杆在利润预测中的应用]...
  6. 大数据对人们的好处_大数据对我们有什么作用呢?
  7. JS禁止浏览器后退键
  8. 【2017-2018 NBA 季后赛总决赛第一场】 -- 赛后有感
  9. 工作中MNU010 至 MNU140表的名称及作用
  10. 委托构造函数继承构造函数