我正在建立分类神经网络,以便对两个不同的类别进行分类。
所以这是一个二进制分类问题,我正在尝试通过使用前馈神经网络来解决此任务。
但是网络无法学习,实际上,准确性在训练过程中从未改变。
我将解释我所做的一切:
特别是,数据集由以下组成:
这些列之一是具有值(0,1)的目标类别,而其他21列是预测变量。 数据集以这种方式平衡:
自标准化以来,所有数据均在(0,1)之间。
可以看到还有NaN值,但是我无法删除它,因为在其他列中还有有意义的值0。
我决定对我的数据进行相关分析,并获得:
由于目标是对目标值进行分类(或预测),如相关矩阵所示, [s,t,u,v,z]列似乎与目标列不相关。 此外,列:
因此,我还删除了列o和列q。
我得到了这种情况:
然后,我将数据集划分为目标列和预测变量列:
X= dataset.iloc[:,1:dataset.shape[1]]
y= dataset.iloc[:,0]
并创建并拟合模型:
from keras.optimizers import Adam
from keras.layers import ReLU
model = Sequential()
model.add(Dense(X.shape[1], kernel_initializer='random_uniform',input_shape=(X.shape[1],)))
model.add(ReLU())
model.add(Dropout(0.1))
model.add(Dense(8))
model.add(ReLU())
model.add(Dropout(0.1))
model.add(Dense(4))
model.add(ReLU())
model.add(Dropout(0.1))
model.add(Dense(1, activation='sigmoid'))
opt = Adam(lr=0.00001, beta_1=0.9, beta_2=0.999, amsgrad=False)
model.compile(loss="binary_crossentropy", optimizer = opt, metrics=["accuracy"])
model.fit(X,y, batch_size=64, epochs=100, validation_split=0.25)
我获得的结果总是这样:
训练49254个样本,验证16419个样本
Epoch 1/100 49254/49254 [=============================]-5秒100us /步-损耗: 0.6930-acc:0.5513-val_loss:0.6929-val_acc:0.5503
Epoch 2/100 49254/49254 [=============================]-2秒 48us / step-损耗:0.6927-acc:0.5516-val_loss:0.6926-val_acc: 0.5503
Epoch 3/100 49254/49254 [=============================]-2秒 48us / step-损失:0.6925-acc:0.5516-val_loss:0.6924-val_acc: 0.5503
Epoch 4/100 49254/49254 [==============================]-2秒 48us / step-损耗:0.6922-acc:0.5516-val_loss:0.6921-val_acc: 0.5503
Epoch 5/100 49254/49254 [=============================]-2秒 47us / step-损失:0.6920-acc:0.5516-val_loss:0.6919-val_acc: 0.5503
Epoch 6/100 49254/49254 [=============================]-2秒 47us / step-损耗:0.6917-acc:0.5516-val_loss:0.6917-val_acc: 0.5503
Epoch 7/100 49254/49254 [=============================]-2秒 48us / step-损耗:0.6915-acc:0.5516-val_loss:0.6914-val_acc: 0.5503
Epoch 8/100 49254/49254 [==============================]-2秒 49us / step-损耗:0.6913-acc:0.5516-val_loss:0.6912-val_acc: 0.5503
Epoch 9/100 49254/49254 [=============================]-2秒 48us / step-损耗:0.6911-acc:0.5516-val_loss:0.6910-val_acc: 0.5503
Epoch 10/100 49254/49254 [=============================]-2秒 48us / step-损耗:0.6909-acc:0.5516-val_loss:0.6908-val_acc: 0.5503
。 。
Epoch 98/100 49254/49254 [=============================]-2秒 49us / step-损耗:0.6878-acc:0.5516-val_loss:0.6881-val_acc: 0.5503
Epoch 99/100 49254/49254 [=============================]-2秒 49us / step-损耗:0.6878-acc:0.5516-val_loss:0.6881-val_acc: 0.5503
Epoch 100/100 49254/49254 [=============================]-2秒 49us / step-损耗:0.6878-acc:0.5516-val_loss:0.6881-val_acc: 0.5503
如您所见,精度始终保持不变,这是我可以看到损失函数发生某些变化的唯一模型。
我试图做的事情:
但是在所有情况下,结果都是相同甚至更差的。
我还尝试使用其他优化器,因为我假设使用此配置,它会立即使损失达到本地最小值
我不知道该如何解决这个问题,我试图了解问题是否与网络的权重有关,或者问题是否在于数据本身。
由于此数据集是通过对不同日期的数据行进行采样而构建的,所以最好使用RNN?
还有关于归一化,是否根据min_max归一化对它们进行归一化?
有人可以帮助我更好地理解这个问题吗? 非常感谢。
答案 0 :(得分:1)
您的神经网络小得离谱,而学习速度却离谱。
至少,请执行以下操作:
您还可以将压差增加到0.5,因为0.1不够。但是,这不是问题的根源。我当然会尝试确定最佳的插补策略来处理缺失值。