数据预处理之数据无量纲化(标准化/归一化)

article/2025/9/15 21:25:10

   在进行特征选择之前,一般会先进行数据无量纲化处理,这样,表征不同属性(单位不同)的各特征之间才有可比性,如1cm 与 0.1kg 你怎么比?无量纲处理方法很多,使用不同的方法,对最终的机器学习模型会产生不同的影响。本文将对常用的无量纲化技术进行总结,试图指出他们的适用场景,并给出在Python中的相应调用方式。正文中每列代表一个 属性/特征,每行表示一个/条 样本。

   1. min-max归一化

   该方法是对原始数据进行线性变换,将其映射到[0,1]之间,该方法也被称为离差标准化(但是请注意,网上更多人喜欢把z-score称为标准化方法,把min-max称为归一化方法,然后在此基础上,强行给标准化(z-score)与归一化(min-max)划条界线,以显示二者之间的相异性。对!二者之间确实有很大的不同,这个我们后面会有介绍,但是这两个方法说到底还都是用来去除量纲的,都是无量纲化技术中的一员而已,所以,请不要纠结标准化与归一化这两个概念了)。

                          

   上式中,min是样本的最小值,max是样本的最大值。由于最大值与最小值可能是动态变化的,同时也非常容易受噪声(异常点、离群点)影响,因此一般适合小数据的场景。此外,该方法还有两点好处:

   1) 如果某属性/特征的方差很小,如身高:np.array([[1.70],[1.71],[1.72],[1.70],[1.73]]),实际5条数据在身高这个特征上是有差异的,但是却很微弱,这样不利于模型的学习,进行min-max归一化后为:array([[ 0. ], [ 0.33333333], [ 0.66666667], [ 0. ], [ 1. ]]),相当于放大了差异;

   2) 维持稀疏矩阵中为0的条目。

   使用方法如下:

from sklearn.preprocessing import MinMaxScaler
x = np.array([[1,-1,2],[2,0,0],[0,1,-1]])
x1 = MinMaxScaler().fit_transform(x)

   不难发现,x1每列的值都在[0,1]之间,也就是说,该模块是按列计算的。并且MinMaxScaler在构造类对象的时候也可以直接指定最大最小值的范围:scaler = MinMaxScaler(feature_range=(min, max)).

   2. z-score标准化

   z-score标准化(zero-mena normalization0-均值标准化)方法的公式如下所示:

                            

   上式中,x是原始数据,u是样本均值,σ是样本标准差。回顾下正态分布的基本性质,xN(u,σ^2),则有

                          其中,N(0,1)表示标准正态分布

   于是,可以看出,z-score标准化方法试图将原始数据集标准化成均值为0,方差为1且接近于标准正态分布的数据集。然而,一旦原始数据的分布 不 接近于一般正态分布,则标准化的效果会不好。该方法比较适合数据量大的场景(即样本足够多,现在都流行大数据,因此可以比较放心地用)。此外,相对于min-max归一化方法,该方法不仅能够去除量纲,还能够把所有维度的变量一视同仁(因为每个维度都服从均值为0、方差1的正态分布),在最后计算距离各个维度数据发挥了相同的作用,避免了不同量纲的选取对距离计算产生的巨大影响。所以,涉及到计算点与点之间的距离,如利用距离度量来计算相似度、PCA、LDA,聚类分析等,并且数据量大(近似正态分布),可考虑该方法。相反地,如果想保留原始数据中由标准差所反映的潜在权重关系应该选择min-max归一化,基于数学角度的解释可参阅这两篇博文[1,2],链接在最下方reference内。

from sklearn.preprocessing import StandardScaler
x = np.array([[1,2,3],[4,5,6],[1,2,1]])
x1 = StandardScaler().fit_transform(x)

        可以发现,x1的每一列加起来都是0,方差是1左右。注意该方法同样按列(即每个属性/特征)进行计算。并且StandardScaler类还有一个好处,就是可以直接调用其对象的.mean_.std_方法查看原始数据的均值与标准差。

