You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

57 lines
1.7 KiB

6 years ago
# 3.4 归一化
6 years ago
## 为什么使用归一化
归一化是缩放**单个样本**以具有**单位范数**的过程。归一化实质是一种线性变换,线性变换有很多良好的性质,这些性质决定了对数据改变后不会造成“失效”,反而能提高数据的表现,这些性质是归一化的前提。归一化能够**加快模型训练速度****统一特征量纲****避免数值太大**。值得注意的是,归一化是对每一个样本做转换,所以是**对数据的每一行进行变换**。而之前我们讲过的方法是对数据的每一列做变换。
## 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]])
```