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

本文介绍了Python的sklearn库中用于数据标准化的三种方法:Z-score标准化、0-1归一化和RobustScaler鲁棒化。Z-score标准化使数据均值为0,方差为1,适合异常值影响小的情况;0-1归一化将数据缩放到[0,1]范围,适用于无异常值的情况;RobustScaler利用中位数和四分位距,对异常值较多的数据更鲁棒。文章还展示了如何进行反归一化以恢复原始数据。
摘要由CSDN通过智能技术生成

        在数学建模时将数据标准化往往是不可避免的一个步骤,本文将介绍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)

          

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值