sklearn库三种标准化与反标准化方法介绍

        在数学建模时将数据标准化往往是不可避免的一个步骤,本文将介绍sklearn库自带的三种最常见的标准化方法:Z-score标准化、0-1归一化、RobustScaler鲁棒化,以及他们的反归一化。话不多说,见代码和实例:

首先看一下本文中用到的原始数据:

import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import RobustScaler

datas=pd.read_excel(r"C:\Users\86177\Desktop\农林牧渔业产值占比(2014-2019年).xlsx")
datas.drop(['地区'],axis=1,inplace=True)#删除地区列的数据,只保留要标准化的内容
columns=datas.columns.tolist()#将数据列的名称以列表形式保存,为后续重建DataFrame准备
datas

        因为原始数据中的‘地区’列不是要标准化的内容,故将这一列数据删除,只保留要标准化的部分:

1、Z-score标准化

将某一列数据处理成均值为0,方差为1的数据。优点是受异常值影响较小。公式为:(X-μ)/σ

#创建StandardScaler()实例
standard_s1=StandardScaler()
#将DataFrame格式的数据按照每一个series分别标准化
standard_s1_data=standard_s1.fit_transform(datas)
#将标准化后的数据改成DataFrame格式
standard_s1_data_pd=pd.DataFrame(standard_s1_data,columns=columns)
#将标准化的数据反标准化
standard_s1_data_inverse=standard_s1.inverse_transform(standard_s1_data)
#将反标准化的数据改成DataFrame格式
standard_s1_data_inverse_pd=pd.DataFrame(standard_s1_data_inverse,columns=columns)

print(standard_s1_data_pd)
print(standard_s1_data_inverse_pd)

下图左边为标准化结果,右边为反标准化结果,可以看见反标准化的结果与原始数据一致。

           

 2、0-1归一化

即将某一列数据缩放到[0,1]范围内,缺点是受极值影响。公式为(X-min)/(max-min)。

#创建MinMaxScaler()实例
standard_s2=MinMaxScaler()
#将DataFrame格式的数据按照每一个series分别标准化
standard_s2_data=standard_s2.fit_transform(datas)
#将标准化后的数据改成DataFrame格式
standard_s2_data_pd=pd.DataFrame(standard_s2_data,columns=columns)
#将标准化的数据反标准化
standard_s2_data_inverse=standard_s2.inverse_transform(standard_s2_data)
#将反标准化的数据改成DataFrame格式
standard_s2_data_inverse_pd=pd.DataFrame(standard_s2_data_inverse,columns=columns)

print(standard_s2_data_pd)
print(standard_s2_data_inverse_pd)

            

3、RobustScaler鲁棒化 

 通过中位数和四分位距来缩放,使用于对异常值较多的情况。公式为(X-中位数)/四分位距。

#创建RobustScaler()实例
standard_s3=RobustScaler()
#将DataFrame格式的数据按照每一个series分别标准化
standard_s3_data=standard_s3.fit_transform(datas)
#将标准化后的数据改成DataFrame格式
standard_s3_data_pd=pd.DataFrame(standard_s3_data,columns=columns)
#将标准化的数据反标准化
standard_s3_data_inverse=standard_s3.inverse_transform(standard_s3_data)
#将反标准化的数据改成DataFrame格式
standard_s3_data_inverse_pd=pd.DataFrame(standard_s3_data_inverse,columns=columns)

print(standard_s3_data_pd)
print(standard_s3_data_inverse_pd)

          

猜你喜欢

转载自blog.csdn.net/m0_56839722/article/details/126880250