定义:使得梯度下降在不同维度θ参数上(不同数量级),即取消各维数据之间的数量级差别,可以使各个参数步调一致协同的进行梯度下降。(统一量纲)
归一化对象:一般只对特征向量进行归一化,而不对目标值进行归一化。
下面介绍两种归一化的方法,并且使用python代码进行操作,最终实现天池工业蒸汽量的预测!
最大值最小值归一化
定义:离差标准化,对原始数据进行线性变化,利用数据列中的最大值和最小值进行标准化处理,使结果值映射到[0 , 1]之间。
公式如下:
X
∗
=
X
−
X
m
i
n
X
m
a
x
−
X
m
i
n
X^*=\frac{X-X_{min}}{X_{max}-X_{min}}
X∗=Xmax−XminX−Xmin
缺点:受离群点影响比较大,比如原本一组数据实在0-10之间,突然有一个数据是100000000。
- 使用python代码实现最大值最小值归一化演示:
import numpy as np
# 准备数据
x_1 = np.random.randint(0,10,size=10)
x_2 = np.random.randint(1000,5000,size=10)
# 将两个数据进行整合,形成10*2的二维向量
X = np.c_[x_1,x_2]
# 根据公式实现最大值最小值归一化
X_norm = (X - X.min(axis = 0))/(X.max(axis = 0) - X.min(axis = 0))
X_norm.round(2)
- 使用sklearn库中的函数实现最大值最小值归一化:
# 导入需要用到的库
import numpy as np
from sklearn.preprocessing import MinMaxScaler
np.set_printoptions(suppress=True)
x_1 = np.random.randint(0,10,size=10)
x_2 = np.random.randint(1000,5000,size=10)
X = np.c_[x_1,x_2]
# 生成构造器
mms = MinMaxScaler()
mms.fit_transform(X).round(2)
0-均值归一化(Z-score)
定义:数据经过0-均值归一化处理后,新得到的数据符合标准正态分布(均值为零,方差为一)。其效果一般会比最大值最小值归一化好,并且适用性也比较强。
公式如下:
X
∗
=
X
−
μ
δ
μ
的求法:
μ
=
1
n
∑
i
=
1
n
x
i
δ
的求法:
δ
=
1
n
∑
i
=
1
n
(
x
i
−
μ
)
2
X^*=\frac{X-\mu}{\delta}\\ \mu的求法: \mu = \frac{1}{n}\sum_{i=1}^{n}x_i\\ \delta的求法: \delta = \sqrt{\frac{1}{n}\sum_{i=1}^{n}(x_i-\mu)^2}
X∗=δX−μμ的求法:μ=n1i=1∑nxiδ的求法:δ=n1i=1∑n(xi−μ)2
- 使用python实现0-均值归一化
import numpy as np
# 数据准备
x_1 = np.random.randint(1,10, size = (10,1))
x_2 = np.random.randint(1000, 10000, size = (10,1))
X = np.c_[x_1,x_2]
# 根据公式实现操作
X_norm = (X - X.mean(axis = 0))/X.std(axis = 0)
X_norm.round(2)
- 使用python中的sklearn库实现0-均值归一化
from sklearn.preprocessing import StandardScaler
# 生成构造器
standard = StandardScaler()
x_1 = np.random.randint(1,10, size = (10,1))
x_2 = np.random.randint(1000, 10000, size = (10,1))
X = np.c_[x_1,x_2]
# 训练
standard.fit(X)
# 转换
X_norm1 = standard.transform(X)
X_norm1.round(2)
使用归一化实现阿里云天池工业蒸汽量预测
数据可在此出下载(需要先登录)。
实现代码如下:
注:下面代码对目标值也进行了归一化,但是一般是不用对其进行归一化的。
- 最大值最小值归一化的实现
# 最大最小值归一化
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import MinMaxScaler
df = pd.read_csv('D:/桌面/1/zhengqi_train.txt',sep='\t')
X_train = df.iloc[:,:-1]
y_train = df[['target']]
X_test = pd.read_csv('D:/桌面/1/zhengqi_test.txt',sep='\t')
# 归一化
mms = MinMaxScaler()
X_train_normal = mms.fit_transform(X_train)
y_train_normal = mms.fit_transform(y_train)
X_test_normal = mms.fit_transform(X_test)
# 训练和预测
model = LinearRegression()
model.fit(X_train_normal,y_train_normal)
y_2 = model.predict(X_test_normal)
np.savetxt('D:/桌面/1/result2.txt',y_2)
- Z-score归一化的实现
# Z-score归一化
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import StandardScaler
df = pd.read_csv('D:/桌面/1/zhengqi_train.txt',sep='\t')
X_train = df.iloc[:,:-1]
y_train = df[['target']]
X_test = pd.read_csv('D:/桌面/1/zhengqi_test.txt',sep='\t')
# 归一化
standard = StandardScaler()
X_train_normal = standard.fit_transform(X_train)
y_train_normal = standard.fit_transform(y_train)
X_test_normal = standard.fit_transform(X_test)
# 训练和预测
model = LinearRegression()
model.fit(X_train_normal,y_train_normal)
y_3 = model.predict(X_test_normal)
np.savetxt('D:/桌面/1/result3.txt',y_3)