Keras模型输出相同结果

我看到了一些类似问题的提问,但没有一个能解决我的问题。我试图用Keras训练一个神经网络来处理一个有22个输入特征的二分类数据集。问题是我只有195个训练样本。我知道这是一个小数据集,但我不知道是否有可能训练出一个具有合理准确度的模型(我的目标是超过95%的准确度)。我遇到的问题是,我的模型只输出1,并且准确率为75%,因为我的数据集中有75%是正例。以下是我的代码:

data = pd.read_csv("") #文件名已省略,但加载正常
scaler = MinMaxScaler()
X = scaler.fit_transform(X)
Y = data['status']
X = data.drop(['status', 'name'], axis = 1)
xTrain, xTest, yTrain, yTest = train_test_split(X, Y, train_size = 0.8)
model = Sequential()
model.add(Dense(48, input_shape=(22,), activation = 'relu'))
model.add(Dropout(0.5))
model.add(Dense(1, activation = 'softmax'))
optim = keras.optimizers.adam(lr=0.0001)
model.compile(optimizer = optim, loss = 'binary_crossentropy', metrics = ['accuracy'])
model.fit(xTrain, yTrain, epochs = 20, batch_size = 5, validation_data = (xTest, yTest))

我尝试过增加更多的隐藏层,增加训练轮数,调整优化器的学习率,但准确率始终不变。以下是数据集的链接:https://www.dropbox.com/s/c4td650b4z7aizc/fixed.xlsx?dl=0


回答:

为了获得更好的准确率,你需要尝试以下几点:

  1. 不要直接将数据集输入到神经网络中。进行一些数据预处理,例如平衡响应类。请查看各种抽样技术,如欠抽样、过抽样、SMOTE等。如果你的数据集类别分布平衡,准确率可以得到显著提升。

  2. 不要使用activation = 'softmax',你应该使用sigmoid激活函数。

除了这些,你还应该尝试其他几种架构、学习率值、轮数、批量大小、优化器等。

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

发表回复

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