热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

标准化,归一化与训练测试集数据处理

标准化,归一化与训练-测试集数据处理1.标准化,归一化的区别数据预处理的归一化手段应该如何应用到训练集,测试集和验证集中?问


标准化,归一化与训练-测试集数据处理

  • 1. 标准化,归一化的区别
  • 数据预处理的归一化手段应该如何应用到训练集,测试集和验证集中?
    • 问题:
    • 回答1:
    • 回答2
  • 问题3
    • 回答1
    • 回答2
  • 问题4
    • 回答1


1. 标准化,归一化的区别

作者:宝珠道人
链接:https://www.zhihu.com/question/361290840/answer/939504181
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。个人有删改

归一化和标准化本质上都是一种线性变换。线性变换保持线性组合与线性关系式不变,这保证了特定模型不会失效。归一化和标准化的区别:
归一化和标准化的本质都是缩放和平移,他们的区别直观的说就是


  1. 归一化的缩放是 “拍扁” 统一到区间[0,1][0,1][0,1]。常见的归一化方法:
    (xi−min(xi))/(max(xi)−min(xi))(xi-min(xi))/(max(xi)-min(xi))(ximin(xi))/(max(xi)min(xi))
    从输出范围角度来看, 归一化的输出结果必须在[0,1][0,1][0,1]间。
  2. 标准化的缩放是更加 “弹性” 和 “动态” 的,和整体样本的分布有很大的关系。
    常见的标准化方法:
    (xi−mean(xi))/sd(xi)(xi-mean(xi))/sd(xi)(ximean(xi))/sd(xi)
    而标准化的输出范围不受限制,通常情况下比归一化更广

标准化与归一化的应用场景:
一般情况下:


  1. 如果对输出结果范围有要求,用归一化
  2. 如果数据较为稳定,不存在极端的最大最小值,用归一化
  3. 如果数据存在异常值和较多噪音,用标准化,可以间接通过中心化避免异常值和极端值的影响。

在机器学习中,标准化是更常用的手段,归一化的应用场景是有限的。其原因就在于二者的区别:


  • 标准化更好保持了样本间距。当样本中有异常点时,归一化有可能将正常的样本“挤”到一起去。比如三个样本,某个特征的值为1,2,10000,假设10000这个值是异常值,用归一化的方法后,正常的1,2就会被“挤”到一起去。如果不幸的是1和2的分类标签还是相反的,那么,当我们用梯度下降来做分类模型训练时,模型会需要更长的时间收敛,因为将样本分开需要更大的努力!而标准化在这方面就做得很好,至少它不会将样本“挤到一起”。
  • 标准化更符合统计学假设。对一个数值特征来说,很大可能它是服从正态分布的。标准化其实是基于这个隐含假设,只不过是略施小技,将这个正态分布调整为均值为0,方差为1的标准正态分布而已。



数据预处理的归一化手段应该如何应用到训练集,测试集和验证集中?


问题:


  1. 假如先把数据划分成训练集和测试集,我在训练集上对所有变量归一化后,比如用均值方差归一化,那我在测试集上归一化的时候用的均值方差都是训练集中的还是在测试集上用自身的均值方差

  2. 是归一化手段有很多,均值方差归一化,最大最小归一化,那我怎么去区分这些归一化手段的不同,就是什么时候用均值方差归一化什么时候用最大最小归一化,这些不同的归一化手段会对我的结果产生影响吗?如果有影响我又该如何去针对数据选择合适的归一化手段


回答1:


  1. 第一个问题,测试集的归一化的均值和标准偏差应该来源于训练集。如果你熟悉Python的sklearn的话,你就应该知道应该先对训练集数据fit,得到包含均值和标准偏差的scaler,然后再分别对训练集和验证集transform。这个问题其实很好,很多人不注意,最容易犯的错误就是先归一化,再划分训练测试集。
  2. 第二个问题,是均值方差归一化,最大最小归一化等不同归一化的选择问题。归一化的目的无非调整各个字段之间的数量级差异。均值方差归一化可能更适合你不知道数据的边界在哪里,最大最小归一化相当于整合到01之间,这相当于你是知道这个字段的边界在哪里。所以我个人更倾向于均值方差归一化。这个问题我只是经验之谈,不一定对。

