Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to standard scale a 3D matrix?

Tags:

I am working on a signal classification problem and would like to scale the dataset matrix first, but my data is in a 3D format (batch, length, channels).
I tried to use Scikit-learn Standard Scaler:

from sklearn.preprocessing import StandardScaler sc = StandardScaler() X_train = sc.fit_transform(X_train) X_test = sc.transform(X_test) 

But I've got this error message:

Found array with dim 3. StandardScaler expected <= 2

I think one solution would be to split the matrix by each channel in multiples 2D matrices, scale them separately and then put back in 3D format, but I wonder if there is a better solution.
Thank you very much.

like image 442
JPM Avatar asked May 02 '18 01:05

JPM


1 Answers

With only 3 line of code...

scaler = StandardScaler() X_train = scaler.fit_transform(X_train.reshape(-1, X_train.shape[-1])).reshape(X_train.shape) X_test = scaler.transform(X_test.reshape(-1, X_test.shape[-1])).reshape(X_test.shape) 
like image 168
Marco Cerliani Avatar answered Sep 20 '22 20:09

Marco Cerliani