神经网络数据缩放

我使用了Keras中的顺序模型进行类别分类。

给定数据:

x_train = np.random.random((5000, 20))y_train = keras.utils.to_categorical(np.random.randint(10, size=(5000, 1)), num_classes=10)x_test = np.random.random((500, 20))y_test = keras.utils.to_categorical(np.random.randint(10, size=(500, 1)), num_classes=10)

特征缩放很重要:

scaler = StandardScaler()scaler.fit(x_train) x_train = scaler.transform(x_train) x_test = scaler.transform(x_test) 

模型

model = Sequential()model.add(Dense(64, activation='relu', input_dim=20))model.add(Dropout(0.5))model.add(Dense(64, activation='relu'))model.add(Dropout(0.5))model.add(Dense(10, activation='softmax'))    model.compile(loss='categorical_crossentropy',              optimizer='adam',              metrics=['accuracy'])model.fit(x_train, y_train,          epochs=100,          batch_size=32)

待预测数据

z = np.random.random((9999000, 20)) 

我应该缩放这些数据吗?如何缩放这些数据?

predictions = model.predict_classes(z)

如你所见,与待预测数据(z)相比,训练和测试样本的数量非常少。使用基于x_train拟合的缩放器来重新缩放x_test,似乎是可以的。然而,使用仅基于5000个样本拟合的同一缩放器来重新缩放z(9999000个样本),似乎不太合理。在深度学习领域,有没有解决这个问题的最佳实践?

对于不敏感于特征缩放的分类器,如随机森林,不存在这个问题。然而,对于深度学习,这个问题确实存在。

这里展示的训练数据仅用于示例目的。在实际问题中,训练数据并非来自相同的(均匀)概率分布。标记数据是困难的,训练数据存在人类偏见,倾向于易于标记的样本。只有那些易于标记的样本被标记了。


回答:

然而,使用仅基于5000个样本拟合的同一缩放器来重新缩放z(9999000个样本),似乎不太合理。

不清楚你为什么这么认为。这正是标准做法,即使用基于训练数据拟合的缩放器,正如你对测试数据所做的那样:

z_scaled = scaler.transform(z) predictions = model.predict_classes(z_scaled)

样本数量(500或10^6)在这里没有任何区别;重要的是所有这些数据(xz)都来自相同的概率分布。在实践中(对于可能仍在未来的数据),这只是一个假设(模型部署后需要注意的一件事正是这个假设是否不成立,或者在某段时间后不再正确)。但特别是在这里,你的模拟数据来自完全相同的(均匀)概率分布,这是完全正确的做法。

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中创建了一个多类分类项目。该项目可以对…

发表回复

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