QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1996|回复: 0
打印 上一主题 下一主题

[建模教程] 数据变换方法: 初值化、 均值化、百分比/倍数变换、归一化、极差最大值化、区间值...

[复制链接]
字体大小: 正常 放大
浅夏110 实名认证       

542

主题

15

听众

1万

积分

  • TA的每日心情
    开心
    2020-11-14 17:15
  • 签到天数: 74 天

    [LV.6]常住居民II

    邮箱绑定达人

    群组2019美赛冲刺课程

    群组站长地区赛培训

    群组2019考研数学 桃子老师

    群组2018教师培训(呼伦贝

    群组2019考研数学 站长系列

    跳转到指定楼层
    1#
    发表于 2020-6-3 16:17 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta |邮箱已经成功绑定
    特征归一化,又叫 特征缩放,Feature Normalization,Feature Scaling。各特征由于数值大小范围不一致,通过缩放特征的取值范围,可以消除量纲,使特征具有可比性。只有各特征之间的大小范围一致,才能使用距离度量等算法,加速梯度下降算法的收敛;在SVM算法中,一致化的特征能加速寻找支持向量的时间;不同的机器学习算法,能接受的输入数值范围不一样。sklearn中最常用的特征归一化方法是MinMaxScaler和StandardScaler。% ?, l! X( T9 z% F$ C! P
    # J& O) E. x. C
    当我们需要将特征值都归一化为某个范围[a,b]时,选 MinMaxScaler
    8 [/ t. U7 b' ~- q8 B6 E7 D4 w# x当我们需要归一化后的特征值均值为0,标准差为1,选 StandardScaler
    ) K5 a) o2 _+ S3 R2 @数据变换的目的:. O' o1 {# u  F" N) |: i
      对收集来的原始数据必须进行数据变换和处理,主要是为了消除量纲,使其具有可比性。
    5 _9 @2 s! `3 e) T; M8 r' N
    " w6 u8 K, H. l0 l2 c$ l 定义 : 设有n个数据的序列  ,则称映射
    % z; b- S3 Y$ ]2 N
    . \: p; J3 g. F  ?, b  Z$ n( g                                        0 L. Z# f1 O, W! k. ~. e

    3 k( W( z$ k2 w, o: `& w. I& ?          为序列 x到序列 y 的数据变换。 1 x1 Z! G( _4 x+ j0 L0 V* C: |

    7 i' M8 O4 b7 Z4 ^2 g数据变换的七种常见方式
    + m3 b5 f  l; B7 y0 f" J此处是对同一维度上的各个数据进行变换,如果数据有多个维度/属性,那就拆开来一个属性属性地变换,写成矩阵形式时,它也是分别对各维度进行操作。
    # ~" `. Z; F+ v. {( m7 S7 j
    . f4 `3 _! w( \) u初值化变换- V- V1 E% I4 Z% o

    # a& W7 s/ \: {4 Q6 f" {; `. ^$ \  i6 ]: m
    也就是要对每一个数据,都除以第一个数据。. c" @& c4 z7 U7 k

    9 N" L2 j7 ]6 e0 O, c. n, L. x均值化变换7 k, Y' K0 K3 X' x8 @) Y
    7 y& _0 @- q. o4 G; O
    " G/ B2 g/ }: U3 y" ?( Q! M
                 对每一个数据,都除以均值。- |. i) N5 K7 J: r8 w

    2 i& |$ e7 O0 O6 D% V, m" ]; I! f  h百分比变换- l* n4 x6 Z& f; f7 D% S5 n
    5 s0 o5 P( {, I3 A2 N2 e

    + q) e( ]# t) A% L% o( `4 k4 n分母为x的该列属性中,值最大的那一个,使得变换后的值的绝对值,在[0,1]之间。0 S# J! H, c  i3 k3 E7 `

    , p; Y6 C! e3 Y9 f0 T6 k# x倍数变换
    2 r( b; a9 b% ~, V    3 x% h7 @7 v  ]; K* U: g; B
    & t$ Y' y# p- ?1 }# ]; B7 }
    归一化变换0 D2 ^  P* \# M* L, w) u! r1 m

    : `) R+ h4 j' I/ |. z3 W  `+ p
    7 s8 \, [: f3 D/ L 其中   为大于零的某个值,称  是归一化变换。 8 d" Z2 v5 Q% X, J( j$ R" F2 @5 G  c
    5 j% u' _# v/ i/ V& w% ~- B# w

    ( t; b1 C( M$ B* T9 r# f极差最大值化变换4 j3 n* F, r8 O$ i, B3 \7 M4 I" ^

    * f4 W; e$ ?8 @! l8 B% k5 A* `8 i) j. A! j" A/ |

    ( @+ h& ^) Q6 P% _& P4 }
    9 e$ l* n9 Q" M区间值化变换
    ' Q% e, t% @) m, }
    7 T3 s3 H6 H# X9 L) E- B1 g
    0 D8 Z/ ?( [; i! |/ V; w* v                  ,
    - L1 h+ N, I" f; \+ {; w% Q" A0 t" b, E5 y$ q1 e' k9 O" R' I
    1. matlab 的mapminmax归一化函数* R" z4 G2 ~; f+ `3 M
    函数用法:
    2 _0 Q* x* T- y0 r& D, P [Xn,Xps]=mapminmax(X,min,max)4 \: T" j3 a, b- f
      e+ x7 Z; n2 v, C/ q- M5 B
    说明:(1)该函数将X按行归一化,即计算某元素的归一化值时,最大最小值时该元素所处行的最大最小值;因此若只有一组观测时,X需是1*N的行向量。
    ! H$ ]1 ?$ T  Z$ S+ R
    ) Z% r  _* {( i1 h- U   (2)min,max规定X的归一化范围,根据需要自行设置
    " _+ u9 H  x, P5 t
    / {. f+ M5 G  j! B2 T. T   (3)ps是结构变量记录了归一化时的最大值最小值等参数,后续可重复调用     
    6 x: \$ Y7 j( i6 \7 U1 g; o" P7 k6 n' i' d5 u; I
     调用方法:7 Q1 {1 w1 B+ P, l

    1 N* `1 ~+ n9 b: _! j' ]% ?X1=mapminmax('apply', X_new,Xps);%利用先前的结构Xps进行相同的归一化6 K! a! P; A' c  ?

    + q  ?5 j; g  N8 s" N3 T* @X2=mapminmax('reverse',Xn, Xps);%反归一化
    $ z  ~% o8 Y2 B- U0 l% j4 Y0 U4 K3 P; J
    x=[1,-1,2;   2,0,0;   0,1,-1]. m4 V) j2 Y5 {; q  m+ a
    [x1,Xps]=mapminmax(x,0,1)$ k1 X( x: a# X+ h0 K7 C# [( S$ c
    6 [% ~8 t! `5 r6 r% Q1 P
    2 A$ ~7 e' I4 m" Z: U

    $ `' v6 S. r& C' ]( c8 U* c$ d对于python中的axis=0 和axis=1的问题
    ! r$ c  r. R7 b, E; K 如df.mean其实是在每一行上取所有列的均值,而不是保留每一列的均值。也许简单的来记就是axis=0代表往跨行(down),而axis=1代表跨列(across),作为方法动作的副词(译者注)
    " p; P: k9 Y: D8 C3 _( {8 [  \换句话说:
    0 v5 h) b& T" W4 w/ x
    0 I" D' y; A: Y5 Q2 ~2 H使用0值表示沿着每一列或行标签\索引值向下执行方法3 q0 W3 @/ ^. Z/ d) c( P
    使用1值表示沿着每一行或者列标签模向执行对应的方法
    " t% l+ c7 }( M) D1 o7 |+ O- @" d( h% z8 ?- W

    & S: R2 a0 F" k% j9 ?
    ) c& P0 ?- ?7 u9 c. {python的sklearn中 scale函数
    6 ~# O0 Y2 ?- y# I; T1 标准化,均值去除和按方差比例缩放1 i1 [( d5 k6 }$ g; w  {2 y
                  (Standardization, or mean removal and variance scaling)
    + c! m7 Q& L% ]! I7 {' {
    6 P+ E* G- y0 `: R8 W; I* H$ g3 f  数据集的标准化:当个体特征太过或明显不遵从高斯正态分布时,标准化表现的效果较差。实际操作中,经常忽略特征数据的分布形状,移除每个特征均值,划分离散特征的标准差,从而等级化,进而实现数据中心化。% z0 p  w$ a  \; q
    * j8 R4 M5 Q8 s$ a
    from sklearn import preprocessing 4 h5 y9 G: c9 g5 i4 P1 m- ]
    import numpy as np  
    # z, o* J+ V+ xX = np.array([[1., -1., 2.], [2., 0., 0.], [0., 1., -1.]])  
    # [' O. b% t1 O9 V& P. HX_scaled = preprocessing.scale(X) % |; Y% z; |* c& K+ R- w' J! ^

    0 z% o) Y# x% W#output :X_scaled = [[ 0.         -1.22474487  1.33630621]
    - p  o  c5 @3 B/ g# b- q                                  [ 1.22474487  0.         -0.26726124]7 Y: E: a0 k8 |" r7 [; f
                                     [-1.22474487  1.22474487 -1.06904497]]
    # j0 A4 a' F1 s6 O% B7 u1 O3 N#scaled之后的数据列为零均值,单位方差
    , ]) V1 z% E2 h0 l/ u4 _X_scaled.mean(axis=0)  # column mean: array([ 0.,  0.,  0.])  1 s! f$ J' t6 J9 S0 e9 g3 N* }, \
    X_scaled.std(axis=0)  #column standard deviation: array([ 1.,  1.,  1.])
    - y1 ^" x& T: k* a$ X/ ?" h+ w+ ?
    . B* r- r! t1 x  m/ C( p! h: V/ v" @- @9 a; H" p. F
    . r# ^# v  e( p0 K
    StandardScaler
    1 V0 p9 {! F/ gStandardization即标准化,StandardScaler的归一化方式是用每个特征减去列均值,再除以列标准差。归一化后,矩阵每列的均值为0,标准差为1,形如标准正态分布(高斯分布)。 通过计算训练集的平均值和标准差,以便测试数据集使用相同的变换。(在numpy中,有std()函数用于计算标准差)
    ( p' M. u. {7 M/ O+ O, X4 T( k+ s# T# l5 a' n" Q
    from sklearn.preprocessing import StandardScaler' O3 v! H! @2 E) h# ]
    x=[[10001,2],[16020,4],[12008,6],[13131,8]]% u/ Y% N2 d5 Q/ h
    X_scaler = StandardScaler()5 B' x: W6 v  ^8 s* l
    X_train = X_scaler.fit_transform(x)
    / ^  L( q# W4 j' _X_train, V3 L% m& v; K. M2 g: x
    #结果如下
    ; L' V- ]( `7 P) l+ `5 Iarray([[-1.2817325 , -1.34164079],$ q8 T3 p8 s  q. q* N8 _
           [ 1.48440157, -0.4472136 ],0 x- M9 T! E" b9 {  f
           [-0.35938143,  0.4472136 ],
      o" c& _1 q! x3 J, l. }+ |1 ~       [ 0.15671236,  1.34164079]])
    ' V3 h' j- W4 j$ \! z
      G& ?7 i8 y$ v( m- L- f9 O9 ^7 w2 q! L$ m3 ~
    3 \$ M1 s2 u+ I, u; }

    注 :

    • 若设置with_mean=False 或者 with_std=False,则不做centering 或者scaling处理。
    • scale和StandardScaler可以用于回归模型中的目标值处理。. e2 D/ ]& P, T1 |% u* Z3 q* V
    from sklearn.preprocessing import StandardScaler' O1 P$ H4 @1 q5 \
    x=[[10001,2],[16020,4],[12008,6],[13131,8]]6 A) t- X6 t# X5 B6 L
    X_scaler = StandardScaler()
    % J3 I5 ~! {, E! jX_train = X_scaler.fit_transform(x)+ B# `. Z5 H1 M/ C/ b5 p1 Q5 X
    X_train
    , d+ A4 r& b' b8 n#结果如下7 Q) U' w; p2 N0 \) S" Q" J
    array([[-1.2817325 , -1.34164079],
    6 E$ [. B- l3 ]/ U       [ 1.48440157, -0.4472136 ],
      j, q) k" m9 ?, w# e       [-0.35938143,  0.4472136 ],4 ~0 Y# n( K, x( b. ^* ]( g
           [ 0.15671236,  1.34164079]])+ p- k3 m9 `( @, P% V  E

    ' d* V2 e( q  jscaler = preprocessing.StandardScaler().fit(X) #out: StandardScaler(copy=True, with_mean=True, with_std=True)
    , L) {( ]! e5 ?' o3 r, r% O. N' bscaler.mean_  #out: array([ 1.,  0. ,  0.33333333])  2 p( u% l4 b1 E8 G" `
    scaler.std_ #out: array([ 0.81649658,  0.81649658,  1.24721913]) 9 X7 f' Z% ~$ n; g+ k! }/ a
    #测试将该scaler用于输入数据,变换之后得到的结果同上8 T8 s! Z! S* \  S& M& A: f- z. ?
    scaler.transform(X)
    3 Z. r/ J* f: ~! k5 ]#out: # e9 ^$ H4 Y5 E! J9 _
    array([[ 0., -1.22474487,  1.33630621],
    7 A* [; `+ u- b+ C. V       [ 1.22474487, 0. , -0.26726124], . [1 \  h5 i$ M% e: q, Z/ O$ D1 h
           [-1.22474487,1.22474487, -1.06904497]])  - _1 H+ Y- V7 R7 U* l
    scaler.transform([[-1., 1., 0.]])  #scale the new data
    2 w. @* C* U+ g# out: array([[-2.44948974,  1.22474487, -0.26726124]])0 y6 O& l! \  R6 C# K& G  c
    + H. @& `# G$ \  z8 s, w
    2 将数据特征缩放至某一范围(scalingfeatures to a range): H- ]9 t% P$ v( h

    ' Q' F* B, k5 I; |; c+ w
    + Y0 W& p& N3 W; d/ @! |2 |
    2.1 MinMaxScaler (最小最大值标准化)8 r4 F+ S" W" k3 u. [
    它默认将每种特征的值都归一化到[0,1]之间,归一化后的数值大小范围是可调的(根据MinMaxScaler的参数feature_range调整)。  ; ^& k- b9 ?2 j  g  r
    6 a9 P" _( {  M! J8 r2 u
    from sklearn.preprocessing import MinMaxScaler/ p4 E( N9 |3 S5 w* a7 v9 M) |7 Q6 K
    x=[[10001,2],[16020,4],[12008,6],[13131,8]]
    , U# Z5 `4 L/ {6 ?min_max_scaler = MinMaxScaler(). W4 o' |2 H( l  }  @
    X_train_minmax = min_max_scaler.fit_transform(x) #归一化后的结果,
    * G# |9 k1 N0 E, o* Q4 c/ W' q8 L- d% U5 V# \) g4 V4 b7 R
    min_max_scaler = MinMaxScaler(feature_range=(-1,1))
    2 t! e8 j5 _0 n7 UX_train_minmax = min_max_scaler.fit_transform(x) #归一化到(-1,1)上的结果$ e% `) M3 k  Q2 f4 F) Y8 p

    % t' W+ |- B% T! u2 b9 KMinMaxScaler的实现
    2 M5 C+ {3 V. w/ m' M, K, _X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))
    " Q9 [, K, i) K1 o/ c& KX_scaled = X_std / (max - min) + min
    ! g9 `7 P8 D4 k& H& U1 e& d7 L7 J1 k/ P
    这是 向量化的表达方式,说明X是矩阵,其中/ D3 U- p0 \, D- Q# F( [

    ! m; t# X; j2 M. S- k  UX_std:将X归一化到[0,1]之间
    0 X2 |" b' G( q: j+ FX.min(axis=0)表示列最小值- |. g# R4 z. `: _. m5 H; d
    max,min表示MinMaxScaler的参数feature_range参数。即最终结果的大小范围
    . p5 y( T7 W2 e
    : j+ o& M- I& f) Y4 @. q1 O) e* |6 g; ~1 Z* }4 J! w6 q
    2.2 MaxAbsScaler(绝对值最大标准化)
    $ u# f! Y: `, i% Q) H0 |( p- U' t         与上述标准化方法相似,但是它通过除以最大值将训练集缩放至[-1,1]。这意味着数据已经以0为中心或者是含有非常非常多0的稀疏数据。* R! {5 k% d8 t6 T0 Q1 @
    2 t" X$ j$ k- o$ x$ M' Y
    X_train = np.array([[ 1., -1.,  2.],1 m% Z; {, V% o8 v8 a$ p! i5 Z
                         [ 2.,  0.,  0.],
    2 x3 N- t1 \  W                    [ 0.,  1., -1.]])1 t! c7 k- l9 N+ x' [
    max_abs_scaler = preprocessing.MaxAbsScaler()
    7 O- q/ f6 E# Z' e0 qX_train_maxabs = max_abs_scaler.fit_transform(X_train)
    % `' ?8 [- i# `' o* j: H" ?( P* Z# doctest +NORMALIZE_WHITESPACE^, out: array([[ 0.5, -1.,  1. ], [ 1. , 0. ,  0. ],       [ 0. ,  1. , -0.5]])
    4 ]7 y) M: Z- `" t" u+ @+ HX_test = np.array([[ -3., -1.,  4.]])3 U5 E4 K- t1 @& P4 {
    X_test_maxabs = max_abs_scaler.transform(X_test) #out: array([[-1.5, -1. ,  2. ]])
    ; d+ _0 v9 `/ i, a  Z$ Lmax_abs_scaler.scale_  #out: array([ 2.,  1.,  2.])
    6 W- T1 X) x+ E7 C
    : `* \: N2 o0 h+ A
    / M: r) O' F/ Y6 c9 g
    # O' Q/ g; R) _% t8 f4 Q) |, \( N! p, q1 I& e* Y
    ( y& I. T6 H0 h: ~1 A' n  N9 [
    2 I" {, N; K  ?+ R3 e$ M, N

    9 g9 A4 ]8 _; e4 s2 f8 ]
    ; o+ v9 j. }, r- t' ~( t1 y: Y# s1 |# P

    + T9 c* M3 N! V. m————————————————
    1 B, j+ b6 O- x1 g版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。( }: F" h$ e# k% m
    原文链接:https://blog.csdn.net/qq_29831163/article/details/89420223
    % {  L# y: @- p$ u0 N1 j6 k
    8 b. ~( {: `9 n  a+ R$ a1 F
    6 f+ g; U- ~$ F9 \3 Q& u% L
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-6-16 09:37 , Processed in 0.420711 second(s), 51 queries .

    回顶部