如何标准化3D数组的特定维度

sklearn.preprocessing.normalize 仅支持二维数组的标准化。然而,我目前有一个用于LSTM模型训练的三维数组(批次、步长、特征),我想对特征进行标准化。

我尝试过 tf.keras.utils.normalize(X_train, axis=-1, order=2 ) 但结果不正确。

另一种方法是将三维数组折叠成二维数组

print(X_train.shape)print(max(X_train[0][0]))

输出

(1883, 100, 68)6.028588763956215
scaler = StandardScaler()X_train = scaler.fit_transform(X_train.reshape(X_train.shape[0], -1)).reshape(X_train.shape)X_test = scaler.transform(X_test.reshape(X_test.shape[0], -1)).reshape(X_test.shape)print(X_train.shape)print(max(X_train[0][0]))print(min(X_train[0][0]))

输出

(1883, 100, 68)3.2232538993444533-1.9056918449890343

数值仍然不在1和-1之间。

我应该如何处理这个问题?


回答:

如评论中所建议,我提供了答案

你可以使用 sklearn 的预处理方法来缩放三维数组。你只需将其转换为二维数据进行拟合,然后再转换回三维。这可以通过几行代码轻松完成。

如果你希望缩放后的数据在范围(-1,1)内,你可以简单地使用 MinMaxScaler,并指定 feature_range=(-1,1)

X_train = np.random.uniform(-20,100, (1883, 100, 68))X_test = np.random.uniform(-20,100, (100, 100, 68))print(X_train.shape)print(X_train.min().round(5), X_train.max().round(5)) # -20, 100scaler = MinMaxScaler(feature_range=(-1,1))X_train = scaler.fit_transform(X_train.reshape(X_train.shape[0], -1)).reshape(X_train.shape)X_test = scaler.transform(X_test.reshape(X_test.shape[0], -1)).reshape(X_test.shape)print(X_train.shape)print(X_train.min().round(5), X_train.max().round(5)) # -1, 1

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注