数据归一化与反归一化是一套组合,目的是提升数据的精度和提高运算效率。
归一化:
一般的教程里scaler1会直接命名为scaler,会让别人误以为这是个函数,但其实他是一个变量, 可以通过更改此变量命名去归一不同维度的数据,方便反归一化
# 数据的归一化
data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
scaler1 = MinMaxScaler()
result1 = scaler1.fit_transform(data)
"""
[[0. 0. ]
[0.25 0.25]
[0.5 0.5 ]
[1. 1. ]]
"""
反归一化:
scaler1.inverse_transform(result1)
# 不能直接运行,需要先归一化后再执行反归一化
# scaler可理解为存放了归一化的映射方式
不同维度的两组数据的归一化与反归一化
from sklearn.preprocessing import MinMaxScaler
import numpy as np
data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
data2 = [[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
# 归一化
scaler1 = MinMaxScaler()
scaler2 = MinMaxScaler()
result1 = scaler1.fit_transform(data)
print(result1)
result2 = scaler2.fit_transform(data2)
print(result2)
a = scaler2.inverse_transform(result2) # 将归一化后的结果逆转
print(a)
"""
[[0. 0. ]
[0.25 0.25]
[0.5 0.5 ]
[1. 1. ]]
[[0. 0. 0. ]
[0.33333333 0.33333333 0.33333333]
[0.66666667 0.66666667 0.66666667]
[1. 1. 1. ]]
[[ 1. 2. 3.]
[ 4. 5. 6.]
[ 7. 8. 9.]
[10. 11. 12.]]
"""
以上是调用数据实现的归一化,那么如何自己复现归一化呢?
1、首先需要明白min、max提取的是什么
min、max提取的是里面的一组数组(np格式)。
2、两组数组相减是与数组里每一个数相减。
data1 = [[1, 2], [3, 4], [5, 6], [7, 8]]
data2 = [[9, 10], [11, 12], [13, 14], [15, 16]]
data3 = numpy.array([1,1])
print(data1-data3)
"""
[[0 1]
[2 3]
[4 5]
[6 7]]
"""
以上只是基础逻辑,实际使用时,归一化与反归一化就比较复杂,比如我们的训练模型的参数需要归一化,这里面的min、max是固定的,如果模型训练好带入新的数据,那么就需要提出训练集中的min、max进行归一化,同时反归一化也要有上一组的min、max去反归一化。
那么有什么办法可以实现两组数据的缩
from sklearn.preprocessing import MinMaxScaler data1 = [[1, 2], [3, 4], [5, 6], [7, 8]] data2 = [[9, 10], [11, 12], [13, 14], [15, 16]] # 归一化 scaler1 = MinMaxScaler() result1 = scaler1.fit_transform(data1) # 打印data1里面max、min print(scaler1.data_max_, scaler1.data_min_) """ [7. 8.] [1. 2.] """ # 手动实现归一化函数,目的是使用第一组函数的minmax去缩放第二组数据 def minmax(x,Max,Min): x = (x - Min) / (Max - Min) return x # 写入第二组数据,并传入第一组的min、max x = minmax(data2,scaler1.data_max_,scaler1.data_min_) print(x) """ [[1.33333333 1.33333333] [1.66666667 1.66666667] [2. 2. ] [2.33333333 2.33333333]] """ # 反归一化时,使用sclaler1模型中保存的第一组的minmax直接调用反函数即可 predict_value = scaler1.inverse_transform(x) print(predict_value) """ [[ 9. 10.] [11. 12.] [13. 14.] [15. 16.]] """
放,但是使用的是同一组的minmax呢?