zoukankan      html  css  js  c++  java
  • R实战 第九篇:数据标准化

    数据标准化处理是数据分析的一项基础工作,不同评价指标往往具有不同的量纲,数据之间的差别可能很大,不进行处理会影响到数据分析的结果。为了消除指标之间的量纲和取值范围差异对数据分析结果的影响,需要对数据进行标准化处理,就是说,把数据按照比例进行缩放,使之落入一个特定的区域,便于进行综合分析。

    在继续下文之前,先解释三个个术语:

    (1)所谓量纲,简单来说,就是说数据的单位;有些数据是有量纲的,比如身高,而有些数据是没有量纲的,例如,男女比例。无量纲化,是指去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或者量级的指标能够进行和加权。

    (2)数据的标准化是指将数据按照比例缩放,使之落入一个特定的区间。

    (3)归一化是数据标准化中最简单的方式,目的是把数变为(0,1)之间的小数,把有量纲的数据转换为无量纲的纯数量。

    常用的归一化方法主要有离差标准化和标准差标准化,r的scale()可以实现标准差标准化,也可以指定标准化之后数据的均值和标准差。

    一,离差标准化

    离差标准化是对原始数据进行线性变化,使数值映射到[0,1]区间中,转换公式是:

    离差标准化保留了原来数据中存在的关系,是消除量纲和数据取值范围对数据分析产生影响的最简单方法,缺点是如果数据集中,且某个数值很大,那么标准化之后大部分值会接近于0,并且不会相差很大。

    二,标准差标准化

    经过该方法处理的数据的均值是0,标准差是1,转化公式是:

    这种方法基于原始数据的均值(mean)和标准差(standard deviation)对数据进行标准化,是用的最多的数据的标准化方法,但是,均值和标准差受离群点的影响很大。

    三,scale()标准化

    R语言通常使用scale()函数对矩阵或数据框按列对数据进行标准化:

    scale(x, center = TRUE, scale = TRUE)

    参数注释:x是数值矩阵,当center=TRUE时,为数据对象x按列进行中心化;当scale=TRUE时,为数据对象x按列进行标准化。

    • 中心化是把每个数据减去均值;
    • 标准化是在中心化后的数据基础上再除以数据的标准差;

    默认情况下,center=TRUE,scale=TRUE,scale()函数首先把一组数的每个数都减去这组数的平均值,然后除以这组数的均方根。

    如果scale=TRUE,而center=FALSE,那么,scale()函数不会把一组数中的每个数减去平均值,而直接处以这组数据的均方根。

    1,scale()函数的中心化和标准化

    例如,向量v是数值向量,均值是 3,标准差是 1.581139:

    v <- c(1,2,3,4,5)
    v.mean <- mean(v)
    s <- sd(v)

    使用scale()函数进行中心化操作,每个向量原始都减去均值3:

    > scale(v,center=TRUE,scale=FALSE)
         [,1]
    [1,]   -2
    [2,]   -1
    [3,]    0
    [4,]    1
    [5,]    2
    attr(,"scaled:center")
    [1] 3

    使用scale()函数进行标准化操作,先减去均值,后除以均方根:

    > scale(v,center=TRUE,scale=TRUE)
               [,1]
    [1,] -1.2649111
    [2,] -0.6324555
    [3,]  0.0000000
    [4,]  0.6324555
    [5,]  1.2649111
    attr(,"scaled:center")
    [1] 3
    attr(,"scaled:scale")
    [1] 1.581139

    2,scale()函数的均值和标准差 

    默认情况下,使用scale()函数对矩阵或数据框的指定列进行均值为0,标准差为1的标准化操作:

    mydata <-scale(mydata)

    要对每一列进行任意均值和标准差的标准化,可以使用以下代码,其中M是均值,SD是标准差:

    mydata <scale(mydata) *SD + M

     

    参考文档:

  • 相关阅读:
    Mayan游戏 (codevs 1136)题解
    虫食算 (codevs 1064)题解
    靶形数独 (codevs 1174)题解
    黑白棋游戏 (codevs 2743)题解
    神经网络 (codevs 1088) 题解
    The Rotation Game (POJ 2286) 题解
    倒水问题 (codevs 1226) 题解
    银河英雄传说 (codevs 1540) 题解
    生日蛋糕 (codevs 1710) 题解
    第一章 1.11 高阶函数
  • 原文地址:https://www.cnblogs.com/ljhdo/p/4899086.html
Copyright © 2011-2022 走看看