from sklearn.preprocessing import StandardScaler # E. M( F7 Z' g, s, ex=[[10001,2],[16020,4],[12008,6],[13131,8]] 3 O* d* Q a* r- u+ PX_scaler = StandardScaler() 5 T2 ?" Y l6 K! X' V- E' cX_train = X_scaler.fit_transform(x)/ u8 R! X- j i7 }) P- K
X_train % A8 G7 \( E6 Z1 W8 c#结果如下 : O4 L2 R! q. iarray([[-1.2817325 , -1.34164079],& u0 B6 l+ L( a6 d& \$ I# V* X
[ 1.48440157, -0.4472136 ],0 p4 Y/ ` N1 M6 G! y
[-0.35938143, 0.4472136 ],4 P* g5 C. Y/ L9 t3 W; A' Y. v
[ 0.15671236, 1.34164079]]) 9 n7 _* A! f% i# ^8 H6 h4 J" Z- g & @1 C& e* {" K- G& L5 Uscaler = preprocessing.StandardScaler().fit(X) #out: StandardScaler(copy=True, with_mean=True, with_std=True), P6 o$ z) _1 F; P# D$ k; h& v/ b
scaler.mean_ #out: array([ 1., 0. , 0.33333333]) % j9 G" ?9 t& f# A( L- h% x" s0 W* u
scaler.std_ #out: array([ 0.81649658, 0.81649658, 1.24721913]) 6 H4 P+ z f3 P& q
#测试将该scaler用于输入数据,变换之后得到的结果同上4 U5 X# [8 r, g9 t
scaler.transform(X) # G. K/ `1 D& \; n, V8 o
#out: ' X' V4 b; o3 D, [( \, H9 e/ _$ b+ {array([[ 0., -1.22474487, 1.33630621], / O9 M: {% ~. W8 K! [% M2 t
[ 1.22474487, 0. , -0.26726124], , u7 z9 f; x# M: H7 b" _& \
[-1.22474487,1.22474487, -1.06904497]]) ) J0 V. _! G+ O; H# n* mscaler.transform([[-1., 1., 0.]]) #scale the new data) T2 P" f+ b. A
# out: array([[-2.44948974, 1.22474487, -0.26726124]]) 8 U$ H5 I* P: M/ |; }8 I' m; F! y ) h6 ]5 k3 n6 W7 r/ ~3 N0 g2 将数据特征缩放至某一范围(scalingfeatures to a range)1 a' R* x/ G% o( K# R ' ]4 g W$ K) w: w6 m* ~3 N* _' P9 y" u Z
2.1 MinMaxScaler (最小最大值标准化) $ m ^3 d+ Y4 F; S7 ^0 A 它默认将每种特征的值都归一化到[0,1]之间,归一化后的数值大小范围是可调的(根据MinMaxScaler的参数feature_range调整)。 8 @% x- q+ D$ a
" y; x/ ?$ l+ t. H- `# n; n! }# N
from sklearn.preprocessing import MinMaxScaler3 G- o' o0 \; h
x=[[10001,2],[16020,4],[12008,6],[13131,8]] & U: Q8 \( e: q7 `" |+ Kmin_max_scaler = MinMaxScaler() - z1 F s0 D, H; w: tX_train_minmax = min_max_scaler.fit_transform(x) #归一化后的结果,' N8 P5 z, |9 V; B4 }! Y
( F& c w" F. Lmin_max_scaler = MinMaxScaler(feature_range=(-1,1)) ; J* ?1 B8 X) ^X_train_minmax = min_max_scaler.fit_transform(x) #归一化到(-1,1)上的结果& ~) V: t, k4 h) h" Z9 H
+ W& C4 C, J$ R4 R& G( sMinMaxScaler的实现5 r) Q. q* N0 X3 ~. o s+ e
X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0)) H6 _7 Z. ?, y. q
X_scaled = X_std / (max - min) + min. ?. r4 {$ K- j8 z. f$ |6 _
' G0 G# Z: W7 r1 g
这是 向量化的表达方式,说明X是矩阵,其中4 @4 W# H1 A6 G7 C: n+ b
" J4 W5 R% c' \. q. m$ U
X_std:将X归一化到[0,1]之间2 {% ^' D1 U7 U# |; F& f6 \; z2 k
X.min(axis=0)表示列最小值 3 V# C. ~) x1 O ]5 n& y) z0 w' A9 l- emax,min表示MinMaxScaler的参数feature_range参数。即最终结果的大小范围 6 \- y& ]6 h$ u 4 k" r6 S# S& H # u- L/ S0 L7 l7 T, n. a" r2.2 MaxAbsScaler(绝对值最大标准化) ' B0 P# W4 _& ^ 与上述标准化方法相似,但是它通过除以最大值将训练集缩放至[-1,1]。这意味着数据已经以0为中心或者是含有非常非常多0的稀疏数据。 ' T7 O. ?( Z' q7 h( n# Z1 X; F6 ]6 u: H& z9 i9 |. i; u
X_train = np.array([[ 1., -1., 2.], 3 W) ?4 ]% @: b$ }: \ [ 2., 0., 0.], 0 K. u, g# m0 x, w3 U [ 0., 1., -1.]]) 2 D& C l J0 s' }$ x0 D: B$ A- emax_abs_scaler = preprocessing.MaxAbsScaler() % n$ l+ y# {" |( tX_train_maxabs = max_abs_scaler.fit_transform(X_train) 0 ~0 P# R$ ~% l, ~# doctest +NORMALIZE_WHITESPACE^, out: array([[ 0.5, -1., 1. ], [ 1. , 0. , 0. ], [ 0. , 1. , -0.5]])0 [7 A& z( q! D# @7 T
X_test = np.array([[ -3., -1., 4.]])/ g; j4 L: r/ n
X_test_maxabs = max_abs_scaler.transform(X_test) #out: array([[-1.5, -1. , 2. ]])$ \% x2 j1 ]1 c# U
max_abs_scaler.scale_ #out: array([ 2., 1., 2.])( X( i7 F' c+ P9 d3 L+ \) Y, x
/ n' j3 K7 g* P8 R- } + q" l7 S, `# h7 V2 d7 \# |9 L2 I% { ?1 F) a" L c1 T* L" p8 j
$ @8 b$ D8 }' Z7 ?) k% R
$ l0 B' L {( H. j# s
" I+ X8 C. w$ ^6 ` C ^& o( ^( j% a, Z/ s; J ) K6 H9 E. ?6 [: g: o/ u 5 g. o( u4 c$ m, a; G 3 J! y# g" R5 D0 c1 v————————————————' f0 K7 m ?! o! n! y% \( f
版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。* @4 m1 \3 B3 f. ~
原文链接:https://blog.csdn.net/qq_29831163/article/details/89420223, i: r/ O: V* y! e. Z l9 f
. |. H3 a) j* j6 \) P! f: o! E$ m2 e 4 Z; ^0 k, k5 [0 a