QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1992|回复: 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。
    2 W( L2 G6 n2 _+ n" ?
    * E; g# I  ^! a" b1 t当我们需要将特征值都归一化为某个范围[a,b]时,选 MinMaxScaler, v2 J7 h9 q7 E4 j0 h- @/ ~
    当我们需要归一化后的特征值均值为0,标准差为1,选 StandardScaler
    " I+ I+ U& E4 B/ d) N; w8 f数据变换的目的:
    ; [5 g( N5 a% b9 }$ F  对收集来的原始数据必须进行数据变换和处理,主要是为了消除量纲,使其具有可比性。& j# Q; L( B! _! r7 Y& h2 U

    ; j$ j- ~+ p/ S9 n" L" ~ 定义 : 设有n个数据的序列  ,则称映射
    / {2 N1 M$ w( R6 y* J
    9 u3 y- t: t3 \0 R% Z                                        % b& p2 X+ P& a) g' m
    - h( n, h, r% Y! J/ w9 ]- {
              为序列 x到序列 y 的数据变换。 2 }  \0 p. w4 O, J
    ) g, a& q" D' G! T5 x
    数据变换的七种常见方式0 u6 H8 r' l0 A
    此处是对同一维度上的各个数据进行变换,如果数据有多个维度/属性,那就拆开来一个属性属性地变换,写成矩阵形式时,它也是分别对各维度进行操作。; `, H% b9 }8 |2 w9 L& K' B9 L

    $ M, s4 {8 i% `  d$ c( u初值化变换9 p" s7 [7 r1 [9 u, i
    4 l- E' U* w/ e$ |* N
    ' A: d" u7 G! ?) x& K% p
    也就是要对每一个数据,都除以第一个数据。
    : ^( m( s8 x2 B. I. ]: D4 H" q" X1 c( x9 i7 u  |! Z1 n
    均值化变换
    , j1 |9 y( n& r( _& D% K4 g% v# {8 z( P7 ^
    / `  d8 L& j) k' B. w7 o
                 对每一个数据,都除以均值。4 X# G8 n+ f7 {% A8 r  x

    ' F$ B6 {; p" [) l% V百分比变换
    9 P6 V; P8 H! w; _8 T% Y$ {( O
    & Y) p7 `2 `' b) {' H. H$ ~: r
    5 X% ]2 }/ t) ?分母为x的该列属性中,值最大的那一个,使得变换后的值的绝对值,在[0,1]之间。
    % \* m5 n5 K: y$ x" d/ W8 K1 d
    ( C  o9 d* q% T% v倍数变换
    + n; i- Y4 `. S   
    % l5 I, s! t7 [+ }# B/ x; V/ B( J  m8 v( M9 x' M
    归一化变换
    ( b: i2 o7 F! I2 F! z( ?8 b7 s: o8 Q& k) [
    ) e( |, z8 x: A: M- z8 k* z5 f
    其中   为大于零的某个值,称  是归一化变换。 / C8 u3 p# Y: k1 R% X+ g+ f

    . V9 }) G, G& {+ l; G+ l- Q& m) n; B$ D' N
    极差最大值化变换
    0 Y9 x& W5 q; ~- Z$ C( l; E% a
    1 i, q; o6 T" ?. y, h/ _
    & S* d0 z9 m& M$ o6 E: r/ y' t+ S! G' M5 E# P( d
      S9 A5 Y9 V1 {4 j
    区间值化变换5 D) P! w0 e7 K4 Y3 k" Q! j) B
    7 M; s  m9 `6 C

    ( i- I- e! n: n) ^  G1 c9 y                  ,
    : F2 T' V* @- t0 s7 O% `# d& p+ z# f, ~9 P4 N
    1. matlab 的mapminmax归一化函数8 V. B9 P3 [5 Y: c) q5 ]
    函数用法:- q8 i3 h) y1 u* e& m4 b% F
    [Xn,Xps]=mapminmax(X,min,max)( J. Y2 b# t% V  R8 b9 C
    $ d4 z, r3 k' w( e
    说明:(1)该函数将X按行归一化,即计算某元素的归一化值时,最大最小值时该元素所处行的最大最小值;因此若只有一组观测时,X需是1*N的行向量。
    % H6 Q" W% [' C6 S' D5 X2 O  {6 T" q; w
       (2)min,max规定X的归一化范围,根据需要自行设置2 m" q7 H  u: b7 L  U8 b0 {4 o
    ; p* _2 v0 m0 H- q- H/ Y) f
       (3)ps是结构变量记录了归一化时的最大值最小值等参数,后续可重复调用     + M9 R( b$ W( [6 f; R9 N$ m

    / A5 x* h" m1 S$ i# P 调用方法:/ M0 V' V, G# n, B, J& a
    ' e/ ^! ]+ L0 t: P" |
    X1=mapminmax('apply', X_new,Xps);%利用先前的结构Xps进行相同的归一化
    + T4 L) i6 Q1 n# T  C; p! R
    % s- y0 l# p) oX2=mapminmax('reverse',Xn, Xps);%反归一化
    . ~8 |. o5 T% p( ~- G' ]/ ?
    6 J8 B) ]% Z2 \x=[1,-1,2;   2,0,0;   0,1,-1]
    . f+ S2 ], l! l) m7 \( a2 ]# }[x1,Xps]=mapminmax(x,0,1)! `1 T: b3 D, Y+ O7 g4 W! ?
    4 c1 d! v8 B" ~3 y

    ( l: y2 Z' [# H6 ^" C" L3 J- |" g. A* i. I; S4 [
    对于python中的axis=0 和axis=1的问题/ @: a0 |! v: ?, G" w) }; ^
    如df.mean其实是在每一行上取所有列的均值,而不是保留每一列的均值。也许简单的来记就是axis=0代表往跨行(down),而axis=1代表跨列(across),作为方法动作的副词(译者注). ?4 ^5 b; `, R7 S% y
    换句话说:
    2 x: [3 w' F% x3 I; `% Q+ J% Y1 N4 H  N
    使用0值表示沿着每一列或行标签\索引值向下执行方法
    , u# ?7 V( `3 {) A使用1值表示沿着每一行或者列标签模向执行对应的方法* a* N& E4 G2 f
    3 L) g: ^: P" S2 {3 H, G
    , x8 f- L7 {* X. t4 Y: z

    ( e/ H" I) }. I, k0 xpython的sklearn中 scale函数
    " }% V7 k: Q" X' N  c# Q1 标准化,均值去除和按方差比例缩放
    ( v5 [1 Y( Y0 g0 G2 X5 a. {              (Standardization, or mean removal and variance scaling)
    ; q$ v8 C1 C1 Y2 J3 ~2 Y- |) Y+ L+ W& n( z# }/ ~' W0 ?
      数据集的标准化:当个体特征太过或明显不遵从高斯正态分布时,标准化表现的效果较差。实际操作中,经常忽略特征数据的分布形状,移除每个特征均值,划分离散特征的标准差,从而等级化,进而实现数据中心化。( x1 ^- O8 ]4 P; e
    . |: f7 w6 N# w' A' u
    from sklearn import preprocessing
    ! b' V9 v; G, f; C/ n7 Q/ x" p7 h6 fimport numpy as np  
    & [% G# y4 j, Z7 PX = np.array([[1., -1., 2.], [2., 0., 0.], [0., 1., -1.]])  . V3 H4 G2 W" @
    X_scaled = preprocessing.scale(X) - |  S+ `" n5 {) H

    2 z6 q* Z7 q( s6 n' o( o& z' u#output :X_scaled = [[ 0.         -1.22474487  1.33630621]
    $ A3 r# v& ^' G9 g                                  [ 1.22474487  0.         -0.26726124]
    , M" ?- f$ C1 F& x- u0 L/ ?                                  [-1.22474487  1.22474487 -1.06904497]]3 U5 _0 a3 h% c0 j) h. e. K
    #scaled之后的数据列为零均值,单位方差
    - V& T  Q! v: F" N4 cX_scaled.mean(axis=0)  # column mean: array([ 0.,  0.,  0.])  
    & \" A( i- s  x; x$ H6 UX_scaled.std(axis=0)  #column standard deviation: array([ 1.,  1.,  1.])$ _" @  U+ F6 ?; S* f+ |
    8 I5 P+ P  I' q8 A- z3 ?& m

    * ?9 F) Y. ~' S
    5 x6 L# B" e" ^StandardScaler
    7 u" ~7 U( F" G! R) n5 _Standardization即标准化,StandardScaler的归一化方式是用每个特征减去列均值,再除以列标准差。归一化后,矩阵每列的均值为0,标准差为1,形如标准正态分布(高斯分布)。 通过计算训练集的平均值和标准差,以便测试数据集使用相同的变换。(在numpy中,有std()函数用于计算标准差)( @- F7 u: J# t3 C; l4 S2 v, O! E! M

    # [! e# U* e4 P. l" jfrom sklearn.preprocessing import StandardScaler
    % F  ~& L6 b0 c  S8 Hx=[[10001,2],[16020,4],[12008,6],[13131,8]]1 _- E/ Q+ M! j
    X_scaler = StandardScaler()7 K. f4 H( F7 @$ E+ f
    X_train = X_scaler.fit_transform(x)
    % L, O5 p- z# r6 a$ C- e- m5 CX_train4 b1 s; k2 F" X; V7 S' K; ]1 V# X, y
    #结果如下
    0 [+ \( u1 @* Xarray([[-1.2817325 , -1.34164079]," o! a( e! i' u) O. \
           [ 1.48440157, -0.4472136 ],+ O; S5 H" b4 y- o; C
           [-0.35938143,  0.4472136 ],
    # ?' T' E+ T" e# ]9 g  N       [ 0.15671236,  1.34164079]])( x. g7 k6 {5 ]$ s8 |1 S5 x6 s

      z; g& W# F! ?6 |  [) ~( N0 Q. B. H. R& R
    / U9 o2 ~5 v9 }  ?2 T+ V6 {, u; K

    注 :

    • 若设置with_mean=False 或者 with_std=False,则不做centering 或者scaling处理。
    • scale和StandardScaler可以用于回归模型中的目标值处理。; M4 w4 w, u. f" B1 v& J
    from sklearn.preprocessing import StandardScaler: q& N8 U, u4 c* m1 T
    x=[[10001,2],[16020,4],[12008,6],[13131,8]]2 R( o6 w3 v5 ?# v* J. t4 u& C- A
    X_scaler = StandardScaler()! V8 w) K& |. Q4 V0 @
    X_train = X_scaler.fit_transform(x)7 R  ^- e) H% m
    X_train
    1 @& M7 [- O- g" R& A: w8 d#结果如下/ B( }* d, v; `6 F/ h% ]* F! F  F
    array([[-1.2817325 , -1.34164079],$ o5 N3 B! W  B# U7 {' ~  w& P) h
           [ 1.48440157, -0.4472136 ],
    7 ?1 x5 w. [2 {       [-0.35938143,  0.4472136 ],
    , W% ]$ _6 N: F' C9 W2 |       [ 0.15671236,  1.34164079]])
    * X' d  d* t# o
      ~! k4 }9 W, }scaler = preprocessing.StandardScaler().fit(X) #out: StandardScaler(copy=True, with_mean=True, with_std=True)8 _8 C% X% D6 ~; O+ K8 t7 V3 `- ]  g  m
    scaler.mean_  #out: array([ 1.,  0. ,  0.33333333])  
    8 N+ ?/ y& m2 Gscaler.std_ #out: array([ 0.81649658,  0.81649658,  1.24721913])
    # F/ B4 t2 R( L+ k4 S#测试将该scaler用于输入数据,变换之后得到的结果同上
    ! j$ `/ @4 K8 A: Iscaler.transform(X)
    5 v: c1 Z( g4 |" H- u4 O" q& }. s2 m#out:
      J2 ]9 U* W& n+ |" {9 Qarray([[ 0., -1.22474487,  1.33630621],
    ! ^" W5 k& y8 v& ^: v       [ 1.22474487, 0. , -0.26726124], / \9 c: q9 N4 [6 |4 g9 ^
           [-1.22474487,1.22474487, -1.06904497]])  " `2 I: M  Q9 c0 a& F
    scaler.transform([[-1., 1., 0.]])  #scale the new data
    0 f+ `7 h0 Q9 v8 F" x% g% J0 E# out: array([[-2.44948974,  1.22474487, -0.26726124]])5 \; k! q1 R8 \1 f8 R" a  ?$ `
    ' t2 v+ B/ I9 v) c
    2 将数据特征缩放至某一范围(scalingfeatures to a range)
    + D0 r3 P+ ]1 u $ ^5 {" c# P4 {. Y5 p3 L9 C! I  Y

    5 t! V% l% w4 M& j; S% h$ h! M2.1 MinMaxScaler (最小最大值标准化)
    9 A) n7 H$ z. k: Y( n4 \ 它默认将每种特征的值都归一化到[0,1]之间,归一化后的数值大小范围是可调的(根据MinMaxScaler的参数feature_range调整)。    C. W, y. {  O7 X7 x5 W

    : x' k# v, l  Cfrom sklearn.preprocessing import MinMaxScaler% R( g& Q; M0 j( Z. f+ u  V9 ^
    x=[[10001,2],[16020,4],[12008,6],[13131,8]]# o  x  P. }5 f5 n1 ?
    min_max_scaler = MinMaxScaler()
    $ ?* E0 F% i; AX_train_minmax = min_max_scaler.fit_transform(x) #归一化后的结果,2 A% U: X4 C/ u0 x8 c* _2 Q4 s
    0 u2 v) M8 P6 [: d
    min_max_scaler = MinMaxScaler(feature_range=(-1,1))8 ?8 k/ D. W. _& k( j/ t0 x9 i) D
    X_train_minmax = min_max_scaler.fit_transform(x) #归一化到(-1,1)上的结果" }: W2 i" p, R  t9 s- I
    ' r( I, X) Y% H+ n/ p: L
    MinMaxScaler的实现
    1 U7 J; R3 ^+ h3 y6 [# UX_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))7 [% C( X- x: ~: U9 E
    X_scaled = X_std / (max - min) + min& F- ~+ v6 w) g1 f; J

    " {0 |) T% d; p$ y这是 向量化的表达方式,说明X是矩阵,其中. ?( l: X8 z) S

      U$ [+ L+ P% b# O$ m$ e2 sX_std:将X归一化到[0,1]之间
    ( |* m* h  b. w2 p0 l1 cX.min(axis=0)表示列最小值
    8 w! V( {4 Q) ~2 tmax,min表示MinMaxScaler的参数feature_range参数。即最终结果的大小范围4 s$ Q+ c2 A5 o1 a5 J" y4 C

    8 E) x' X3 z( t; m8 M+ X* Y6 e. N
      z4 A' z9 v2 N2 M* A" f2.2 MaxAbsScaler(绝对值最大标准化)
    ; |( b% w# L! w, y$ D0 u! B0 h* M: i         与上述标准化方法相似,但是它通过除以最大值将训练集缩放至[-1,1]。这意味着数据已经以0为中心或者是含有非常非常多0的稀疏数据。
      f1 g: t0 j4 Q6 }
    ; {( O; {9 j6 c0 h7 bX_train = np.array([[ 1., -1.,  2.],3 o) }/ Q: t* B& P2 `6 {
                         [ 2.,  0.,  0.],
    + s4 |. o  U& @0 O( P                    [ 0.,  1., -1.]])% J1 U8 {1 A4 N$ T3 h7 j, h0 g
    max_abs_scaler = preprocessing.MaxAbsScaler(), Z, b/ r* ^; Z+ E& o7 f
    X_train_maxabs = max_abs_scaler.fit_transform(X_train)" y4 C+ b0 W  I" C8 W! r/ n. v7 U* f
    # doctest +NORMALIZE_WHITESPACE^, out: array([[ 0.5, -1.,  1. ], [ 1. , 0. ,  0. ],       [ 0. ,  1. , -0.5]])2 y5 @8 ]  C* ]" L1 J1 Z
    X_test = np.array([[ -3., -1.,  4.]])+ W- b# l& l. j9 R! n9 a6 i
    X_test_maxabs = max_abs_scaler.transform(X_test) #out: array([[-1.5, -1. ,  2. ]])
    ; \& S# N4 o6 A1 u# {) K: X5 Jmax_abs_scaler.scale_  #out: array([ 2.,  1.,  2.])7 K2 d, Y3 R" l4 w( a

    6 e9 j% U; t, z' c$ V6 B; H) {9 W  G. k& F( g
    % f/ v4 [1 B, h% y6 V
    8 j0 Q1 D" X; a4 g8 B; r

    0 @, |! A$ k0 `- P. h5 e7 j7 ~4 g; {# U
    8 Y! Z7 y  a3 [  H

    4 V  q# Y5 d) Y! ^2 K* [
    ! ?& R" l' m/ @) Z* o: k9 z3 s; s. [; A, A  a
    ————————————————
    ( q/ I5 I% C6 u/ O0 n/ g1 X3 F版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    . P0 b& d& |; G7 [$ ?  X9 l6 q# |原文链接:https://blog.csdn.net/qq_29831163/article/details/89420223) N5 ?3 s3 U1 v

    ( x6 M( l# l( e. q9 L$ l* p
    ' @" \. O" V; n0 s/ \4 a
    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-14 04:39 , Processed in 0.385529 second(s), 51 queries .

    回顶部