数据预处理—数据归一化/标准化

1 概述

       数据预处理是在做数据分析前的准备工作,合适正确的数据预处理会为我们后续的分析工作打好基础,提高效率。

       数据归一化是数据预处理的重要组成部分,因为我们平时用到的数据往往不是在同一度量标准下的,比如年龄、收入、体重、房间平米等,虽然都是数值型数据,但却不能进行一些类似线性、距离方面的运算,因此把数据转化为统一标准是非常重要的,下面列出了需要数据归一化的机器学习算法:

"""
需要进行归一化的算法:线性回归、逻辑回归、支持向量机、KNN、K-Means、Adaboost
线性回归、支持向量机、KNN、K-Means都是一些基于距离度量的算法,因此是需要进行数据归一化的;
逻辑回归也是广义的线性回归,而且在参数的求解上使用了梯度上升进行迭代,进行归一化可以让算法更快得找到最优解,加大运算速度;
Adaboost极易受异常值的影响,归一化可以减少异常值对于算法精度的影响,而且Adaboost的基学习器可以自定义,如果基学习器需要归一化,那么Adaboost就是需要归一化的
不需要数据归一化的算法:决策树、随机森林、朴素贝叶斯、XGBoost、LightGBM
贝叶斯、树模型都是基于概率进行计算的,并不依赖特征间的距离或是线性计算等,因此都是不需要进行归一化的
"""

2 数据归一化Python常用函数

有很多手段可以帮助我们进行数据归一化,包括标准化、归一化、log函数、sigmoid函数等等,这里我们介绍最常用的两种处理手段:

-- 归一化 Max-Min --
指对原始数据进行线性变换,将值映射到[0,1]之间
X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))
新数据=(原数据 - 列向量最小值)/(列向量最大值 - 列向量最小值)
X_scaled = X_std * (max - min) + min
归一化后数据= 新数据 *(列向量最大值 - 列向量最小值)+ 列向量最小值

minmax = preprocessing.MinMaxScaler()     # 建立MinMaxScaler对象

data_minmax = minmax.fit_transform(data)     # 归一化处理

-- 标准化 Z-Score --
基于原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化

z = (x - u) / s
新数据=(原数据 - 列向量均值)/ 列向量标准差

zscore = preprocessing.StandardScaler()   # 建立StandardScaler对象

data_zs = zscore.fit_transform(data)   # 标准化处理

3 Python归一化实操演示

3.1 导入各种包
import numpy as np
import pandas as pd
from sklearn import datasets  # 导入sklearn自带数据集
from sklearn import preprocessing   # 导入数据数据处理包
3.2 使用波士顿房价数据集
data = datasets.load_boston()   # 导入波士顿房价数据
x = pd.DataFrame(data.data)   # 共13个特征
x.columns = data.feature_names   # 设置特征名
这里使用sklearn自带的波士顿房价数据集,共13列特征,具有各种不同度量的特征,需要归一化
数据预处理—数据归一化/标准化_第1张图片
3.3 Z-Score标准化
zscore = preprocessing.StandardScaler()   # 设置标准化对象
x_zs = zscore.fit_transform(x)   # 数据标准化处理
x_zs = pd.DataFrame(x_zs)   
x_zs.columns = data.feature_names   # 添加列名
x_zs

可以看到转化后的特征均在0-1之间

数据预处理—数据归一化/标准化_第2张图片

3.4 Max-Min标准化
minmax = preprocessing.MinMaxScaler()   # 设置归一化对象
x_mm = minmax.fit_transform(x)

操作和标准化相同,归一化后的数据也都是在(0,1)之间

x_mm = pd.DataFrame(x_mm)   # 数据归一化处理
x_mm.columns = data.feature_names
x_mm

数据预处理—数据归一化/标准化_第3张图片

以上就是的数据归一化和标准化比较常用的处理方式,相对于归一化,我个人是更喜欢用标准化的,因为归一化更容易受到异常值的影响,而标准化相对来说更稳定,标准化后的数据符合标准正态分布,从统计学上说也是数据质量很好的状态~

基本上数据标准化的内容就到这里啦,若有理解有误的地方,欢迎批评指正

ok!感恩的心~

你可能感兴趣的:(数据预处理,机器学习,python,人工智能)