作者:StefanChou
链接:https://www.zhihu.com/question/60490799/answer/214685372
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


  • 补充问题:为什么先归一化,再划分训练测试集是错误的呢?
    回答:谈不上绝对的错误。特别是当你手头已经有一份训练和测试数据。在真正的部署过程中,测试数据实际上就是那些源源不断刚刚出现的数据,你不知道它什么分布,也不知道它出现什么样的数值。所以你要用训练数据得到的均值和标准偏差,去转换它。这更加贴近部署的实际。
    严格来说,测试数据你是不能去看它的,不能去统计它的各项指标,这种苛刻的自我限定,就好像测试数据真的是来自未来。当然有时候你离线建模,划分测试数据,实际上叫验证数据,主要目的是为了迭代优化算法超参数,你可以严格自我要求,也可以活个稀泥。当训练和测试数据差别不大时,先归一化还是先划分,差别实际不大。

回答2

作者:代码律动
链接:https://www.zhihu.com/question/60490799/answer/388715802
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


  1. 第一个问题,你的算法不应该知道关于任何测试集的信息,所以测试集的方差与均值都应该来自训练集的先验数据。当然,这也需要你的数据集划分足够合理,使你在训练集上训练出来的模型有足够的泛化能力(当然模型的设计更关键)。再引申一句,你提到了验证集,验证集的归一化也要和训练集一样【个人补充:就是使用训练集得到的数】,在调整参数的时候,我们面对的是验证集的结果。在验证集上得到最佳的参数设置,最终在测试集上进行实验。
  2. 第二个问题,这是要根据你的具体实验来调整,大致选择方法和思路是这样的:

  • Zero-mean normalization
    公式:x=x−xˉσx=\frac{x-\bar{x}}{\sigma}x=σxxˉ
    这就是均值方差归一化,这样处理后的数据将符合标准正态分布,常用在一些通过距离得出相似度的聚类算法中,比如 K-means。
  • Min-max normalization
    公式:x=x−xminxmax−xminx=\frac{x-x_{min}}{x_{max}-x_{min}}x=xmaxxminxxmin
    min-max 归一化的手段是一种线性的归一化方法,它的特点是不会对数据分布产生影响。不过如果你的数据的最大最小值不是稳定的话,你的结果可能因此变得不稳定。min-max 归一化在图像处理上非常常用,因为大部分的像素值范围是 [0, 255]。
  • Non-linear normaliztions
    非线性的归一化函数包含 log,exp,arctan, sigmoid等等。用非线性归一化的函数取决于你的输入数据范围以及你期望的输出范围。比如 log() 函数在[0,1][0,1][0,1]区间上有很强的区分度,arctan() 可以接收任意实数病转化到[−π2,π2][-\frac{\pi}{2},\frac{\pi}{2}][2π,2π]区间,sigmoid 接收任意实数并映射到(0,1)(0,1)(0,1)
  • Length-one normalization
    公式: x=x∥x∥x=\frac{x}{\left\|x\right\|}x=xx
    将特征转为单位向量的形式,可以剔除特征的强度的影响。这种处理用在不考虑向量大小而需要考虑向量方向的问题中,比如在一些文本情感的分类中,我们可能并不需要知道情感表达的强弱,而只要知道情感的类型,比如开心,生气等等。



问题3

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


回答1

作者:Jon Lee
链接:https://www.zhihu.com/question/312639136/answer/601839910
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

这个问题有两点:1. training data和test data是否应该使用相同的预处理2. 归一化时,是否应该将training data和test data混合计算(如均值,方差,主成分,等)第一点的回答是肯定的,第二点是否定的。抛开domain adaptation不讲,一般的机器学习算法是建立在training和test data服从同一/类似分布的假设之上的。所以有一条准则:预处理对于training和test data要保持一致。如果预处理不同,那怎么还能保证training和test data分布一致?在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进行归一化。


回答2

正确的处理流程是:
1、将清洗完的数据先进行样本内外拆分,将样本内数据再次进行训练集和测试集的拆分
2、对训练集进行特征工程,特征数据预处理->特征选择->生成训练集
3、使用训练集进行训练,固化模型
4、用测试集数据按照已固化的标准,先进行特征工程处理,之后带入模型进行测试
5、用样本外数据集,按照固化模型,单独生成特征数据集,进行数据预处理,带入模型看结果。以上就是我常用的流程。