X = np.array([[ 1., -1., 2.], ... [ 2., 0., 0.], ... [ 0., 1., -1.]])
scaler = StandardScaler().fit(X)
scaler.mean_  
array([ 1. ..., 0. ..., 0.33...])

          3.  Normalization

           在一些地方,有人把这种方法翻译为正则化,但是机器学习中的正则化更多是与模型相关(比如逻辑回归在损失函数后增加L2正则项),所以这种翻译我不喜欢;也有人称之为归一化,但是吧,有时这种方法并没体现“归一”特性,如处理后的数据该是负号的还是负号;直译表示标准化吧,我怕你们又把这种方法与z-score标准化联系起来,因此,就不翻译了吧。

   其实这个方法是根据范数来进行 Normalization的,何为范数?听着感觉高大上,其实非常常见。Lp-范数的计算公式如下所示:

                 

   可见,L2范数即为欧式距离,则规则为L2Normalization公式如下所示,易知,其将每行(条)数据转为相应的“单位向量”。

                             

   Normalization的过程是将每个样本缩放到单位范数(结合单位向量进行理解,p=2时为单位向量,其他为单位范数),如果后面要使用如二次型(点积)或者其它核方法计算两个样本之间的相似性这个方法会很有用[3]

from sklearn import preprocessing
normalizer = preprocessing.Normalizer().fit(X)
normalizer.transform(X)

reference 

[1]. 《再谈机器学习中的归一化方法(Normalization Method)

[2].  《归一化与标准化》

[3]. 《关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化》



http://chatgpt.dhexx.cn/article/qbB364VD.shtml

相关文章

无量纲化

参考博客:https://www.zhihu.com/question/29316149 1,无量纲化使不同规格的数据转换到同一规格。 2,常见的无量纲化方法有标准化和区间缩放法。 2.1**标准化**的前提是特征值服从正态分布,标准化后,其转换成标准正态分布。   标准化需要计算特征的…

什么是无量纲化

首先来了解什么是量纲? 量纲和单位的区别,长度,时间,质量等都叫做量纲,而米,千米,秒,分钟,等都是单位, 国际单位制规定了七个基本量纲单位,这七个…

常用的数据无量纲化方法

常用的数据无量纲方法 常用的数据无量纲方法都有什么?1.min-max归一化2.z-score标准化 常用的数据无量纲方法都有什么? 1.min-max归一化 该方法是对原始数据进行线性变换,将其映射到[0,1]之间([-1,1]之间也行)。 d…

数据预处理——无量纲化处理

数据预处理——无量纲化处理 1.无量纲化定义 无量纲化,也称为数据的规范化,是指不同指标之间由于存在量纲不同致其不具可比性,故首先需将指标进行无量纲化,消除量纲影响后再进行接下来的分析。 2.无量纲化方法 无量纲化方法有很…

几种指标无量纲化的方法

统计指标的无量纲化就是将统计指标的实际值转化为评价值。由于统计指标的性质不同,相应地,统计指标实际值转化为评价值的方法也就不同。 一、线性无量纲化方法 如果无量纲化的指标评价值与指标的实际值之间是呈现线性关系的,这种无量纲化方…

Latex公式换行编写

latex在写公式时往往会遇到长公式或者连续等于的情况,这时可以选择公式换行操作: \begin{equation}\begin{aligned}a & bc\\& cb\end{aligned} \end{equation} 得到如下的效果: 其中&是用于标注需要对齐的位置,例如…

Latex 多行公式换行对齐

\begin{equation} \begin{split} x&abc\\ &de\\ &fg \end{split} \end{equation} 效果:

LaTex排版技巧:[15]公式太长如何换行

