我看到了一些类似问题的提问,但没有一个能解决我的问题。我试图用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
回答:
为了获得更好的准确率,你需要尝试以下几点:
-
不要直接将数据集输入到神经网络中。进行一些数据预处理,例如平衡响应类。请查看各种抽样技术,如欠抽样、过抽样、SMOTE等。如果你的数据集类别分布平衡,准确率可以得到显著提升。
-
不要使用
activation = 'softmax'
,你应该使用sigmoid
激活函数。
除了这些,你还应该尝试其他几种架构、学习率值、轮数、批量大小、优化器等。