机器学习笔记:归一化与反归一化的实际应用

数据归一化与反归一化是一套组合,目的是提升数据的精度和提高运算效率。

归一化:

一般的教程里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呢?

你可能感兴趣的:(量化交易,机器学习,深度学习,人工智能)