当我们输入的公式较长时,最容易想到的方法是,在会出现越界的情况,使用强制换行\\,但是这种方法在公式中行不通。 通常,我们行间公式的换行可使用split 环境来实现。如 \[ \begin{split} x & \sqrt {1-y^2}\\ x &am…

LaTex常用技巧5:公式太长换行并加大括号

使用LaTex做笔记的时候发现公式太长,一行会超出页面,于是想到换行。 原来的代码,这里使用了包bm,测试的时候前面请使用\usepackage{bm}。 \begin{equation}_{i}^{G} {\bm{a}}\begin{cases} _{i}^{i-1}\ddot{\bm{p}}, &i1\\_…

Latex 公式太长,换行等号对其

首先一定要插入两个包: \usepackage{amsmath} \usepackage{amssymb} 如果不插入包的话,每次运行到aligned就会报错 然后文章中可如下编译公式: \begin{equation}\label{1} \begin{aligned} a & b c \\ & d e \end{aligned}…

latex如何实现单元格内文字的换行

问题描述 使用latex绘制表格时,有时候会遇到单元格的文字过长,显得很拥挤,适当的换行可以使整体效果更加美观,比如: 源代码为: \resizebox{\textwidth}{!}{\begin{tabular}{cccccccc}\toprule\textbf{Nam…

Latex公式排版(编号、换行、括号内换行、对齐)

最近写论文刚上手了Latex,因为有模板,所以用起来还是很方便的。 但是在实际使用中,由于论文是双栏的,因此比较长的公式在排版时会比较困难。下面对Latex中的公式排版方法做一些记录。 公式的编写方法在此不再赘述。可以选择网页版…

LaTex长公式换行及对齐

长公式换行用\\,对齐用&,宏包\usepackage{amsmath} 示例代码 \begin{equation*}%加*表示不对公式编号 \begin{split} PMV &[0.303*exp(-0.036M)0.0275]*\{M-W-3.05*[5.733-\\ &0.007(M-W)-P_a]-0.42*(M-W-58.2)-0.0173M*\\ &(5.867-P_…

latex论文中行内公式太长需换行

论文latex 行内公式太长怎么换行 研究生论文写作,度娘了很久都没找到直接的答案方法如下:我的整体代码如下:效果如下: 研究生论文写作,度娘了很久都没找到直接的答案 需要将行内公式换行,使其不超出页面 …

Latex行内公式或行间公式太长换行

行内公式 代码: %错误示范 Then it sets ABETs the master public key $m p k_{A B E T}\left(g, h, u, v, w, e(g, g)^{\alpha}, e(g, h)^{\delta},\left\{h_{i}^{\alpha}\right\}_{i \in[1, n]},\left\{g_{i}g^{z_{i}}\right\}_{i \in[1, n]},{{h}^{\alpha }},{…

Latex 公式换行问题(换行,等号对齐)

Latex 公式换行问题(换行,等号对齐) 作为一个研究生肯定避免不了写论文,在这个过程中latex使用就尤为重要,他会帮助你们实现期刊格式要求的排版。今天就简单说一下我在写论文过程中遇到的问题之一,公示太长…

Latex中多行公式换行及设置编号位置

1. 公式换行 公式换行的方式有很多种,介绍三种 (1)用equation结合aligned: \begin{equation}\label{eqn:1} \begin{aligned} & a b \\ & c d \\ & e f. \end{aligned} \end{equation} 结果为: &a…

【C语言】用C语言实现最大公约数和最小公倍数【超详细讲解】

最大公约数: “最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。a,b的最大公约数记为(a,b),同样的,a,b,c的最大公…

LRN与BN

LRN是作用于卷积的一种优化,即局部响应归一化层。它的作用是减少过拟合的产生,一般用在卷积RULE激活函数之间。 具体是实现如下: 公式看起来有一些麻烦,但我们不需要关心公式的组成,我们考虑其中的原理即可。为什么要…

Alexnet中的LRN

LRN全称为Local Response Normalization,即局部响应归一化层,LRN函数类似Dropout,是一种防止过拟合的方法。这个函数很少使用,基本上被类似Dropout这样的方法取代,见最早的出处AlexNet论文对它的定义, 《ImageNet Clas…