我正在处理一个信号分类问题,希望首先缩放数据集矩阵,但我的数据是3D格式(批次、长度、通道)。
我尝试使用Scikit-learn标准定标器:
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
但是我收到了这个错误消息:
找到dim为3的数组。应为StandardScaler〈= 2
我认为一个解决方案是将矩阵按每个通道拆分为多个2D矩阵,分别缩放,然后恢复为3D格式,但我想知道是否有更好的解决方案。
非常感谢。
8条答案
按热度按时间ma8fv8wu1#
只有3行代码...
chhqkbe12#
您必须为每个通道安装并存储一个定标器
lrpiutwd3#
如果您希望以不同的方式缩放每个特征(如
StandardScaler
),可以使用以下命令:它只是在输入到sklearn的
StandardScaler
之前将输入的特征展平,然后再重新整形,用法与StandardScaler
相同:印刷品
参数
with_mean
和with_std
直接传递给StandardScaler
,因此按预期工作。copy=False
不起作用,因为整形不是就地发生的。对于二维输入,NDStandardScaler
的工作方式与StandardScaler
类似:印刷品
就像在
StandardScaler
的sklearn示例中一样。6ju8rftf4#
一种优雅的方法是使用类继承,如下所示:
用法:
tkqqtvp15#
我使用Normalization方案来处理形状为(2500,512,642)--〉(采样、时间步长、特征/空间位置)的时空数据。以下代码也可用于Normalization及其逆过程。
t2a7ltrp6#
只是像这样改变数据的形状。对于零填充,使用类似的方法:
at0kjp5o7#
如果要处理管道,可以使用此类
xam8gpfp8#
还有一个简单的方法,不使用for循环,也不生成函数或方法,我只是用“array.reshape(-1,1)”将给定的输入数组扁平化,然后放入minmaxscaler中,再经过变换,将其转换成原来的形状。
例如,我已经实现了来自tensorflow的cifar 10数据集: