sklearn MinMaxScaler对某一个特征反归一化

sklearn MinMaxScaler对某一个特征反归一化


sklearn MinMaxScaler可以对特征放缩,放缩是按列进行的,每列的最大值会被置为1:

import numpy as np
from sklearn.preprocessing import MinMaxScaler
# 指定放缩范围
scaler = MinMaxScaler(feature_range=(0, 1))
# 构建测试数据
data = np.random.randint(30,size=(5,6))
'''
16	12	23	0	3	15
16	4	28	22	24	17
26	24	18	25	16	15
12	17	1	6	0	27
0	12	21	16	18	20
'''
# 数据归一化
trans_data = scaler.fit_transform(data)
'''
0.615385	0.4		0.814815	0		0.125		0
0.615385	0		1			0.88	1			0.166667
1			1		0.62963		1		0.666667	0
0.461538	0.65	0			0.24	0			1
0			0.4		0.740741	0.64	0.75	0.416667
'''

将归一化的数据返回原来的取值区间可以通过scaler.inverse_transform()实现:

# 反归一化
inverse_data = scaler.inverse_transform(trans_data)
'''
16	12	23	0	3	15
16	4	28	22	24	17
26	24	18	25	16	15
12	17	1	6	0	27
0	12	21	16	18	20
'''

由于归一化是按列进行的,scaler会对每一列生成用于放缩的属性,所以在反归一化时,需要输入数据维度和原数据维度相同。

有时在归一化时包含了多个特征,但只需要对其中某一个特征反归一化,如只需要对data中的第3列反归一化,可通过如下函数实现:

def inverse_transform_col(scaler,y,n_col):
    '''scaler是对包含多个feature的X拟合的,y对应其中一个feature,n_col为y在X中对应的列编号.返回y的反归一化结果'''
    y = y.copy()
    y -= scaler.min_[n_col]
    y /= scaler.scale_[n_col]
    return y
    
# 第3列归一化的值
y = trans_data[:,2]
'''
0.814815
1
0.62963
0
0.740741
'''
# 第3列反归一化
trans_col_3 = inverse_transform_col(scaler,y,n_col=2)
'''
23
28
18
1
21
'''

你可能感兴趣的:(怎么办系列)