QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1704|回复: 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。& W+ `5 w% D. q& j1 Q
    ; `8 f$ _% j  {+ O# |
    当我们需要将特征值都归一化为某个范围[a,b]时,选 MinMaxScaler
    % y+ N# m. m6 G# I3 l当我们需要归一化后的特征值均值为0,标准差为1,选 StandardScaler3 l1 f, a) q1 X: s+ F( E0 q
    数据变换的目的:, t1 G. i6 @: j7 ^1 k
      对收集来的原始数据必须进行数据变换和处理,主要是为了消除量纲,使其具有可比性。- D: [5 T8 ^" d1 Y6 C6 d  o

    $ u* y; K) p, D! z5 b( H 定义 : 设有n个数据的序列  ,则称映射6 i) G, P2 G9 F/ z" }; H( |! |

    + M% h# c# q# K                                        4 m1 A$ T" D! M

    ; i6 j7 n+ H5 c8 c. ^7 y% I* H: S          为序列 x到序列 y 的数据变换。
      Y: i4 L' W5 ]5 X# K6 ~( B
      o9 Y, [$ \0 g数据变换的七种常见方式
    ! ~6 \$ r; }7 G; u此处是对同一维度上的各个数据进行变换,如果数据有多个维度/属性,那就拆开来一个属性属性地变换,写成矩阵形式时,它也是分别对各维度进行操作。
    ; {- a2 \+ ^- P. }) x. N* \: l/ ]9 y2 N. j- z- o
    初值化变换
    . P0 Y- s. D( _2 G& @) i0 |/ x! ^( h5 \+ h8 H+ P; r8 A+ x- r0 v
    / ?+ c$ E: O* W5 K
    也就是要对每一个数据,都除以第一个数据。
    8 h: G2 }4 j2 }; k
    $ ?+ ]8 t8 X8 [5 |$ i& v均值化变换2 r( H, b2 E; R& b) l

    5 Y) u- h5 |* f4 I/ [% U. J
    / k: h+ L  A+ b) |; f% I             对每一个数据,都除以均值。
    6 s/ Z# v8 v! u* {! T- U$ {8 e/ H. l) n- ]3 u6 Q
    百分比变换: _1 p5 F  F/ Q4 f: F" R7 X% n
    7 g: y4 C" J/ j6 z& Y, }9 X

    ! g; X8 m3 X. y# d1 b; D7 R; _分母为x的该列属性中,值最大的那一个,使得变换后的值的绝对值,在[0,1]之间。
    $ z1 q$ v# B4 v& p- r  r. {: K$ P; g0 c: x6 B. s" D
    倍数变换
    * N' S: u( b* R; a   
    8 F; _" I. B: i. Y, `: T0 h) w+ g9 z3 f4 P: d, `7 Y
    归一化变换  D9 R9 `  o# F. N+ J
    * Q( v. T$ g3 T4 Z- ~. s6 S0 t" \
    - ^" S5 j) z+ d6 F/ w
    其中   为大于零的某个值,称  是归一化变换。
    $ t9 |4 {* X9 C! z, T
    . j) B6 _  Y9 a4 r
    * y3 l+ o6 j! d- A极差最大值化变换0 P" }( ~4 d7 f& C
    3 T9 s% r  w+ W) @: M
    $ S) \0 C# r: U1 Z* r6 g( G
    6 q2 i- @4 {  t

    ! D! {8 c4 v6 }. e& g- u9 ~6 X区间值化变换) N+ X$ p8 k* s6 \! P/ v
    % x" {% y" p# e

    ' B! }: E1 a3 m" B- N- V0 D                  ,
    $ t" g% u* |7 p; Q/ A7 {/ ]) l& ]0 Y* ]& {7 V2 a
    1. matlab 的mapminmax归一化函数
    - p! [- G$ j4 I5 ?4 f' H函数用法:
    : z! {' T! a4 ^9 f [Xn,Xps]=mapminmax(X,min,max)
      u  U  V1 R; v) u; h) P$ S$ O/ N0 T$ l* C3 R/ k
    说明:(1)该函数将X按行归一化,即计算某元素的归一化值时,最大最小值时该元素所处行的最大最小值;因此若只有一组观测时,X需是1*N的行向量。! B0 y' C" e7 S. P9 w

    " S, [% x  f+ i7 ~   (2)min,max规定X的归一化范围,根据需要自行设置( M; i  X8 \/ l: w
      E+ |) G7 e4 d5 w; S: p" n' U6 k( \
       (3)ps是结构变量记录了归一化时的最大值最小值等参数,后续可重复调用     
    $ v% W# q2 w7 C' w# ?/ V9 w/ z$ a
    ! X2 l9 R/ D/ ]2 K) g: s; r  Q 调用方法:
    * ^3 _3 s' S  r# c# K. d. I
    / v0 t8 o& ]: A& ^X1=mapminmax('apply', X_new,Xps);%利用先前的结构Xps进行相同的归一化
    8 ^" b4 V2 n1 [* Y5 V, i. R5 n$ D: @8 c
    X2=mapminmax('reverse',Xn, Xps);%反归一化+ v- d4 Z/ W' x
    ; B7 f! W" G# P' I; l
    x=[1,-1,2;   2,0,0;   0,1,-1]- g, g1 ]  h2 p. b
    [x1,Xps]=mapminmax(x,0,1)9 O& X1 o* I5 L$ Z4 G

    6 P; N0 m  X9 Y  Y3 h# k+ |* {) f8 ^  B) |! D* d1 v9 S

    ( a1 a( T9 W; p/ ~/ B- n对于python中的axis=0 和axis=1的问题+ o8 ^6 Z6 a) q7 U
    如df.mean其实是在每一行上取所有列的均值,而不是保留每一列的均值。也许简单的来记就是axis=0代表往跨行(down),而axis=1代表跨列(across),作为方法动作的副词(译者注)
    5 t) B+ a# a/ @6 I% P# m6 n. f换句话说:
    4 U! B; z  r5 _! D+ w; g0 a( n; e& @  a8 `- s7 L
    使用0值表示沿着每一列或行标签\索引值向下执行方法
    % ]" y/ X' H  V" \8 @& p使用1值表示沿着每一行或者列标签模向执行对应的方法
    % Q. Y" v2 E  [. n0 z& U; p3 v3 S8 g' A5 ^- \

    . D( W; U4 B- {6 k) R$ }
    2 e1 l% n% ]1 U- Z8 tpython的sklearn中 scale函数) ]. `# I9 l( p0 {+ T" z( z0 k
    1 标准化,均值去除和按方差比例缩放
    8 k8 q$ j" G' j/ J4 H              (Standardization, or mean removal and variance scaling)
    . ~, C& t* ]$ J; I0 G6 F) L% O, {0 _. l+ A8 E$ R
      数据集的标准化:当个体特征太过或明显不遵从高斯正态分布时,标准化表现的效果较差。实际操作中,经常忽略特征数据的分布形状,移除每个特征均值,划分离散特征的标准差,从而等级化,进而实现数据中心化。
    * A5 m0 `6 ^% X, p- d$ U, C. U0 L1 w7 K. J) T3 y$ [
    from sklearn import preprocessing
    2 _1 D+ }- H# B" ?) |: B- j: Vimport numpy as np  , K( P" Z# D; m* y+ e0 N
    X = np.array([[1., -1., 2.], [2., 0., 0.], [0., 1., -1.]])  
    ' ]" \4 F% o# y9 ]X_scaled = preprocessing.scale(X) 7 D5 T# \8 V* _" P$ Z

    4 Y/ r0 x2 C  ?/ h; C' \# {% _#output :X_scaled = [[ 0.         -1.22474487  1.33630621]9 t3 M/ S# E; _' A
                                     [ 1.22474487  0.         -0.26726124]/ m! t( o' v& a! K
                                     [-1.22474487  1.22474487 -1.06904497]]
    ( T% M6 I( }- E2 \#scaled之后的数据列为零均值,单位方差
    4 @3 U/ K% N1 u. h  _/ y9 r% ^& cX_scaled.mean(axis=0)  # column mean: array([ 0.,  0.,  0.])  
    ; D( o' R, t, k  A8 {6 d* d" S3 W8 HX_scaled.std(axis=0)  #column standard deviation: array([ 1.,  1.,  1.])
    8 a3 Y# h  U! y6 K/ _
    + h' r2 F" {. ~1 _: b5 H: c
    . g8 V  J3 |' e% o) n( y: ~
    4 E! T" p  Q0 Q9 n- g( PStandardScaler
    7 R0 z- u: }  K5 zStandardization即标准化,StandardScaler的归一化方式是用每个特征减去列均值,再除以列标准差。归一化后,矩阵每列的均值为0,标准差为1,形如标准正态分布(高斯分布)。 通过计算训练集的平均值和标准差,以便测试数据集使用相同的变换。(在numpy中,有std()函数用于计算标准差)8 I5 ^# m( ^! p" u: z, l4 M' u, @
    ; R4 B) p1 E/ P0 i6 z  ^
    from sklearn.preprocessing import StandardScaler! z+ G9 w! o' C: n' P: N
    x=[[10001,2],[16020,4],[12008,6],[13131,8]]5 }& g+ p' e9 W" n
    X_scaler = StandardScaler()' H* P% @& C  |0 E) {( N- T$ v$ K' m
    X_train = X_scaler.fit_transform(x)
    ) e" V6 Y; M# a# c! g( j' d3 JX_train
    3 M+ `: G5 n6 G0 x#结果如下
    - u/ z5 j8 s1 w* U- Warray([[-1.2817325 , -1.34164079],
    ' f4 u5 B4 u9 P       [ 1.48440157, -0.4472136 ],
    + ^4 d# T! O$ `% n: e7 Q       [-0.35938143,  0.4472136 ],
    , ^( Y; L- {; }! i) o  _! f       [ 0.15671236,  1.34164079]])
    , X# o! C1 ?. y, s( J2 v- L8 X
    1 f3 J& S* x3 ]3 I. d& }# h& n$ ~, g6 `1 P6 h2 m( }! v5 D, g* U9 b
    3 r! k2 E: W6 Y) X

    注 :

    • 若设置with_mean=False 或者 with_std=False,则不做centering 或者scaling处理。
    • scale和StandardScaler可以用于回归模型中的目标值处理。7 {+ L6 k* `7 Y: G5 n8 w2 D9 h4 z
    from sklearn.preprocessing import StandardScaler
    ! J; z9 U- w% g$ Sx=[[10001,2],[16020,4],[12008,6],[13131,8]]
    & \; L( s+ Z, p- l0 RX_scaler = StandardScaler()
    , Y# S% B1 g. R; a+ ?: Q& SX_train = X_scaler.fit_transform(x): x7 G( ]9 D2 m/ L
    X_train0 Q4 V) m4 Y) q
    #结果如下
    . w( e  M6 T) a; U6 Earray([[-1.2817325 , -1.34164079],( O. M% c. \7 [. M
           [ 1.48440157, -0.4472136 ],
    1 R  F! O  g% k  u( U' B' O& G       [-0.35938143,  0.4472136 ],
    ' U! [6 \( V* m4 U" i       [ 0.15671236,  1.34164079]])
    , u0 i# v( K* ^5 R4 |% q: D  _% D- b7 n' c3 V  k
    scaler = preprocessing.StandardScaler().fit(X) #out: StandardScaler(copy=True, with_mean=True, with_std=True)
    ) z& j/ P; U3 H5 D# L0 ~% Q2 J5 jscaler.mean_  #out: array([ 1.,  0. ,  0.33333333])  1 E5 P' |8 o" x. ?9 p; W
    scaler.std_ #out: array([ 0.81649658,  0.81649658,  1.24721913]) 1 T( A9 p+ \" r) ?/ L* s9 P
    #测试将该scaler用于输入数据,变换之后得到的结果同上
      _6 J' m% c6 O& s3 ~/ hscaler.transform(X) / f% F) d- {/ T) o$ f8 j. s# X
    #out:
    / o. u" w+ i! o  parray([[ 0., -1.22474487,  1.33630621], / [' n- x  ]' E% d3 w: Q
           [ 1.22474487, 0. , -0.26726124], ! t8 }. M9 u4 y! K/ \
           [-1.22474487,1.22474487, -1.06904497]])  
    8 a4 i& U. @0 [& q: qscaler.transform([[-1., 1., 0.]])  #scale the new data
    5 Y8 O% Z- {2 e) W- a# out: array([[-2.44948974,  1.22474487, -0.26726124]])5 l4 R  [& a! [5 ^# n) j0 v) l% C

    ' E: m7 s* ^. n  C. {  Z2 将数据特征缩放至某一范围(scalingfeatures to a range)/ U6 v8 g& O1 h
    ) S* m$ p& B9 Y5 f

    4 X. h: X, v7 n$ h# W9 X2.1 MinMaxScaler (最小最大值标准化)0 H4 _0 {- D! h& f. e
    它默认将每种特征的值都归一化到[0,1]之间,归一化后的数值大小范围是可调的(根据MinMaxScaler的参数feature_range调整)。  
    + H) P* |0 I6 Y; g  S3 P; u" ]" f3 K- z" j0 h" z' V
    from sklearn.preprocessing import MinMaxScaler
    * K2 x5 m0 E3 Y9 _9 Q# d% S& Ax=[[10001,2],[16020,4],[12008,6],[13131,8]]7 Z% W- ~( o2 F7 c$ R
    min_max_scaler = MinMaxScaler()
    3 @) b1 U6 K9 o+ W/ ?( YX_train_minmax = min_max_scaler.fit_transform(x) #归一化后的结果,+ E3 E, N5 O! K. }5 n$ @1 T' c

    ; `! a2 F! T2 K4 \% Bmin_max_scaler = MinMaxScaler(feature_range=(-1,1))
    ) }2 M+ J7 i' j, e3 u, O- MX_train_minmax = min_max_scaler.fit_transform(x) #归一化到(-1,1)上的结果
      z0 n) b/ T' a0 l7 Z0 w
    3 c  I. p8 o! n. L4 BMinMaxScaler的实现
    " l* D! s( d+ qX_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))7 b8 x. B% S* ~- i9 _2 Q, O& y- [
    X_scaled = X_std / (max - min) + min2 X. @- N% H* C6 z+ f

    ( Y. r, z1 P& n5 y这是 向量化的表达方式,说明X是矩阵,其中
    4 t* M) T  p! g5 {4 l: i$ j0 ~8 a
    3 U" T$ D; C+ F8 ?5 oX_std:将X归一化到[0,1]之间
    2 y& l. c+ T. A  q: Z1 h; \X.min(axis=0)表示列最小值5 n1 q; P( y$ l% m
    max,min表示MinMaxScaler的参数feature_range参数。即最终结果的大小范围+ l1 [6 L6 ^# {
    $ S. D- V. `1 S/ W! y$ Y8 `! L0 y

    9 ]9 a5 c% F) W" D) V' R. s2.2 MaxAbsScaler(绝对值最大标准化)
    8 b7 L6 _+ N% s+ P9 b1 Q9 v         与上述标准化方法相似,但是它通过除以最大值将训练集缩放至[-1,1]。这意味着数据已经以0为中心或者是含有非常非常多0的稀疏数据。! N; d( z' x" b( v* ~% d" `
    " S7 Q& s6 e: u6 D* T* X
    X_train = np.array([[ 1., -1.,  2.],/ g! h1 ~4 K  f2 T1 v' Z1 \
                         [ 2.,  0.,  0.],9 H# N" w6 o* t( O9 c" D7 Y
                        [ 0.,  1., -1.]])
    0 |- k; q1 M: C( [max_abs_scaler = preprocessing.MaxAbsScaler()
    + i( o6 H1 T; f* n7 N6 MX_train_maxabs = max_abs_scaler.fit_transform(X_train)
    . \4 p" x9 g$ r) v( n' l* V# doctest +NORMALIZE_WHITESPACE^, out: array([[ 0.5, -1.,  1. ], [ 1. , 0. ,  0. ],       [ 0. ,  1. , -0.5]])
    9 Q% c$ q0 P6 |3 l' ]6 JX_test = np.array([[ -3., -1.,  4.]])" l9 l9 L& F+ ?; y1 n/ u9 |+ v
    X_test_maxabs = max_abs_scaler.transform(X_test) #out: array([[-1.5, -1. ,  2. ]]); u' F& T& {1 G8 m  P$ U1 @
    max_abs_scaler.scale_  #out: array([ 2.,  1.,  2.])+ R' B( J+ K4 r3 q5 V# }/ o2 ?
    : @  {' C% G% n4 f
    + p" \- b- A5 |& ~/ _$ T0 k
    4 O: I3 o# v8 [
    4 @9 ~3 S5 o4 \
    9 R* W, @% N4 R
    4 }1 D: Y1 v7 R' g$ J& E

    , c6 n" l/ V5 u; b3 o8 }; x& p% I6 T3 b
    4 i* E% I/ U6 s$ t9 G3 A0 `

    & D( v3 X5 D7 V; n% P( e- W& A————————————————5 ^& v; `6 n! g. `' x8 X
    版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    5 x' |) U/ U. E) w/ o/ z+ e% {9 `* L, s原文链接:https://blog.csdn.net/qq_29831163/article/details/89420223
    - w; ]2 K8 K9 i/ x0 W9 z9 ?' k
    1 |/ I) V. O/ y3 Q5 O0 ^% y0 N. @2 W; \7 p3 i
    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, 2025-6-8 20:59 , Processed in 0.639689 second(s), 50 queries .

    回顶部