import numpy as np
import pandas as pd
from sklearn import preprocessing
import matplotlib.pyplot as plt
import matplotlib as mpl
import seaborn as sns
from seaborn import load_dataset
sns.set()
mpl.rcParams['font.family'] = 'sans-serif'
mpl.rcParams['font.sans-serif'] = 'SimHei'
iris = load_dataset('iris').drop('species', axis=1)
iris.head()


一、Z标准化:实现中心化和正态分布 Z-Score标准化是基于原始数据的均值和标准差进行的标准化,其转化公式为: 什么是数据标准化?在Python中如何进行数据标准化?「必学」 其中,z是转化后的数据,x为转化前的数据,μ是整组数据的均值,σ是整组数据的标准差。


sns.jointplot(data=iris, color='m',
 x='sepal_length', 
 y='sepal_width');

Z-score

z_scaler = preprocessing.StandardScaler()
iris_z = z_scaler.fit_transform(iris)
iris_z = pd.DataFrame(iris_z)
sns.jointplot(data=iris_z, color='m', x=0, y=1);


#转换后数据的均值和标准差:
iris_z.agg(['std','mean'])

二、Min-Max:归一化 Min-Max标准化方法会对原始数据进行线性变换,它的转换公式为: 什么是数据标准化?在Python中如何进行数据标准化?「必学」 很明显,当x为最大值时,会被转换为1;当x为最小值时,对应的新值为0;整组数据会分布在从0到1的区间内,而数据的分布形态并不会发生变化。

mm_scaler = preprocessing.MinMaxScaler()
iris_mm = mm_scaler.fit_transform(iris)
iris_mm = pd.DataFrame(iris_mm)
sns.jointplot(data=iris_mm, color='m', x=0, y=1);


三、MaxAbs:最大绝对值标准化 在数据科学中,我们经常需要应对稀疏数据,MaxAbs方法对于稀疏数据有着良好的支持。MaxAbs标准化方法与Min-Max方法有些相似,其公式为: 什么是数据标准化?在Python中如何进行数据标准化?「必学」 即用每一个值除以整组数据中的绝对值的最大值,这样保留了原有数据的正负属性,且使数据落在了[-1,1]闭区间内。需要注意的是,先进行绝对值操作,然后选最大值,而不是先选择最大值,再求绝对值。我已经看到过很多文章把这里弄错了。举个例子,有一组数据[-0.01, -1, -2],如果我们先求最大值再求绝对值,别说归一化了,数据简直要钻到地缝里去了。


ma_scaler = preprocessing.MaxAbsScaler()
iris_ma = ma_scaler.fit_transform(iris)
iris_ma = pd.DataFrame(iris_ma)
sns.jointplot(data=iris_ma, color='m', x=0, y=1);

iris_ma = pd.concat([iris_ma, iris_ma.applymap(lambda x: -x)])
sns.jointplot(data=iris_ma, color='m', x=0, y=1);


四、RobustScaler 有些时候,数据中会存在离群点(异常值)。这时如果我们使用z-score标准化就会导致数据很容易失去离群特征。这时我们就可以使用RobustScaler方法,它对于数据中心化和数据的缩放健壮性有着更强的参数调节能力。


r_scaler = preprocessing.RobustScaler()
iris_r = ma_scaler.fit_transform(iris)
iris_r = pd.DataFrame(iris_r)
sns.jointplot(data=iris_r, color='m', x=0, y=1);