使用Keras训练的回归模型对所有测试特征集预测相同输出

我正在尝试构建一个回归模型,使用数据集https://www.kaggle.com/shubhammehta21/movie-lens-small-latest-dataset来预测电影的“评级”。然而,在训练模型后,预测结果对所有测试特征都输出了相同的值。我已经阅读了之前类似的建议,这些建议包括调整学习率、特征数量以及检查预测模型是否与训练模型相同,但这些方法对我都没有效果。

我加载并处理数据如下:

links= pd.read_csv('../input/movie-lens-small-latest-dataset/links.csv')movies=pd.read_csv('../input/movie-lens-small-latest-dataset/movies.csv')...dataset=movies.merge(ratings,on='movieId').merge(tags,on='movieId').merge(links,on='movieId')to_drop='title','genres','timestamp_x','timestamp_y','userId_y','imdbId','tmdbId']dataset.drop(columns=to_drop,inplace=True)dataset=pd.get_dummies(dataset)

代码展示了我是如何构建回归模型的。我尝试过调整神经元和层的数量,但这并没有影响输出结果。

from keras.models import Sequentialfrom keras.layers.core import Dense, Activationfrom keras.optimizers import Adammodel = Sequential()model.add(Dense(13, input_dim=1586, kernel_initializer='zero', activation='relu'))model.add(Dense(6, kernel_initializer='normal', activation='relu'))model.add(Dense(1, kernel_initializer='normal',activation='linear'))# Compile modeladam = Adam(lr=0.001)model.compile(loss='mean_squared_error', optimizer=adam,metrics=['mse','mae'])model.summary()history = model.fit(train_dataset,train_labels,batch_size=30, epochs=10,verbose=1, validation_split=0.3)score = model.evaluate(validation_dataset,validation_labels)print("Test score:", score)

每当我尝试预测测试数据集时:

model.predict(test_dataset)

它预测的值总是

3.97

对于所有值。我期望得到的值范围在0到5之间。


回答:

你绝对不应该(我是说,绝对不应该)使用kernel_initializer='zero' – 说实话,我很惊讶Keras居然有这个选项!

此外,kernel_initializer='normal'也是不推荐的。

作为第一步,移除所有kernel_initializer参数,以便恢复到默认和推荐的kernel_initializer='glorot-uniform';请记住,默认值的存在是有原因的(通常它们效果很好),只有在你确实有理由这样做(我相信你这里没有这样的理由)并且你知道自己在做什么时,你才应该改变它们。

如果仍然没有得到你期望的结果,可以尝试其他参数(层的数量/神经元数量、更多的训练轮次等);起初,你应该保持Adam优化器的学习率(lr)不变(它也是这些似乎在不同情况下都能很好工作的默认值之一)。

Related Posts

在使用k近邻算法时,有没有办法获取被使用的“邻居”?

我想找到一种方法来确定在我的knn算法中实际使用了哪些…

Theano在Google Colab上无法启用GPU支持

我在尝试使用Theano库训练一个模型。由于我的电脑内…

准确性评分似乎有误

这里是代码: from sklearn.metrics…

Keras Functional API: “错误检查输入时:期望input_1具有4个维度,但得到形状为(X, Y)的数组”

我在尝试使用Keras的fit_generator来训…

如何使用sklearn.datasets.make_classification在指定范围内生成合成数据?

我想为分类问题创建合成数据。我使用了sklearn.d…

如何处理预测时不在训练集中的标签

已关闭。 此问题与编程或软件开发无关。目前不接受回答。…

发表回复

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