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.
|
|
|
|
# 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]])
|
|
|
|
|
```
|