机器学习——归一化

定义:使得梯度下降在不同维度θ参数上(不同数量级),即取消各维数据之间的数量级差别,可以使各个参数步调一致协同的进行梯度下降。(统一量纲

归一化对象:一般只对特征向量进行归一化,而不对目标值进行归一化。

下面介绍两种归一化的方法,并且使用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=XmaxXminXXmin
缺点:受离群点影响比较大,比如原本一组数据实在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=1nxiδ的求法:δ=n1i=1n(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)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值