精华内容
下载资源
问答
  • ARCGIS数据处理标准化和归一化的处理工具箱
  • 归一化其实就是标准化的一种方式,只不过归一化是将数据映射到了[0,1]这个区间中。 标准化则是将数据按照比例缩放,使之放到一个特定区间中。标准化后的数据的均值=0,标准差=1,因而标准化的数据可正可负。 二、...
  • 标准化和归一化 超全详解

    千次阅读 2020-09-03 21:48:21
    归一化和标准化经常被搞混,程度还比较严重,非常干扰大家的理解。为了方便后续的讨论,必须先明确二者的定义。 首先定义常见的结构化数据表格,第一行的表头是表示各种特征,而后每一列表示某种特征的所有数值。 ...

    原理说明

    一、标准化 / 归一化定义

    归一化和标准化经常被搞混,程度还比较严重,非常干扰大家的理解。为了方便后续的讨论,必须先明确二者的定义。

    首先定义常见的结构化数据表格,第一行的表头是表示各种特征,而后每一列表示某种特征的所有数值。

    无论标准化还是归一化都是针对某个特征(某一列)进行操作的。

    1. 归一化

    就是将训练集中某一列数值特征(假设是第 i i i 列)的值缩放到0和1之间。方法如下所示:

    x i − min ⁡ ( x i ) max ⁡ ( x i ) − min ⁡ ( x i ) \frac{x_{i}-\min \left(x_{i}\right)}{\max \left(x_{i}\right)-\min \left(x_{i}\right)} max(xi)min(xi)ximin(xi)

    2. 标准化

    就是将训练集中某一列数值特征(假设是第i列)的值缩放成均值为0,方差为1的状态。如下所示:
    x i − x ˉ σ ( x ) \frac{x_{i}-\bar{x}}{\sigma(x)} σ(x)xixˉ

    3. 进一步明确二者含义

    归一化和标准化的相同点都是对某个特征(column)进行缩放(scaling)而不是对某个样本的特征向量(row)进行缩放。对特征向量进行缩放是毫无意义的(暗坑1) 比如三列特征:身高、体重、血压。每一条样本(row)就是三个这样的值,对这个row无论是进行标准化还是归一化都是好笑的,因为你不能将身高、体重和血压混到一起去!

    在线性代数中,将一个向量除以向量的长度,也被称为标准化,不过这里的标准化是将向量变为长度为1的单位向量,它和我们这里的标准化不是一回事儿,不能搞混(暗坑2)。

    二、标准化/归一化的好处

    2.1 提升模型精度

    在机器学习算法的目标函数(例如 SVM 的 RBF 内核或线性模型的 L1 和 L2 正则化),许多学习算法中目标函数的基础都是假设所有的特征都是零均值并且具有同一阶数上的方差。如果某个特征的方差比其他特征大几个数量级,那么它就会在学习算法中占据主导位置,导致学习器并不能像我们说期望的那样,从其他特征中学习。

    举一个简单的例子,在KNN中,我们需要计算待分类点与所有实例点的距离。假设每个实例点(instance)由n个features构成。如果我们选用的距离度量为欧式距离,如果数据预先没有经过归一化,那么那些绝对值大的features在欧式距离计算的时候起了决定性作用。

    经验上说,归一化是让不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性。

    2.2 提升收敛速度

    对于线性model来说,数据归一化后,最优解的寻优过程明显会变得平缓,更容易正确的收敛到最优解。

    在这里插入图片描述
    比较这两个图,前者是没有经过归一化的,在梯度下降的过程中,走的路径更加的曲折,而第二个图明显路径更加平缓,收敛速度更快。 对于神经网络模型,避免饱和是一个需要考虑的因素,通常参数的选择决定于 input 数据的大小范围。

    2.3 解决数值计算的一些问题

    比如两个变量的量纲不同,可能一个的数值远大于另一个那么他们同时作为变量的时候 可能会造成数值计算的问题,比如说求矩阵的逆可能很不精确

    Machine-Learning-Note(机器学习笔记)

    三、标准化/归一化的对比分析

    首先明确,在机器学习中,标准化是更常用的手段,归一化的应用场景是有限的。原因有两点:

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

    所以,下面的讨论我们先集中分析标准化在机器学习中运用的情况,在文章末尾,简单探讨一下归一化的使用场景。这样更能凸显重点,又能保持内容的完整性,暂时忘记归一化,让我们focus到标准化上吧。

    四、逻辑回归必须要进行标准化吗?

    面试时,无论你回答必须或者不必须,你都是错的!

    4.1 是否正则化

    真正的答案是,这取决于我们的逻辑回归是不是用正则

    • 如果你不用正则,那么,标准化并不是必须的,
    • 如果你用正则,那么标准化是必须的。(暗坑3)

    为什么呢?

    因为不用正则时,我们的损失函数只是仅仅在度量预测与真实的差距,加上正则后,我们的损失函数除了要度量上面的差距外,还要度量参数值是否足够小。而参数值的大小程度或者说大小的级别是与特征的数值范围相关的。举例来说,我们用体重预测身高,体重用kg衡量时,训练出的模型是:
    身 高 = w ∗ 体 重 身高 = w * 体重 =w

    w w w 就是我们训练出来的参数。

    当我们的体重用吨来衡量时, w w w 的值就会扩大为原来的 1000 1000 1000 倍。
    在上面两种情况下,都用 L1 正则的话,显然对模型的训练影响是不同的。

    假如不同的特征的数值范围不一样,有的是0到0.1,有的是100到10000,那么,每个特征对应的参数大小级别也会不一样,在 L1 正则时,我们是简单将参数的绝对值相加,因为它们的大小级别不一样,就会导致 L1 最后只会对那些级别比较大的参数有作用,那些小的参数都被忽略了。

    4.2 标准化对 LR 的好处

    如果你回答到这里,面试官应该基本满意了,但是他可能会进一步考察你,如果不用正则,那么标准化对逻辑回归有什么好处吗?

    答案是有好处,进行标准化后,我们得出的参数值的大小可以反应出不同特征对样本label的贡献度,方便我们进行特征筛选。如果不做标准化,是不能这样来筛选特征的。

    4.3 标准化的注意事项

    答到这里,有些厉害的面试官可能会继续问,做标准化有什么注意事项吗

    最大的注意事项就是先拆分出 test 集,只在训练集上标准化, 即均值和标准差是从训练集中计算出来的,不要在整个数据集上做标准化,因为那样会将 test 集的信息引入到训练集中,这是一个非常容易犯的错误!

    五、哪些模型需要标准化,哪些不需要?

    5.1 需要标准化的模型

    1. 线性回归,LR,Kmeans,KNN, SVM 等一些涉及到距离有关的算法,
    2. 聚类算法 PCA等
    3. GBDT、adaboost
      因为GBDT的树是在上一颗树的基础上通过梯度下降求解最优解,归一化能收敛的更快,GBDT通过减少bias来提高性能

    1、一般算法如果本身受量纲影响较大,或者相关优化函数受量纲影响大,则需要进行特征归一化。

    2、树模型特征归一化可能会降低模型的准确率,但是能够使模型更加平稳

    5.2 不需要标准化的模型

    当然,也不是所有的模型都需要做归一的,比如模型算法里面没有关于对距离的衡量,没有关于对变量间标准差的衡量。比如 decision tree 决策树,他采用算法里面没有涉及到任何和距离等有关的,所以在做决策树模型时,通常是不需要将变量做标准化的。

    概率模型不需要归一化,因为它们不关心变量的值,而是关心变量的分布和变量之间的条件概率,如决策树、随机森林(RF)

    对于树形结构为什么不需要归一化?

    因为数值缩放不影响分裂点位置,对树模型的结构不造成影响。
    按照特征值进行排序的,排序的顺序不变,那么所属的分支以及分裂点就不会有不同。

    而且,树模型是不能进行梯度下降的,因为构建树模型(回归树)寻找最优点时是通过寻找最优分裂点完成的,因此树模型是阶跃的,阶跃点是不可导的,并且求导没意义,也就不需要归一化。所以树模型(回归树)寻找最优点是通过寻找最优分裂点完成的

    5.3 特殊说明

    要强调:能不归一化最好不归一化,之所以进行数据归一化是因为各维度的量纲不相同。而且需要看情况进行归一化。

    有些模型在各维度进行了不均匀的伸缩后,最优解与原来不等价(如SVM)需要归一化。

    有些模型伸缩有与原来等价,如:LR则不用归一化,但是实际中往往通过迭代求解模型参数,如果目标函数太扁(想象一下很扁的高斯模型)迭代算法会发生不收敛的情况,所以最坏进行数据归一化。

    补充:其实本质是由于loss函数不同造成的,SVM用了欧拉距离,如果一个特征很大就会把其他的维度dominated。而LR可以通过权重调整使得损失函数不变。

    代码实现

    • 使用 sklearnStandardScaler() 函数可以;
    • 或者自己按照公式写函数 normalize() 亦可

    结果一致

    import numpy as np
    from sklearn.preprocessing import StandardScaler
    
    def normalize(data):
        _mean = np.mean(data, axis=0)
        _std = np.std(data, axis=0)
        new_data = (data - _mean) / _std
        return new_data
    
    if __name__ == "__main__":
        test_data = np.array([[1,11,120,1000],
                              [2,25,300,2000],
                              [3,34,390,3000],
                              [4,40,460,4000],
                              [5,50,500,5200]])
        print("test_data:\n", test_data)
        res_1 = normalize(test_data)
        print("res1:\n", res_1)
    
        scaler = StandardScaler()
        res_2 = scaler.fit_transform(test_data)
        print("res2:\n", res_2)
    
    
    

    输出:

    test_data:
     [[   1   11  120 1000]
     [   2   25  300 2000]
     [   3   34  390 3000]
     [   4   40  460 4000]
     [   5   50  500 5200]]
    res1:
     [[-1.41421356 -1.58113883 -1.72958876 -1.38599238]
     [-0.70710678 -0.52704628 -0.39913587 -0.70658435]
     [ 0.          0.15058465  0.26609058 -0.02717632]
     [ 0.70710678  0.6023386   0.78348892  0.65223171]
     [ 1.41421356  1.35526185  1.07914512  1.46752135]]
    res2:
     [[-1.41421356 -1.58113883 -1.72958876 -1.38599238]
     [-0.70710678 -0.52704628 -0.39913587 -0.70658435]
     [ 0.          0.15058465  0.26609058 -0.02717632]
     [ 0.70710678  0.6023386   0.78348892  0.65223171]
     [ 1.41421356  1.35526185  1.07914512  1.46752135]]
    

    参考:

    1. [机器学习] 数据特征 标准化和归一化你了解多少?
    2. 树形结构为什么不需要归一化,树模型为什么是不能进行梯度下降
    3. 面试笔试整理3:深度学习机器学习面试问题准备(必会)
    展开全文
  • 标准化归一化1、标准化(Standardization)和归一化(Normalization)概念1.1、定义1.2、联系和差异一、联系二、差异1.3、标准化和归一化的多种方式2、标准化归一化的原因、用途3、什么时候Standardization,什么...

    1、标准化(Standardization)和归一化(Normalization)概念

    1.1、定义

    归一化和标准化都是对数据做变换的方式,将原始的一列数据转换到某个范围,或者某种形态,具体的:

    归一化( N o r m a l i z a t i o n Normalization Normalization):将一列数据变化到某个固定区间(范围)中,通常,这个区间是[0, 1],广义的讲,可以是各种区间,比如映射到[0,1]一样可以继续映射到其他范围,图像中可能会映射到[0,255],其他情况可能映射到[-1,1];
    在这里插入图片描述
    标准化( S t a n d a r d i z a t i o n Standardization Standardization):将数据变换为均值为0,标准差为1的分布切记,并非一定是正态的
    在这里插入图片描述
    中心化:另外,还有一种处理叫做中心化,也叫零均值处理,就是将每个原始数据减去这些数据的均值。

    我在这里多写一点,很多博客甚至书中说, S t a n d a r d i z a t i o n Standardization Standardization是改变数据分布,将其变换为服从 N ( 0 , 1 ) N(0,1) N(0,1)的标准正态分布,这点是错的,Standardization会改变数据的均值、标准差都变了(当然,严格的说,均值和标准差变了,分布也是变了,但分布种类依然没变,原来是啥类型,现在就是啥类型),但本质上的分布并不一定是标准正态,完全取决于原始数据是什么分布。我个举例子,我生成了100万个服从 b e t a ( 0.5 , 0.5 ) beta(0.5,0.5) beta(0.5,0.5)的样本点(你可以替换成任意非正态分布,比如卡方等等,beta(1,1)是一个服从 U ( 0 , 1 ) U(0,1) U(0,1)的均匀分布,所以我选了 b e t a ( 0.5 , 0.5 ) beta(0.5,0.5) beta(0.5,0.5)),称这个原始数据为 b 0 b_0 b0,分布如下图所示:
    在这里插入图片描述
    通过计算机计算,样本 b 0 b_0 b0的均值和方差分别为0.49982和0.12497(约为0.5和0.125)
    对这个数据做 S t a n d a r d i z a t i o n Standardization Standardization,称这个标准化后的数据为 b 1 b_1 b1,分布如下:
    在这里插入图片描述
    可以看到数据形态完全不是正态分布,但是数学期望和方差已经变了。beta分布的数学期望为 a a + b \frac{a}{a+b} a+ba,方差为 a b ( a + b ) 2 ( a + b + 1 ) \frac{ab}{(a+b)^2(a+b+1)} (a+b)2(a+b+1)ab,所以 E ( b 0 ) = 0.5 0.5 + 0.5 = 1 2 E(b_0)=\frac{0.5}{0.5+0.5}=\frac{1}{2} E(b0)=0.5+0.50.5=21 V a r ( b 0 ) = 1 8 Var(b_0)=\frac{1}{8} Var(b0)=81,这也和我们上文所计算的样本均值和方差一致,而 b 1 b_1 b1的均值和方差分别为:-1.184190523417783e-1和1,均值和方差已经不再是0.5和0.125,分布改变,但绝不是一个正态分布,你不信的话,觉得看分布图不实锤,通过 q q qq qq图和检验得到的结果如下:
    在这里插入图片描述
    你要的qqplot
    在这里插入图片描述
    你要的KS检验,拒绝正态性原假设。
    当然,如果你原始数据就是正太的,那么做了 S t a n d a r d i z a t i o n Standardization Standardization,生成的就是标准正态的数据,切记哦,谁再和你说 S t a n d a r d i z a t i o n Standardization Standardization之后得到 N ( 0 , 1 ) N(0,1) N(0,1)你就反驳他。
    之所以大家会把标准化和正态分布联系起来,是因为实际数据中大部分都是正态分布,起码近似正态,另外,我看到很多人说标准化的基本假设是对正态数据,我并没有从哪些知名度较高的课本教材中查询到依据,如果有知道的同学也可以给我普及

    1.2、联系和差异

    一、联系

    说完 S t a n d a r d i z a t i o n Standardization Standardization N o r m a l i z a t i o n Normalization Normalization的定义和通常的计算方式,再说说二者的联系和差异。
    说道联系, S t a n d a r d i z a t i o n Standardization Standardization N o r m a l i z a t i o n Normalization Normalization本质上都是对数据的线性变换,广义的说,你甚至可以认为他们是同一个母亲生下的双胞胎,为何而言,因为二者都是不会改变原始数据排列顺序的线性变换
    假设原始数据为 X X X,令 α = X m a x − X m i n \alpha=X_{max}-X_{min} α=XmaxXmin,令 β = X m i n \beta=X_{min} β=Xmin(很明显,数据给定后 α 、 β \alpha、\beta αβ就是常数),则 X N o r m a l i z a t i o n = X i − β α = X i α − β α = X i α − c X_{Normalization}=\frac{X_{i}-\beta}{\alpha}=\frac{X_{i}}{\alpha}-\frac{\beta}{\alpha}=\frac{X_{i}}{\alpha}-c XNormalization=αXiβ=αXiαβ=αXic,可见, N o r m a l i z a t i o n Normalization Normalization是一个线性变换,按 α \alpha α进行缩放,然后平移 c c c个单位。其实 X i − β α \frac{X_{i}-\beta}{\alpha} αXiβ中的 β \beta β α \alpha α就像是 S t a n d a r d i z a t i o n Standardization Standardization中的 μ \mu μ σ \sigma σ(数据给定后, μ \mu μ σ \sigma σ也是常数)。线性变换,必不改变原始的排位顺序。

    二、差异

    1. 第一点:显而易见, N o r m a l i z a t i o n Normalization Normalization会严格的限定变换后数据的范围,比如按之前最大最小值处理的 N o r m a l i z a t i o n Normalization Normalization,它的范围严格在 [ 0 , 1 ] [0,1] [0,1]之间;
      S t a n d a r d i z a t i o n Standardization Standardization就没有严格的区间,变换后的数据没有范围,只是其均值是 0 0 0,标准差为 1 1 1
    2. 第二点:归一化( N o r m a l i z a t i o n Normalization Normalization)对数据的缩放比例仅仅和极值有关,就是说比如100个数,你除去极大值和极小值其他数据都更换掉,缩放比例 α = X m a x − X m i n \alpha=X_{max}-X_{min} α=XmaxXmin是不变的;反观,对于标准化( S t a n d a r d i z a t i o n Standardization Standardization)而言,它的 α = σ \alpha=\sigma α=σ β = μ \beta=\mu β=μ,如果除去极大值和极小值其他数据都更换掉,那么均值和标准差大概率会改变,这时候,缩放比例自然也改变了。

    1.3、标准化和归一化的多种方式

    广义的说,标准化和归一化同为对数据的线性变化,所以我们没必要规定死,归一化就是必须到 [ 0 , 1 ] [0,1] [0,1]之间,我到 [ 0 , 1 ] [0,1] [0,1]之间之后再乘一个255你奈我何?常见的有以下几种:

    1. 归一化的最通用模式 N o r m a l i z a t i o n Normalization Normalization,也称线性归一化(我看有些地方也叫rescaling,有待考证,如果大家看到这个词能想到对应的是归一化就行):

    X n e w = X i − X m i n X m a x − X m i n X_{new}=\frac{X_{i}-X_{min}}{X_{max}-X_{min}} Xnew=XmaxXminXiXmin,范围[0,1]

    1. Mean normalization:

    X n e w = X i − m e a n ( X ) X m a x − X m i n X_{new}=\frac{X_{i}-mean(X)}{X_{max}-X_{min}} Xnew=XmaxXminXimean(X),范围[-1,1]

    1. 标准化( S t a n d a r d i z a t i o n Standardization Standardization),也叫标准差标准化:

    X n e w = X i − μ σ X_{new}=\frac{X_{i}-\mu}{\sigma} Xnew=σXiμ,范围实数集

    另外,我会在文章最后介绍一些比较常用的非线性数据处理方式比如boxcox变换等

    2、标准化、归一化的原因、用途

    为何统计模型、机器学习和深度学习任务中经常涉及到数据(特征)的标准化和归一化呢,我个人总结主要有以下几点,当然可能还有一些其他的作用,大家见解不同,我说的这些是通常情况下的原因和用途。

    1. 统计建模中,如回归模型,自变量 X X X的量纲不一致导致了回归系数无法直接解读或者错误解读;需要将 X X X都处理到统一量纲下,这样才可比;
    2. 机器学习任务和统计学任务中有很多地方要用到“距离”的计算,比如PCA,比如KNN,比如kmeans等等,假使算欧式距离,不同维度量纲不同可能会导致距离的计算依赖于量纲较大的那些特征而得到不合理的结果;
    3. 参数估计时使用梯度下降,在使用梯度下降的方法求解最优化问题时, 归一化/标准化后可以加快梯度下降的求解速度,即提升模型的收敛速度。

    3、什么时候Standardization,什么时候Normalization

    我个人理解:如果你对处理后的数据范围有严格要求,那肯定是归一化,个人经验,标准化是ML中更通用的手段,如果你无从下手,可以直接使用标准化;如果数据不为稳定,存在极端的最大最小值,不要用归一化。在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,标准化表现更好;在不涉及距离度量、协方差计算的时候,可以使用归一化方法。
    PS:PCA中标准化表现更好的原因可以参考(PCA标准化)

    4、所有情况都应当Standardization或Normalization么

    当原始数据不同维度特征的尺度(量纲)不一致时,需要标准化步骤对数据进行标准化或归一化处理,反之则不需要进行数据标准化。也不是所有的模型都需要做归一的,比如模型算法里面有没关于对距离的衡量,没有关于对变量间标准差的衡量。比如决策树,他采用算法里面没有涉及到任何和距离等有关的,所以在做决策树模型时,通常是不需要将变量做标准化的;另外,概率模型不需要归一化,因为它们不关心变量的值,而是关心变量的分布和变量之间的条件概率。

    5、一些其他的数据变换方式

    5.1、log变换

    X n e w = l o g 10 ( X i ) / l o g 10 ( X m a x ) X_{new}=log_{10}(X_{i})/log_{10}(X_{max}) Xnew=log10(Xi)/log10(Xmax)

    5.2、sigmoid变换(sigmoid函数)

    X n e w = 1 1 + e − X i X_{new}=\frac{1}{1+e^{-X_{i}}} Xnew=1+eXi1

    其图像如下:
    在这里插入图片描述

    5.3、softmax变换(softmax函数)

    X n e x = e X i ∑ e X i X_{nex}=\frac{e^{X_{i}}}{\sum{e^{X_{i}}}} Xnex=eXieXi

    5.4、boxcox变换

    下源自百度百科:
    在这里插入图片描述
    boxcox变换主要是降低数据的偏度,通常回归模型残差非正态或异方差的时候,会选择对y做boxcox变换,降低y的偏度,让y更接近正态。具体的,我以后如果写到回归或boxcox回归,和读者同学一起探讨。

    6、结语

    以上,及我个人对数据预处理中标准化和归一化的一些理解和说明。

    展开全文
  • 标准化和归一化的区别

    万次阅读 多人点赞 2019-08-20 18:47:37
     归一化是线性模型做数据预处理的关键步骤,比如LR,非线性的就不用归一化了。  归一化就是让不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性。 缺点:这种方法有个缺陷就是当有新数据加入...

    一、是什么?

    1. 归一化

      是为了将数据映射到0~1之间,去掉量纲的过程,让计算更加合理,不会因为量纲问题导致1米与100mm产生不同。

      归一化是线性模型做数据预处理的关键步骤,比如LR,非线性的就不用归一化了。

         归一化就是让不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性。

    缺点:这种方法有个缺陷就是当有新数据加入时,可能导致max和min的变化,需要重新定义。

    另外,最大值与最小值非常容易受异常点影响,所以这种方法鲁棒性较差,只适合传统精确小数据场景

    2. z-标准化

      消除分布产生的度量偏差,例如:班级数学考试,数学成绩在90-100之间,语文成绩在60-100之间,那么,小明数学90,语文100,小花数学95,语文95,如何评价两个综合成绩好坏的数学处理方式。

     

    二、怎么选?

    1. 标准化

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

    (1)逻辑回归必须要进行标准化吗?

    答案:这取决于我们的逻辑回归是不是用正则。

      如果你不用正则,那么,标准化并不是必须的,如果你用正则,那么标准化是必须的。(暗坑3)
      为什么呢?
      因为不用正则时,我们的损失函数只是仅仅在度量预测与真实的差距,加上正则后,我们的损失函数除了要度量上面的差距外,还要度量参数值是否足够小。而参数值的大小程度或者说大小的级别是与特征的数值范围相关的。举例来说,我们用体重预测身高,体重用kg衡量时,训练出的模型是: 身高 = 体重*x ,x就是我们训练出来的参数。
    当我们的体重用吨来衡量时,x的值就会扩大为原来的1000倍。
      在上面两种情况下,都用L1正则的话,显然对模型的训练影响是不同的。

      假如不同的特征的数值范围不一样,有的是0到0.1,有的是100到10000,那么,每个特征对应的参数大小级别也会不一样,在L1正则时,我们是简单将参数的绝对值相加,因为它们的大小级别不一样,就会导致L1最后只会对那些级别比较大的参数有作用,那些小的参数都被忽略了。

      如果你回答到这里,面试官应该基本满意了,但是他可能会进一步考察你,如果不用正则,那么标准化对逻辑回归有什么好处吗?

      答案是有好处,进行标准化后,我们得出的参数值的大小可以反应出不同特征对样本label的贡献度,方便我们进行特征筛选。如果不做标准化,是不能这样来筛选特征的。

      答到这里,有些厉害的面试官可能会继续问,做标准化有什么注意事项吗?

      最大的注意事项就是先拆分出test集,不要在整个数据集上做标准化,因为那样会将test集的信息引入到训练集中,这是一个非常容易犯的错误!
     

    举例:简单的预测房价的线性回归模型:

      有一组关于房价和房子变量的数据集,通过房子的面积,房间数量,房子的层数来预测房价。

      占地面积1800尺,房间数量3间,房子层数2层-> 房价?;为了方便对比,我们分别看一下标准化前和标准化后的模型输出分布是怎么样的。

      可以看出,标准化前后变量的系数不同,误差不同,但是R平方,和变量的t值是相同的

      现在我们来预测一个1590尺,3个卧室,3层的房屋

      我们发现预测出来的房价是一样的。
      这时你一定会想,既然结果都一样,做不做标准化,都一样嘛。说到这里,我们再看一下,建模时寻找最优解的时间吧。

      为什么标准化后的建模时间会短呢?这时候就要说起寻找系数最优解-梯度下降法。

      标准化前,由于变量的单位相差很大,导致了椭圆型的梯度轮廓。标准化后,把变量变成统一单位,产生了圆形轮廓。由于梯度下降是按切线方向下降,所以导致了系统在椭圆轮廓不停迂回地寻找最优解,而圆形轮廓就能轻松找到了。

      还有一种比较极端的情况,有时没做标准化,模型始终找不到最优解,一直不收敛。

    (2)PCA需要标准化吗?

      我们再来看一下,如果将预测房价的变量,用PCA方法来降维,会不会对结果产生影响。

      我们看出在标准化前,用一个成分就能解释99%的变量变化,而标准化后一个成分解释了75%的变化。 主要原因就是在没有标准化的情况下,我们给了居住面积过大权重,造成了这个结果。

    (3)Kmeans,KNN需要标准化吗?

      Kmeans,KNN一些涉及到距离有关的算法,或者聚类的话,都是需要先做变量标准化的。

      举例:我们将3个城市分成两类,变量有面积和教育程度占比;三个城市分别是这样的:

      城市A,面积挺大,但是整天发生偷盗抢劫,教育程度低;
      城市B,面积也挺大,治安不错,教育程度高;
      城市C,面积中等,治安也挺好,教育程度也挺高;

      我们如果不做标准化,直接做聚类模型的话,A城市和B城市分在一块儿了,你想想,一个治安挺好的城市和一个整体偷盗抢劫城市分在一起,实在是有点违反常理。

    总结:

      在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,Z-score standardization表现更好

    基于树的模型不需要标准化;

    用到正则的线性模型一定要标准化,没用到正则的线性模型不一定要标准化, 但标准化可以加快收敛;

    基于距离或聚类需要先做标准化,如KNN、kmeans

    PCA最好先做标准化

     

    2. 归一化

      模型算法里面有没关于对距离的衡量,没有关于对变量间标准差的衡量。比如decision tree 决策树,他采用算法里面没有涉及到任何和距离等有关的,所以在做决策树模型时,通常是不需要将变量做标准化的。

      在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用归一化方法。比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围。有时候,我们必须要特征在0到1之间,此时就只能用归一化。有种svm可用来做单分类,里面就需要用到归一化。

     

    三、怎么用?

    ?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    #导入数据到data变量中

    import pandas

    data = pandas.read_csv('路径.csv')

     

    #(一)Min-Max 标准化

     

    from sklearn.preprocessing import MinMaxScaler

    #初始化一个scaler对象

    scaler = MinMaxScaler()

    #调用scaler的fit_transform方法,把我们要处理的列作为参数传进去

     

    data['标准化后的A列数据'] = scaler.fit_transform(data['A列数据'])

    data['标准化后的B列数据'] = scaler.fit_transform(data['B列数据'])

     

    #(二)Z-Score标准化 (可在scale中直接实现)

     

    from sklearn.preprocessing import scale

    data['标准化后的A列数据'] = scale(data['A列数据'])

    data['标准化后的B列数据'] = scale(data['B列数据'])

     

    # (三) Normalizer归一化

     

    from sklearn.preprocessing import Normalizer

    scaler = Normalizer()

    #归一化可以同时处理多个列,所以[0]第一个进行赋值

    data['归一化后的A列数据'] = scaler.fit_transform(data['A列数据'])[0]

    data['归一化后的B列数据'] = scaler.fit_transform(data['B列数据'])[0]

      

     

    参考文献:

    【1】关于数据建模变量标准化

    【2】机器学习面试之归一化与标准化

    【3】[机器学习] 数据特征 标准化和归一化

    展开全文
  • 今天这篇还是讲特征工程那一堆事,准确点说是数据预处理范畴内的,在做PCA降维时,我发现利用方差过滤出的主成分利用PCA降维得到的主成分对应位置的方差有些不同: VarianceThreshold:[90370.21684180899, 55277....

    今天这篇还是讲特征工程那一堆事,准确点说是数据预处理范畴内的,在做PCA降维时,我发现利用方差过滤出的主成分和利用PCA降维得到的主成分对应位置的方差有些不同:

    VarianceThreshold:[90370.21684180899, 55277.04960170764, 51395.858083599174]
    PCA:[176251.93379431,74196.48270488,55716.27982124]
    

    之前说过PCA降维可以将原来高维的数据投影到某个低维的空间上并使得其方差尽量大。如果数据其中某一特征的数值特别大的话,那么它在整个误差计算的比重上就很大。所以将数据投影到低维空间之后,整个投影会去努力逼近数值最大的那一个特征,而忽略数值比较小的特征。

    在建模前我们不知道每个特征的重要性,这很可能导致了大量的信息缺失。为了“公平”起见,防止过分捕捉某些数值大的特征,我们就可以先对每个特征先进行标准化处理,使得它们的大小都在相同的范围内,然后再进行PCA。

    我们要处理的数据往往有着不同的量纲和量纲单位,这样的情况会影响到数据分析的结果,为了消除特征之间的量纲影响,需要进行数据标准化处理。原始数据经过数据标准化处理后,数据集中每个特征就处于同一数量级,适合进行综合对比评价。

    上面文字叙述可能相对抽象,就先通过一个简单的例子深入了解一下标准化和归一化的重要性。假如一个人的健康状况可以根据一个公式计算:

    健 康 状 况 = 3 × 身 高 + 2 × 体 重 健康状况=3\times身高+2\times体重 =3×+2×

    现在我们有一份数据集,有身高和体重两个特征,身高的单位为米,体重的单位为斤:

    身高(米)体重(斤)健康状况
    1.7120245.1
    1.6200404.8
    2.0140286

    即使在公式中身高所占权重要大于体重,但是由于这两个特征数值之间出现了两极化,所以最后一个人的健康状况很大程度向体重倾斜,所以若想正确的评判一个人的健康状况,那么需要中和一下两类数值,可以将其映射至[0,1]区间内,也就是进行归一化处理:

    身高(米)体重(斤)健康状况
    0.2500.5
    012
    10.253.5

    处理之后再预测时,就不会出现向某个特征倾斜的状况,两个特征的重要性就取决于公式中系数的大小。

    归一化

    归一化就是将训练集中某一列数值特征的值缩放到0和1之间,公式如下:

    X n o r m = X − X m i n X m a x − X m i n X_{norm}=\frac{X-X_{min}}{X_{max}-X_{min}} Xnorm=XmaxXminXXmin

    其中 X m a x X_{max} Xmax为样本最大值, X m i n X_{min} Xmin为样本最小值。可以看到每个样本的归一化都是要依据数据中最大值和最小值进行的,所以归一化对数据集中的异常点是比较敏感的。因为异常点通常是离群点,那么它的值可能就过大或者过小,如果归一化依据异常点进行的话,最后的结果就会产生很大的偏差。所以在归一化很适合精确且规模相对小一些的数据集,一般在归一化之前可以先检查数据,排除异常点的影响。

    利用numpy实现归一化的代码如下:

    def normalization(data):
        M_m = np.max(data)-np.min(data)
        return (data-np.min(data)) / M_m
    

    标准化

    标准化就是将训练集中某一列数值特征的值缩放成均值为0,方差为1的状态。公式如下:

    X s t d = X − μ σ X_{std} = \frac{X-\mu}{\sigma} Xstd=σXμ

    其中 μ \mu μ为样本均值、 σ \sigma σ为样本标准差, σ \sigma σ也考量了数据稳定性。每一个样本的归一化仅和最大值、最小值和它本身有关,这点和标准化是有一些出入的,标准化的缩放处理和每一个样本点都有关系,因为均值和标准差是数据集整体的,与归一化相比,标准化更加注重数据集中样本的分布状况。由于具有一定的样本个数,所以出现少量的异常点对于平均值和标准差的影响较小,因此标准化的结果也不会具有很大的偏差。

    利用numpy实现标准的代码如下:

    def standardization(data):
        mu = np.mean(data, axis=0)
        sigma = np.std(data, axis=0)
        return (data - mu) / sigma
    

    综上很容易推断出归一化和标准化本质上都是对原始数据进行缩放和平移,只是着重点不同。

    在sklearn库中也有归一化和标准化对应的API,应用起来也很简单,归一化应用方法:

    from sklearn.preprocessing import MinMaxScaler
    import numpy as np
    X = [[83,2,10],
         [60,3,15],
         [75,4,13]]
    X = np.array(X)
    Mm = MinMaxScaler()
    data = Mm.fit_transform(X)
    print(data)
    

    归一化输出对应结果:

    [[1.         0.         0.        ]
     [0.         0.5        1.        ]
     [0.65217391 1.         0.6       ]]
    

    标准化应用方法:

    from sklearn.preprocessing import StandardScaler
    import numpy as np
    
    X = [[83,2,10],
         [60,3,15],
         [75,4,13]]
    X = np.array(X)
    Mm = StandardScaler()
    data = Mm.fit_transform(X)
    print(data)
    

    标准化输出对应结果:

    [[ 1.08388958 -1.22474487 -1.29777137]
     [-1.32863884  0.          1.13554995]
     [ 0.24474926  1.22474487  0.16222142]]
    

    那么是所有的机器学习算法建模之前都需要对相应的数据进行标准化和归一化处理吗?肯定不是的。其中KNN算法、支持向量机、线性回归、神经网络是需要进行标准化或归一化处理的,不难发现这几种算法都与"距离"相关,所以在进行计算时为了避免预测结果向数值大的特征倾斜,所以标准化处理是必要的,可以很大程度提高模型的精度。

    而逻辑回归是否要标准化则取决于是否应用正则化,标准化可以很好的提高收敛速度,这很好的体现在梯度下降法和梯度上升法中,如下图:

    左图为标准化之前,右图为标准化之后,可以看到标准化可以让模型少走很多弯路,从而加快收敛速度,这一点也很容易想象,毕竟个位数与千位数、个位数与个位数之间的"距离"差距还是很大的。

    决策树和朴素贝叶斯算法是不需要进行标准化的,因为前者是通过信息增益进行决策,后者是通过概率进行评判,这类模型不关心变量的取值,而是关心变量的分布和变量之间的条件概率,与"距离"计算无关,继而以决策树为基础构建的随机森林、AdaBoost等等也不需要标准化,但是需要注意的是,在应用这些算法之前若要使用PCA降维则需要进行标准化。

    那么归一化和标准化如何选择呢?这个没有准确的答案,如果时间允许,可以尝试两种处理方法择最优。如果时间不允许,可以根据数据和要求选择:

    • 如果数据集小而稳定,可以选择归一化
    • 如果数据集中含有噪声和异常值,可以选择标准化,标准化更加适合嘈杂的大数据集。

    关注公众号【喵说Python】第一时间获取更多精彩好文

    展开全文
  • 机器学习中的标准化和归一化

    千次阅读 2018-08-20 10:22:39
    1、归一化和标准化 归一化和标准化经常被搞混,程度还比较严重,非常干扰大家的理解。为了方便后续的讨论,必须先明确二者的定义。 归一化 就是将训练集中某一列数值特征(假设是第i列)的值缩放到0和1之间。...
  • 数据的标准化和归一化 数据的标准化(normalization)是将数据按比例缩放,使之落入一个小的特定区间。在某些比较和评价的指标处理中经常会用到,去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级...
  • 1、标准化 2、归一化 https://www.jianshu.com/p/95a8f035c86c
  • [机器学习] 数据特征 标准化和归一化

    万次阅读 多人点赞 2018-07-24 11:51:38
    归一化和标准化经常被搞混,程度还比较严重,非常干扰大家的理解。为了方便后续的讨论,必须先明确二者的定义。 归一化 就是将训练集中某一列数值特征(假设是第i列)的值缩放到0和1之间。方法如下所示: ...
  • 机器学习特征工程--标准化和归一化

    千次阅读 2019-03-02 19:32:14
    关于归一化和标准化 1.标准化使用条件 (1)不需要对特征进行归一化:基于树模型的方法 举例: 随机森林/bagging/boosting/xgboost 需要标准化的(基于距离的模型):回归分析(逻辑回归)/神经网络 / svm 2....
  • 数据特征标准化和归一化的区别

    千次阅读 2019-09-28 14:04:06
    **归一化和标准化经常被搞混,程度还比较严重,非常干扰大家的理解。为了方便后续的讨论,必须先明确二者的定义。** 一、标准化/归一化定义 归一化和标准化经常被搞混,程度还比较严重,非常干扰大家的理解...
  • 最近在为找工作备战,看了很多博客,总结机器学习中一些基础的知识。...什么是数据的标准化和归一化?在CSDN和知乎上有很多大佬做出了回答,看了有的人的回答,感觉会把自己气晕,完全是浪费时间并且误人子弟。 ...
  • 特征的标准化和归一化

    千次阅读 2018-07-30 00:01:22
    z-score标准化:这是最常见的特征预处理方式,基本所有的线性模型在拟合的时候都会做 z-score标准化。具体的方法是求出样本特征x的均值mean标准差std,然后用(x-mean)/std来代替原特征。这样特征就变成了均值为0...
  • 数据预处理 数据中不同特征的量纲可能不一致,数值间的差别可能很大,不进行处理可能会影响到数据...提升模型精度:标准化/归一化后,不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性。 加..
  • 机器学习——SVM之python实现数据样本标准化和归一化
  • 数据预处理:标准化和归一化

    千次阅读 2019-04-27 19:54:01
    网上很多关于标准化和归一化的文章,不少是误人子弟的存在。这篇文字希望给大家讲清讲透这两个概念。 一、标准化(standardization) 公式一般为:(X-mean)/std,其中mean是平均值,std是方差。 从公式我们可以...
  • 统计学—标准化和归一化的区别

    千次阅读 2020-09-01 23:28:27
    目录数据归一化和标准化是什么标准化和归一化的优缺点和适用范围 数据归一化和标准化是什么 数据的标准化(normalization)是将数据按比例缩放,使之落入一个小的特定区间。在某些比较和评价的指标处理中经常会用到...
  • 文章目录参考标准化标准化和归一化的区别与联系 参考 参考1 标准化 作用:标准化则是将数据按照比例缩放,使之放到一个特定区间中。标准化后的数据的均值=0,标准差=1,因而标准化的数据可正可负。 目的:多指标...
  • 数据特征:标准化和归一化

    千次阅读 2019-01-24 20:31:24
    归一化和标准化经常被搞混,程度还比较严重,非常干扰大家的理解。为了方便后续的讨论,必须先明确二者的定义。 归一化 就是将训练集中某一列数值特征(假设是第i列)的值缩放到0和1之间。方法如下所示: ![在...
  • [机器学习] 数据特征 标准化和归一化你了解多少? TinyMind 2018-07-26 15:12 ... 数据特征分析 数据标准化 数据归一化 一、标准化/归一化定义 归一化和标准化经常被搞混,程度还比较严重,非常干扰大家...
  • 数据预处理之标准化和归一化

    千次阅读 2018-05-14 21:33:51
    数据标准化的分类有Min-max 标准化和z-score 标准化。经过标准化处理,原始数据均转换为无量纲化指标测评值,即各指标值都处于同一个数量级别上,可以进行综合测评分析。一、Min-max 标准化(也叫归一化)min-max...
  • 数据标准化和归一化的异同

    千次阅读 2018-04-04 22:21:56
    1归一化特点 对不同特征维度的伸缩变换的目的是使各个特征维度对目标函数的影响权重是一致的,即使得那些扁平分布的数据伸缩变换成类圆形。这也就改变了原始数据的一个分布。好处: 1 提高迭代求解的收敛速度 2 ...
  • 标准化和归一化

    千次阅读 2017-04-20 09:51:37
    *****************************归一化******************************* 1)把数据变成(0,1)之间的小数 2)把有量纲表达式变成无量纲表达式   归一化算法有: 1.线性转换  y=(x-MinValue)/(MaxValue-...
  • 数据标准化能将原来的数据进行重新调整(一般也称为 z-score 规范化方法),以便他们具有标准正态分布的属性,即 μ=0 σ=1。其中,μ 表示平均值,σ 表示标准方差。数据标准化之后的形式可以按照如下公式进行...
  • 归一化红酒数据集进行标准化&归一化标准化处理对PCA主成分分析的影响 内容介绍 本章节为 特征标准化 处理总结,其中 等内容。 本专栏介绍关于数据分析工作中常用的 使用Python进行数据预处理 的方法总结。通过对...
  • 一篇文章告诉你标准化和归一化的区别? 2019-02-28 17:12:39 融融网融融网阅读量:484 进一步推进企业的标准化工作,使之发展水平适应经济全球化下市场竞争的要求,促进企业综合实力的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 63,002
精华内容 25,200
关键字:

标准化和归一化