# 3.4 归一化 ## 为什么使用归一化 归一化是缩放**单个样本**以具有**单位范数**的过程。归一化实质是一种线性变换,线性变换有很多良好的性质,这些性质决定了对数据改变后不会造成“失效”,反而能提高数据的表现,这些性质是归一化的前提。归一化能够**加快模型训练速度**,**统一特征量纲**,**避免数值太大**。值得注意的是,归一化是对每一个样本做转换,所以是**对数据的每一行进行变换**。而之前我们讲过的方法是对数据的每一列做变换。 ## L1范式归一化 `L1`范式定义如下: $$ ||x||_1=\sum_{i=1}^n|x_i| $$ 表示向量`x`中每个元素的绝对值之和。 `L1`范式归一化就是将样本中每个特征**除以**特征的`L1`范式。 在`sklearn`中使用`normalize`方法实现,用法如下: ```python from sklearn.preprocessing import normalize data = np.array([[-1,0,1], [1,0,1], [1,2,3]]) data = normalize(data,'l1') >>>data array([[-0.5 , 0. , 0.5 ], [ 0.5 , 0. , 0.5 ], [ 0.167, 0.333, 0.5 ]]) ``` ## L2范式归一化 `L2`范式定义如下: $$ ||x||_2=\sqrt{\sum_{i=1}^nx_i^2} $$ 表示向量元素的平方和再开平方根。 `L2`范式归一化就是将样本中每个特征**除以**特征的`L2`范式。 在`sklearn`中使用`normalize`方法实现,用法如下: ```python from sklearn.preprocessing import normalize data = np.array([[-1,0,1], [1,0,1], [1,2,3]]) data = normalize(data,'l2') >>>data array([[-0.707, 0. , 0.707], [ 0.707, 0. , 0.707], [ 0.267, 0.535, 0.802]]) ```