1 概述
数据预处理是在做数据分析前的准备工作,合适正确的数据预处理会为我们后续的分析工作打好基础,提高效率。
数据归一化是数据预处理的重要组成部分,因为我们平时用到的数据往往不是在同一度量标准下的,比如年龄、收入、体重、房间平米等,虽然都是数值型数据,但却不能进行一些类似线性、距离方面的运算,因此把数据转化为统一标准是非常重要的,下面列出了需要数据归一化的机器学习算法:
"""
需要进行归一化的算法:线性回归、逻辑回归、支持向量机、KNN、K-Means、Adaboost
线性回归、支持向量机、KNN、K-Means都是一些基于距离度量的算法,因此是需要进行数据归一化的;
逻辑回归也是广义的线性回归,而且在参数的求解上使用了梯度上升进行迭代,进行归一化可以让算法更快得找到最优解,加大运算速度;
Adaboost极易受异常值的影响,归一化可以减少异常值对于算法精度的影响,而且Adaboost的基学习器可以自定义,如果基学习器需要归一化,那么Adaboost就是需要归一化的
不需要数据归一化的算法:决策树、随机森林、朴素贝叶斯、XGBoost、LightGBM
贝叶斯、树模型都是基于概率进行计算的,并不依赖特征间的距离或是线性计算等,因此都是不需要进行归一化的
"""
2 数据归一化Python常用函数
-- 归一化 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归一化实操演示
import numpy as np
import pandas as pd
from sklearn import datasets # 导入sklearn自带数据集
from sklearn import preprocessing # 导入数据数据处理包
data = datasets.load_boston() # 导入波士顿房价数据
x = pd.DataFrame(data.data) # 共13个特征
x.columns = data.feature_names # 设置特征名
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之间
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
以上就是的数据归一化和标准化比较常用的处理方式,相对于归一化,我个人是更喜欢用标准化的,因为归一化更容易受到异常值的影响,而标准化相对来说更稳定,标准化后的数据符合标准正态分布,从统计学上说也是数据质量很好的状态~
ok!感恩的心~