一、原理介绍
通常情况下,在建模之前,都需要对数据进行标准化处理,以消除量纲的影响。如果对未标准化的数据直接进行建模,可能会导致模型对数值大的变量学习过多,而对数值小的变量训练不够充分,往往模型效果会不好。常用的数据标准化方法有最大最小归一化、均值方差标准化、小数定标法、定量特征二值化等。
最大最小归一化,顾名思义,就是利用数据列中的最大值和最小值进行标准化处理,标准化后的数值处于[0,1]之间,计算方式为数据与该列的最小值作差,再除以极差。
具体公式为: x ′ = x − m i n m a x − m i n x’=\frac{x-min}{max-min} x′=max−minx−min
公式中,x’表示单个数据的取值,min是数据所在列的最小值,max是数据所在列的最大值。
最大最小归一化容易受极端值的影响,当某列数据中存在极端值时,可以根据实际的业务场景,考虑事先将极端值或异常值剔除,或者是对标准化后的数据进行变换,如取对数等,使得变换后的数据接近于正态分布。
二、代码实现
#加载模块
from sklearn.preprocessing import StandardScaler
import warnings
warnings.filterwarnings("ignore") #过滤掉警告的意思
from pyforest import *
import pandas as pd
import numpy as np
#读入数据
data=pd.read_csv("F:/data/data.csv",encoding='gbk') #bgk表示中文编码
#查看数据前五行
data.head()
(1)资产负债率 | (2)剔除预收款项后的资产负债率 | (3)长期资本负债率 | (4)长期资产适合率 | (5)权益乘数 | |
---|---|---|---|---|---|
0 | 0.655799 | 0.606708 | 0.613865 | 0.494960 | 0.791971 |
1 | 0.752061 | 0.705498 | 0.841639 | 1.000000 | 0.932990 |
2 | 0.957391 | 0.941543 | 0.000000 | 0.493465 | 0.988630 |
3 | 0.807046 | 0.780709 | 0.984696 | 0.530637 | 0.958086 |
4 | 0.805235 | 0.796071 | 0.861480 | 0.541299 | 0.957462 |
from sklearn.preprocessing import MinMaxScaler
#区间缩放,返回值为缩放到[0, 1]区间的数据
Standard_data=MinMaxScaler().fit_transform(data)
#查看标准化后的数据
Standard_data
array([[0.65608912, 0.60990114, 0.61386483, 0.49495976, 0.79739631],
[0.75239351, 0.70921165, 0.84163884, 1. , 0.93938095],
[0.95781436, 0.9464991 , 0. , 0.49346475, 0.99540256],
…,
[0.73319974, 0.65164941, 0.51791243, 0.50922178, 0.92607276],
[0.66202637, 0.56413243, 0.75722411, 0.49343682, 0.81677841],
[0.88919966, 0.85747254, 0. , 0.49297322, 0.98517934]])
#由于标准化后的数据是array格式,故将其转化为数据框
Standard_data = pd.DataFrame(Standard_data) #转为dataframe
#将数据写成csv文件,方便后续的建模
Standard_data.to_csv("F:/data/Standard_data.csv",index=False)