Стандартизация данных часто является неизбежным шагом в математическом моделировании.В этой статье будут представлены три наиболее распространенных метода стандартизации, которые поставляются с библиотекой sklearn: нормализация Z-оценки, нормализация 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-показателя
Обработайте определенный столбец данных в данные со средним значением 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-мин)/(макс-мин).
#创建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. Робастскалер
Масштабирование по медиане и межквартильному размаху используется при наличии большого количества выбросов. Формула: (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)