Keras模型产生相同的输出

时间:2019-09-23 02:54:58

标签: python machine-learning keras

我看过几个有类似问题的问题,但没有一个解决了我的问题。我正在尝试将Keras中的神经网络拟合到具有22种输入特征的数据集以进行二进制分类。问题是我只有195个训练样本。我知道这是一个很小的数据集,但我不知道是否有可能以合理的精度拟合模型(我的目标是> 95%的精度)。我遇到的问题是我的模型仅输出1并获得75%的准确度,因为我的数据集是75%的阳性病例。这是我的代码:

data = pd.read_csv("") #filename omitted, but it loads properly
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 个答案:

答案 0 :(得分:1)

您需要尝试一些方法以提高准确性:

  1. 不要简单地将数据集直接输入到NN。做一些数据准备,例如平衡响应类。请查看各种采样技术,例如欠采样,过采样,SMOTE等。如果您的数据集具有平衡的类分布,则可以很好地提高准确性。

  2. 您应该使用activation = 'softmax'激活功能来代替sigmoid

除了这些之外,您还应该尝试其他几种架构,lr值,否。时代,batch_size,优化程序等。