如何用MinMaxScaler归一化4D输入数组?
解决4D数组用MinMaxScaler归一化的问题
你的4D数组形状为(3,1,5,4),包含3个样本,每个样本对应4个特征(每列一个特征)。要适配MinMaxScaler的2D输入要求,只需通过形状转换、归一化、形状恢复三步实现:
步骤1:调整数组形状为2D格式
首先去掉数组中维度为1的冗余轴,再将样本维度和样本内的行维度合并,得到(n_samples_total, n_features)格式的2D数组:
import numpy as np from sklearn.preprocessing import MinMaxScaler A = np.array([ [[[0, 1, 2, 3], [3, 0, 1, 2], [2, 3, 0, 1], [1, 3, 2, 1], [1, 2, 3, 0]]], [[[9, 8, 7, 6], [5, 4, 3, 2], [0, 9, 8, 3], [1, 9, 2, 3], [1, 0, -1, 2]]], [[[0, 7, 1, 2], [1, 2, 1, 0], [0, 2, 0, 7], [-1, 3, 0, 1], [1, 0, 1, 0]]] ]) # 去掉维度为1的轴,形状变为(3,5,4) squeezed_A = np.squeeze(A, axis=1) # 合并前两个维度,得到(3*5,4)=(15,4)的2D数组 reshaped_A = squeezed_A.reshape(-1, 4)
步骤2:用MinMaxScaler归一化
直接对2D数组执行拟合和转换操作,MinMaxScaler会自动按列(即每个特征)进行归一化:
scaler = MinMaxScaler() scaled_reshaped = scaler.fit_transform(reshaped_A)
步骤3:恢复数组为原4D形状
将归一化后的2D数组重新转换回原始的4D结构:
# 先恢复为(3,5,4) scaled_squeezed = scaled_reshaped.reshape(3, 5, 4) # 添加维度为1的轴,回到(3,1,5,4) scaled_A = np.expand_dims(scaled_squeezed, axis=1) # 验证形状是否匹配 print(scaled_A.shape) # 输出(3,1,5,4)
关键说明
- 上述方法是全局归一化:用所有样本中每个特征的全局最小值和最大值来缩放,符合机器学习中归一化的常规做法(确保训练数据的统计量一致)。
- 如果需要对每个样本单独归一化(仅用当前样本的特征范围),可以修改逻辑为遍历每个样本单独处理,但这种场景在机器学习中较少见。
内容的提问来源于stack exchange,提问作者Amina Umar
相关产品推荐
相关产品推荐

