> For the complete documentation index, see [llms.txt](https://windmising.gitbook.io/mathematics-basic-for-ml/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://windmising.gitbook.io/mathematics-basic-for-ml/src/numericalcomputation/preprocessing.md).

# Preprocessing

## 归一化 Normalize

把数据映射到\[0,1]之间。\
适用于分布有明显边界的情况，需要知道数据的最大值和最小值，受outlier影响较大。

$$
x\_{scale} = \frac {x - x\_{min}}{x\_{max} - x\_{min}}
$$

如果使用训练数据的最大值和最小值，则可能出现测试数据超出范围的情况。\
可以把超出范围的数据drop或者cutdown。

sklearn实现：

```python
from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler(feature_range=(0,1))
scaler = scaler.fit(values)
normalized = scaler.transform(values)
inversed = scaler.inverse_transform(normalized)
```

## 标准化 Standardize

把数据映射到均值为0方差为1的分布中。\
数据分布没有明显的边界，有可能存在极端的数据值。但需要知道数据的均值和方差。

$$
x\_{scale} = \frac {x-x\_{mean}}{S}
$$

通常使用训练数据的均值和方差。

sklearn实现：

```python
from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
scaler = scaler.fit(values)
normalized = scaler.transform(values)
inversed = scaler.inverse_transform(normalized)
```
