特征归一化,又叫 特征缩放,Feature Normalization,Feature Scaling。各特征由于数值大小范围不一致,通过缩放特征的取值范围,可以消除量纲,使特征具有可比性。只有各特征之间的大小范围一致,才能使用距离度量等算法,加速梯度下降算法的收敛;在SVM算法中,一致化的特征能加速寻找支持向量的时间;不同的机器学习算法,能接受的输入数值范围不一样。sklearn中最常用的特征归一化方法是MinMaxScaler和StandardScaler。 ( K6 M4 X. H; Y4 M8 H8 K3 e. o( B( g1 [
当我们需要将特征值都归一化为某个范围[a,b]时,选 MinMaxScaler 8 d- S! ?8 `9 G _: p4 B当我们需要归一化后的特征值均值为0,标准差为1,选 StandardScaler * V% J$ w6 m C. d数据变换的目的: 7 ]8 u1 i% E- o9 t. k6 S, d 对收集来的原始数据必须进行数据变换和处理,主要是为了消除量纲,使其具有可比性。 4 f7 t. W! I: y 0 s6 j% O) _; f/ X; k) N# Y+ W 定义 : 设有n个数据的序列 ,则称映射' k: D* h8 F1 l/ c% i d
5 ] v8 @& T7 J, x, N2 ?; p 8 |' y) }, ]/ L r* I; j
& e" n) I. ^5 o9 P$ L' W! \& d3 I
为序列 x到序列 y 的数据变换。 ' ] i& D: c0 |: z0 r {
( X0 ]9 \/ S' x* K6 i数据变换的七种常见方式 ( p- J" z* d3 A' e4 m2 q8 L此处是对同一维度上的各个数据进行变换,如果数据有多个维度/属性,那就拆开来一个属性属性地变换,写成矩阵形式时,它也是分别对各维度进行操作。* }7 _6 l: f& v2 i& Z- C1 w% X
' R# s8 w2 r; I
初值化变换, z6 o3 L% [5 }3 y$ P% J1 s" T
7 p, L! b A5 C, ^0 T: I: F0 l7 i ' |1 n- W* W0 g, j 也就是要对每一个数据,都除以第一个数据。8 F s# i* f, t7 ?4 U% `5 o
0 u6 D0 Y8 a# f, I均值化变换. v% V4 g( J% S0 o
( q2 y, L* a' ? . _$ k; Y) f# W4 @4 P 对每一个数据,都除以均值。5 a: n/ f# e: b* [
) k2 x9 i& K+ F9 ]5 t1 H0 B) ^百分比变换# I. U9 c* L5 z7 ?
' K S8 b+ T' Y4 k3 Y ! Z$ d" v2 D1 E9 g分母为x的该列属性中,值最大的那一个,使得变换后的值的绝对值,在[0,1]之间。- z+ o5 d3 W9 _; n
- z! u; ^2 O! v4 m" @& X倍数变换, a" d2 v8 T( [/ k4 v/ s: U , f* V- Z% U! j5 H% `2 f. x+ q
$ o% {1 z: O+ G) S0 t' N
归一化变换 - T7 u1 p4 E! h4 Z % f) {3 I4 ~: Q1 l/ R . P% @! m; ?# b, }' ] 其中 为大于零的某个值,称 是归一化变换。 4 Y( B \" O. F8 Z( c5 D
" N2 g0 T* h% d: B6 Y
' t, w' r' K/ e0 `% P极差最大值化变换8 h8 } `' M) ?0 [- v
: d) x% Y8 ~- A5 }3 ^# |* _ : E: ]! U/ p0 A2 x9 o2 p. y9 o3 F' B: y
. K) T' y* L' c) q Q
区间值化变换2 v2 Y6 G1 I7 ^$ b$ A
8 `7 [/ \. f1 H ! V( [. b# n' k1 N) S, N8 T8 c( ]0 s
, 7 K \0 q9 |. k9 N& j& }0 V; g8 E2 _/ |( z( G& p
1. matlab 的mapminmax归一化函数8 \+ b/ }4 N4 {2 d
函数用法:/ O* I# o7 P( f4 R6 a2 ~! S
[Xn,Xps]=mapminmax(X,min,max) : y$ s. x$ u& s# c" N 0 r+ V b3 ~0 m说明:(1)该函数将X按行归一化,即计算某元素的归一化值时,最大最小值时该元素所处行的最大最小值;因此若只有一组观测时,X需是1*N的行向量。 6 F6 ]# y y6 [4 V4 q) N0 a* Z. P# |2 U1 ?4 n
(2)min,max规定X的归一化范围,根据需要自行设置 5 N E& @8 a( v' b, `. w* N( q9 R: }9 g0 L& `9 k4 ^
(3)ps是结构变量记录了归一化时的最大值最小值等参数,后续可重复调用 4 P3 `) |/ J2 G$ R; z" z; @7 M+ J* v/ p4 h" \6 J+ a, G, [6 r0 E+ J1 a
调用方法:9 @ N* ]- V. C. |2 I1 ^
5 m0 i" f# y; L. b! HX1=mapminmax('apply', X_new,Xps);%利用先前的结构Xps进行相同的归一化( C$ Q j6 g- y8 `; W
3 b7 y! B( k9 D o, V9 DX2=mapminmax('reverse',Xn, Xps);%反归一化* R! [, p x4 i. x4 Z4 B
# J/ a7 Y' G/ P. |: T1 F- W- z
x=[1,-1,2; 2,0,0; 0,1,-1] ( |' o, a. x9 Y/ N[x1,Xps]=mapminmax(x,0,1) . ]6 X+ M1 `% T/ G% S - L5 l" _, o* p% A7 w% F6 o . I, O8 }* b0 `' @0 o ' v6 q8 F$ w% J& K0 Z0 r对于python中的axis=0 和axis=1的问题 4 e0 T( u& z& a" c2 A/ S 如df.mean其实是在每一行上取所有列的均值,而不是保留每一列的均值。也许简单的来记就是axis=0代表往跨行(down),而axis=1代表跨列(across),作为方法动作的副词(译者注); n2 n8 i G+ v8 R& v- }1 O6 O; C+ M, f
换句话说:2 I. L0 Z+ U0 I3 p' g! w' S
% ?, f+ E" _5 R$ w% x% H4 M" L使用0值表示沿着每一列或行标签\索引值向下执行方法 T/ z I. l! A# ?% o
使用1值表示沿着每一行或者列标签模向执行对应的方法 . M- l( e- R- E+ m) G/ H5 F% {$ s6 h6 S' `
6 M* v8 |# r. ` R6 w
6 F! y) N+ A a1 U2 t9 Mpython的sklearn中 scale函数 g& D: k/ X7 z8 W% P8 d
1 标准化,均值去除和按方差比例缩放 . ?3 X& U: T2 ^8 U" G (Standardization, or mean removal and variance scaling) 4 I9 }3 u: L e 1 C9 T$ Q1 K, ]' f: _ 数据集的标准化:当个体特征太过或明显不遵从高斯正态分布时,标准化表现的效果较差。实际操作中,经常忽略特征数据的分布形状,移除每个特征均值,划分离散特征的标准差,从而等级化,进而实现数据中心化。5 y3 `5 W; c( N" ~$ i- F2 W) T
9 Q8 c; c3 J8 Yfrom sklearn import preprocessing 0 x2 k* v: y+ H1 k( o( s
import numpy as np x0 X G6 \5 X/ L( i& u6 U, uX = np.array([[1., -1., 2.], [2., 0., 0.], [0., 1., -1.]]) . b, w; A, u/ J0 SX_scaled = preprocessing.scale(X) 8 u: A! q2 N* G; s . O B6 ^- K5 E. L#output :X_scaled = [[ 0. -1.22474487 1.33630621]) m E) R, Y- B
[ 1.22474487 0. -0.26726124]2 Y. ^7 C c& f$ x% C- m4 i
[-1.22474487 1.22474487 -1.06904497]] - e# u+ S3 V# R* L, E! @/ N* ?#scaled之后的数据列为零均值,单位方差 + I3 Z4 `, S9 |( h QX_scaled.mean(axis=0) # column mean: array([ 0., 0., 0.]) 0 }6 `9 e: K. H- W3 F( RX_scaled.std(axis=0) #column standard deviation: array([ 1., 1., 1.])% b0 u2 A/ q6 q1 i0 l
$ X* @* k9 m, {; x _ 2 R% w& L, ^- v$ p. h5 N' l" Q# D
StandardScaler 6 D) x2 `, r/ N3 u, n8 [Standardization即标准化,StandardScaler的归一化方式是用每个特征减去列均值,再除以列标准差。归一化后,矩阵每列的均值为0,标准差为1,形如标准正态分布(高斯分布)。 通过计算训练集的平均值和标准差,以便测试数据集使用相同的变换。(在numpy中,有std()函数用于计算标准差)4 E# L+ W' }. ?0 w$ Z. L