QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1991|回复: 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。! p( Q6 K* n# z+ d

    ) `+ J. s% a. t) W. d. Z  o1 w当我们需要将特征值都归一化为某个范围[a,b]时,选 MinMaxScaler7 D2 n2 n2 I; B% F* Q: r' W
    当我们需要归一化后的特征值均值为0,标准差为1,选 StandardScaler
    - x  [8 G% n$ K- u. w+ C数据变换的目的:
    ( ?, \, r) p" h5 K$ Z  对收集来的原始数据必须进行数据变换和处理,主要是为了消除量纲,使其具有可比性。; m0 c+ O5 f; p' q& t
    $ w. s8 ^8 g. n& N2 a. F$ ]: C
    定义 : 设有n个数据的序列  ,则称映射
    0 n, Z6 h* G% m+ Y9 c4 l
    # I5 P3 J# Q- L+ T3 F! H- [                                        1 @7 E; p8 y- w1 k* `6 n: j

    % t5 Y! F4 y9 C. N- h          为序列 x到序列 y 的数据变换。 3 L4 [; s  u# G& T' m, U. q

    3 e% y4 K. E$ E# s, z数据变换的七种常见方式
    5 j" d' G/ ^  E' s) x. d此处是对同一维度上的各个数据进行变换,如果数据有多个维度/属性,那就拆开来一个属性属性地变换,写成矩阵形式时,它也是分别对各维度进行操作。. b3 j2 y5 y9 Z: t5 U1 b, ^

    # G5 [" d4 Y! W- j8 O  Z2 d初值化变换, {* s! r: r9 h
    0 R, o) D! Z/ s9 f  a( y8 H
    9 w8 J" V0 j) f! F0 [9 Q8 y
    也就是要对每一个数据,都除以第一个数据。9 \# V% ^9 z1 g& v, c! J' `

    % o' G$ V7 }1 c; |, r, |均值化变换
    4 j( b* V5 S1 `1 |3 P4 L+ P9 Q. g# j4 Z8 R) t/ {) [5 J' t
    : J, s: t, D# J' x+ e" U
                 对每一个数据,都除以均值。
    ' ?& n9 k- J6 A' K
    4 c" J; f! O/ d0 u2 e5 G1 L1 C/ \百分比变换
    5 W/ w- n7 Q# q& j
    4 T% F9 U) _  w& p8 S2 i4 d
    4 z- j! O- _. W" k分母为x的该列属性中,值最大的那一个,使得变换后的值的绝对值,在[0,1]之间。
    % |% B  u8 X$ E  b
    " R4 s8 W; z! ~% x1 S% E  M倍数变换
    + t6 \# O: |9 N' d& K, g9 |    ; E/ W$ g- D+ P8 A4 d& P6 W

    0 H4 q2 g, h! o+ Z7 R- n归一化变换/ B; s+ g% u: v: r2 L. U1 {

    3 o8 ^* L7 V1 X5 Z: C; N
    % N0 w1 Y( r! H) |. i0 J2 ], x 其中   为大于零的某个值,称  是归一化变换。
    : n/ k* Q, ?+ r1 J, A
    6 y" C5 \$ \# J# _+ ]
    / g* q4 p+ T4 k5 Z* |极差最大值化变换- U/ F$ Q9 U+ x

    + Z# H+ _. f; y& J8 m( t$ \* a: }, ^( t

    7 S1 g1 x0 {8 d( D( c) p3 i5 T1 G# _8 r" N; V4 v) @
    区间值化变换
    5 `" f# B6 }0 F& j! v
    / [+ A! l' `  U( |7 O' J' V) V8 L8 X( ]/ H: t) c% e
                      ,* Q& M0 H- j8 I
    ! f& V( @0 N5 x/ d7 H
    1. matlab 的mapminmax归一化函数) \) C0 i2 g' Q2 b
    函数用法:
    7 _/ i: ^- [5 b8 X+ [, _; z8 }6 E [Xn,Xps]=mapminmax(X,min,max)
    ( k7 U* q: t/ Y3 H. L0 T. V
    , ?3 b8 _1 W, B4 _) _说明:(1)该函数将X按行归一化,即计算某元素的归一化值时,最大最小值时该元素所处行的最大最小值;因此若只有一组观测时,X需是1*N的行向量。
    9 A* e# z2 N$ Y& L% n
    3 L4 Q2 K' q" N; b3 z   (2)min,max规定X的归一化范围,根据需要自行设置2 H. S( a/ b1 z2 k+ V
    / l( g. [/ A; H8 T6 ?+ \, v
       (3)ps是结构变量记录了归一化时的最大值最小值等参数,后续可重复调用     $ o8 i% Q% A! m4 O3 i
    5 g, o$ ~+ P( j+ e4 G# t* b+ Z
     调用方法:/ x2 Q9 W' e# d  ?/ \
    - u# i# T2 [8 q. w4 y* m; z
    X1=mapminmax('apply', X_new,Xps);%利用先前的结构Xps进行相同的归一化
    % E6 Y5 K6 H! R; F+ w7 w0 C4 n0 g2 e0 G
    X2=mapminmax('reverse',Xn, Xps);%反归一化
    , E& N0 a, j& |: L( l
    1 I  s' B8 z% r: X* A, Lx=[1,-1,2;   2,0,0;   0,1,-1]
    - v' n! y% E/ C- g9 x$ M[x1,Xps]=mapminmax(x,0,1)
    ; ?' Z9 Q9 [) i7 o7 t2 P- x) V( a- E' m" P7 Z7 m. h9 k

    - D7 t+ w5 H: `9 c4 f. Y  ?
    * t8 k; t- i3 g9 _$ f3 s对于python中的axis=0 和axis=1的问题+ _# c. c5 \: n- D0 |0 S
    如df.mean其实是在每一行上取所有列的均值,而不是保留每一列的均值。也许简单的来记就是axis=0代表往跨行(down),而axis=1代表跨列(across),作为方法动作的副词(译者注)& u  S9 V$ ?" o! }
    换句话说:* h7 b  N4 F3 p; U. o8 ~3 v
    ' S% K+ L7 D- x$ t% \) [' W& G; E
    使用0值表示沿着每一列或行标签\索引值向下执行方法
    4 ^3 \% n; J( C, c% `( V: Y使用1值表示沿着每一行或者列标签模向执行对应的方法
    0 C& i# g: r' r- c5 U; @
    1 x8 b( E) G2 v1 R2 C2 p
    ) A* |  v& H7 W9 ]) ?  `) z" e; `& \. u1 W. q( Z2 i* i# s
    python的sklearn中 scale函数
    ; b: s5 o' w* b4 u1 标准化,均值去除和按方差比例缩放
    0 `" A& ?2 v2 A6 X9 G              (Standardization, or mean removal and variance scaling)
    2 i+ [  x1 }9 R/ _+ L3 \, ?3 i
    3 z' z* J7 X9 A4 q; M  数据集的标准化:当个体特征太过或明显不遵从高斯正态分布时,标准化表现的效果较差。实际操作中,经常忽略特征数据的分布形状,移除每个特征均值,划分离散特征的标准差,从而等级化,进而实现数据中心化。+ f8 C* e' _7 Q& H! D* d1 a3 |

    0 V7 f# Y5 G$ Q* dfrom sklearn import preprocessing - E- D6 X9 L/ B  s
    import numpy as np  
    2 P* M% {1 h  ^! cX = np.array([[1., -1., 2.], [2., 0., 0.], [0., 1., -1.]])  , z# n6 Q! r% N7 ~4 [7 \
    X_scaled = preprocessing.scale(X) & n, t1 M: t% \1 M2 V
    ' s( [0 A% {6 j) I( _7 ~* a
    #output :X_scaled = [[ 0.         -1.22474487  1.33630621], d( D# d! c# T/ U  _
                                     [ 1.22474487  0.         -0.26726124]
    $ \3 ?/ y) o: b! |2 d) Z3 }! W                                  [-1.22474487  1.22474487 -1.06904497]]1 w2 R% ]; m. r1 G7 @- b+ `
    #scaled之后的数据列为零均值,单位方差+ s* L/ f0 _. [6 l$ S
    X_scaled.mean(axis=0)  # column mean: array([ 0.,  0.,  0.])  
    2 Q, S, [. G( e6 U7 CX_scaled.std(axis=0)  #column standard deviation: array([ 1.,  1.,  1.]). P$ t4 S/ L7 H8 r0 N% F7 @9 Z+ s9 B
    . E$ @4 t2 T$ {: Q' I  n

    ' k6 j4 i2 d# d4 a5 k/ b& O! n( J; k! Q5 a8 n
    StandardScaler
    # r3 X1 ^- t( ]* fStandardization即标准化,StandardScaler的归一化方式是用每个特征减去列均值,再除以列标准差。归一化后,矩阵每列的均值为0,标准差为1,形如标准正态分布(高斯分布)。 通过计算训练集的平均值和标准差,以便测试数据集使用相同的变换。(在numpy中,有std()函数用于计算标准差)
    3 `  j- D, ^: r
    ( O8 L9 K5 b. _& Q- P4 Ffrom sklearn.preprocessing import StandardScaler
    ' L0 S; Z8 Y) Px=[[10001,2],[16020,4],[12008,6],[13131,8]]; ]( x( o7 H$ j; M3 x% c3 ~9 a1 X
    X_scaler = StandardScaler()8 U, ~; r( X4 d% E* `
    X_train = X_scaler.fit_transform(x)
    , A% j) u' ?, d" s& h& O; e9 @X_train
    1 S7 g4 X* {9 r: s#结果如下
    ' i, [/ I% s/ A4 larray([[-1.2817325 , -1.34164079],
    ' s$ B* @7 b; {* `+ C( T       [ 1.48440157, -0.4472136 ],
    ) Y" J) O# \. h* G" X- L1 \       [-0.35938143,  0.4472136 ],
    4 ]2 n0 \+ \2 Q. a       [ 0.15671236,  1.34164079]])
    , H+ _' k( D$ @; Z4 p9 j; @( N2 |* Y: E
    + y! e+ q# c, g# n+ {
    7 y. h. H& |1 }8 i# e6 ~+ e) z$ R* \' H4 j( ~* ^3 d  T& u" `: Q

    注 :

    • 若设置with_mean=False 或者 with_std=False,则不做centering 或者scaling处理。
    • scale和StandardScaler可以用于回归模型中的目标值处理。8 ^! q" @  ~5 J, f, d/ y7 L
    from sklearn.preprocessing import StandardScaler
    2 X! ^0 F- N7 S/ a; ex=[[10001,2],[16020,4],[12008,6],[13131,8]]9 |' Z3 r0 a: w; [* U6 v( G
    X_scaler = StandardScaler()+ H  ?" i/ W( ]; a% z% t( o, `
    X_train = X_scaler.fit_transform(x)% `3 N2 t4 v8 G* T; B3 R* u
    X_train
    / R$ Q2 P9 B2 J* d) t) f1 J#结果如下0 t. H" ]6 B6 S( I( |
    array([[-1.2817325 , -1.34164079],3 |1 P+ o6 `/ y1 D- ?5 i
           [ 1.48440157, -0.4472136 ],
    ( ]# [  U+ E8 }4 I9 X3 q       [-0.35938143,  0.4472136 ],
    2 s2 A4 b, d& I- w! _# V       [ 0.15671236,  1.34164079]])1 Y8 d9 q& H. i( D" W/ z# U
    0 w+ W" U, b' g3 }
    scaler = preprocessing.StandardScaler().fit(X) #out: StandardScaler(copy=True, with_mean=True, with_std=True), t* `  O( j: x2 t8 R# j. B, G
    scaler.mean_  #out: array([ 1.,  0. ,  0.33333333])  
    ' h/ c- w' V- C/ ascaler.std_ #out: array([ 0.81649658,  0.81649658,  1.24721913])
    7 x$ f3 b6 [, U# v#测试将该scaler用于输入数据,变换之后得到的结果同上6 z5 b7 g! z& _& g
    scaler.transform(X)
    # r& u8 a1 {. q: U. u+ m2 S9 h#out:
    1 R# D' m/ B& d5 E, B* d  Earray([[ 0., -1.22474487,  1.33630621],
    + B, H! G- T, E& b- S4 x4 Q       [ 1.22474487, 0. , -0.26726124],
    , Q: X4 k8 \% d2 F, |4 c, @: f       [-1.22474487,1.22474487, -1.06904497]])  
    # E+ e- r5 W$ s8 ~; w" w1 o( y# L9 cscaler.transform([[-1., 1., 0.]])  #scale the new data. M4 C7 N! k; Q7 a( m. ^5 P! v  g
    # out: array([[-2.44948974,  1.22474487, -0.26726124]])$ L- N4 I( e8 z& ?" o' J) C

    ) F6 t$ \8 e" y8 k2 将数据特征缩放至某一范围(scalingfeatures to a range)
    0 Y+ U6 M3 e6 M2 C& e6 q( m) ` " X; z- H& j/ L/ v! V  \  ~
    $ M' I# e, Q2 e2 P! P
    2.1 MinMaxScaler (最小最大值标准化)/ ^# m$ T0 t3 q+ d" Z  q
    它默认将每种特征的值都归一化到[0,1]之间,归一化后的数值大小范围是可调的(根据MinMaxScaler的参数feature_range调整)。  
    ! N9 [; h  W: U7 i3 j# }2 E/ b
    2 _) X" @7 x+ h/ _* J  ~" r; d& U: Kfrom sklearn.preprocessing import MinMaxScaler# S) @) X' o- z* K2 n9 L
    x=[[10001,2],[16020,4],[12008,6],[13131,8]]
    7 B" g/ H8 x& N$ Q4 [( h3 n6 W6 I1 fmin_max_scaler = MinMaxScaler()
    ) o* [8 ?; Z$ f7 K8 x5 ?# ~4 ^X_train_minmax = min_max_scaler.fit_transform(x) #归一化后的结果,! Y" s- R" p. ~6 n

    $ s" V  C: P1 P' d% m, X0 ~min_max_scaler = MinMaxScaler(feature_range=(-1,1)). a2 M+ i8 B6 j0 b
    X_train_minmax = min_max_scaler.fit_transform(x) #归一化到(-1,1)上的结果
    $ {' T+ D9 s( i. L
    " c4 ~! U6 ^5 Z& m9 f" i3 YMinMaxScaler的实现
    3 U# g1 O' u, [- h7 BX_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))9 _) X3 t1 W" ~% Y# Q6 E4 N
    X_scaled = X_std / (max - min) + min2 A# V9 a) B& z$ s: O

    + I7 S/ J; w. B# c这是 向量化的表达方式,说明X是矩阵,其中
    7 w& m& r8 x; s  S* {
      d3 o+ @0 K6 D  W  D  YX_std:将X归一化到[0,1]之间6 {1 o; x) U" c1 y3 p
    X.min(axis=0)表示列最小值* }( s, T, {# \: F4 z5 A, X0 e5 \9 e
    max,min表示MinMaxScaler的参数feature_range参数。即最终结果的大小范围4 H% v9 _7 C/ X4 d. H% u/ r1 o

    ! o: I1 z+ T: Z# p5 l4 r# H  d( N3 S; Y" U; M5 S. R* x9 r% @
    2.2 MaxAbsScaler(绝对值最大标准化)4 h, ~# X4 ?' h/ a" N- |% Y
             与上述标准化方法相似,但是它通过除以最大值将训练集缩放至[-1,1]。这意味着数据已经以0为中心或者是含有非常非常多0的稀疏数据。+ P* O5 J/ P) [. }: J- b; S: c
    $ P+ j1 |+ K; t2 V: Q' E4 C* W
    X_train = np.array([[ 1., -1.,  2.],
    1 d5 _9 X4 j0 A# j+ }- n% f                     [ 2.,  0.,  0.],* C$ L6 Z  Y2 {0 n$ B+ v' T
                        [ 0.,  1., -1.]])
    - \3 U3 M2 F. O" n7 Z. G+ jmax_abs_scaler = preprocessing.MaxAbsScaler()% y2 z- U: G- @- z- `
    X_train_maxabs = max_abs_scaler.fit_transform(X_train)
    9 d1 C* }- Y1 ?# doctest +NORMALIZE_WHITESPACE^, out: array([[ 0.5, -1.,  1. ], [ 1. , 0. ,  0. ],       [ 0. ,  1. , -0.5]])" M, K# ]: Z7 _+ t7 \6 S
    X_test = np.array([[ -3., -1.,  4.]])
    - a$ f4 S0 h+ q- W0 p1 K6 R/ ZX_test_maxabs = max_abs_scaler.transform(X_test) #out: array([[-1.5, -1. ,  2. ]])+ `2 \) Q1 R8 j
    max_abs_scaler.scale_  #out: array([ 2.,  1.,  2.])
    7 q2 t' A7 D# b( R. m1 B  l& K4 G! U0 q) X4 Z
    / z# _. g+ A1 N9 u% v

    7 L; i; N5 F: [) |( r4 S* m; t0 E. \  O
    , S1 S2 P: `5 |/ {, ?% \
    % q' d! Q( A2 L
    * G9 P: M6 _' {0 {3 e( K
    $ H! Z" q8 a. g' t/ R- k( L
    % n4 A% F  ~0 C# m! X

    / ?0 U9 s/ Z; G- O: {————————————————3 Z0 [" R+ E5 J( G, f2 X
    版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
      ]5 d8 d6 H$ \6 g4 \5 t: a原文链接:https://blog.csdn.net/qq_29831163/article/details/89420223' w. D- w8 k: t( V
    : y9 R, ?  B9 s3 `, L! Y2 u
    # m7 u  ~" I: Z) k" t
    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-12 07:39 , Processed in 0.394901 second(s), 50 queries .

    回顶部