作者:疯猫子
链接:https://www.zhihu.com/question/312639136/answer/601925011
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。




问题4

交叉验证法中的数据预处理如何去做?


回答1

严格来说,如果需要标准化,每一折都需要对train fit,对test transform。


推荐阅读
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 本文介绍如何使用OpenCV和线性支持向量机(SVM)模型来开发一个简单的人脸识别系统,特别关注在只有一个用户数据集时的处理方法。 ... [详细]
  • 每日前端实战:148# 视频教程展示纯 CSS 实现按钮两侧滑入装饰元素的悬停效果
    通过点击页面右侧的“预览”按钮,您可以直接在当前页面查看效果,或点击链接进入全屏预览模式。该视频教程展示了如何使用纯 CSS 实现按钮两侧滑入装饰元素的悬停效果。视频内容具有互动性,观众可以实时调整代码并观察变化。访问以下链接体验完整效果:https://codepen.io/comehope/pen/yRyOZr。 ... [详细]
  • 机器学习中的标准化缩放、最小-最大缩放及鲁棒缩放技术解析 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • Vision Transformer (ViT) 和 DETR 深度解析
    本文详细介绍了 Vision Transformer (ViT) 和 DETR 的工作原理,并提供了相关的代码实现和参考资料。通过观看教学视频和阅读博客,对 ViT 的全流程进行了详细的笔记整理,包括代码详解和关键概念的解释。 ... [详细]
  • 非线性门控感知器算法的实现与应用分析 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • 深入解析监督学习的核心概念与应用
    本文深入探讨了监督学习的基本原理及其广泛应用。监督学习作为机器学习的重要分支,通过利用带有标签的训练数据,能够有效构建预测模型。文章详细解析了监督学习的关键概念,如特征选择、模型评估和过拟合问题,并介绍了其在图像识别、自然语言处理等领域的实际应用。 ... [详细]
  • 独家解析:深度学习泛化理论的破解之道与应用前景
    本文深入探讨了深度学习泛化理论的关键问题,通过分析现有研究和实践经验,揭示了泛化性能背后的核心机制。文章详细解析了泛化能力的影响因素,并提出了改进模型泛化性能的有效策略。此外,还展望了这些理论在实际应用中的广阔前景,为未来的研究和开发提供了宝贵的参考。 ... [详细]
  • 【图像分类实战】利用DenseNet在PyTorch中实现秃头识别
    本文详细介绍了如何使用DenseNet模型在PyTorch框架下实现秃头识别。首先,文章概述了项目所需的库和全局参数设置。接着,对图像进行预处理并读取数据集。随后,构建并配置DenseNet模型,设置训练和验证流程。最后,通过测试阶段验证模型性能,并提供了完整的代码实现。本文不仅涵盖了技术细节,还提供了实用的操作指南,适合初学者和有经验的研究人员参考。 ... [详细]
  • 能够感知你情绪状态的智能机器人即将问世 | 科技前沿观察
    本周科技前沿报道了多项重要进展,包括美国多所高校在机器人技术和自动驾驶领域的最新研究成果,以及硅谷大型企业在智能硬件和深度学习技术上的突破性进展。特别值得一提的是,一款能够感知用户情绪状态的智能机器人即将问世,为未来的人机交互带来了全新的可能性。 ... [详细]
  • 利用python爬取豆瓣电影Top250的相关信息,包括电影详情链接,图片链接,影片中文名,影片外国名,评分,评价数,概况,导演,主演,年份,地区,类别这12项内容,然后将爬取的信息写入Exce ... [详细]
  • POJ 2482 星空中的星星:利用线段树与扫描线算法解决
    在《POJ 2482 星空中的星星》问题中,通过运用线段树和扫描线算法,可以高效地解决星星在窗口内的计数问题。该方法不仅能够快速处理大规模数据,还能确保时间复杂度的最优性,适用于各种复杂的星空模拟场景。 ... [详细]
  • 汽车电子架构与CAN网络基础解析——鉴源实验室专业解读 ... [详细]
author-avatar
mobiledu2502869423
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有