我有一个二元分类问题,想建立一个 NN 模型,将数据分类为 0 类还是 1 类。
我的实际实现如下所示:
# Split dataset in train and test data
X_train, X_test, Y_train, Y_test = train_test_split(normalized_X, Y, test_size=0.3, random_state=seed)
# Build the model
model = Sequential()
model.add(Dense(23, input_dim=45, kernel_initializer='normal', activation='relu'))
model.add(Dense(1, kernel_initializer='normal', activation='sigmoid'))
# Compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# Fit the model
history = model.fit(X_train, Y_train, validation_split=0.3, epochs=200, batch_size=5, verbose=1, callbacks=[tensorboard, time_callback])
我在最后一个训练时期得到了 79.85% 的 val_accuracy。
我使用混淆矩阵来评估模型:
y_pred = model.predict(X_test)
y_pred =(y_pred>0.5)
list(y_pred)
cm = confusion_matrix(Y_test, y_pred)
print(cm)
我得到这些值: [[ 622 205] [ 216 1055]]
这使得正确预测类(622 TN + 1055 TP)的 79.93%(与最后一个 epoch 的 val_accuracy 大致相同)。
现在我的问题是:如何改进我的神经网络,以便我超越它?好的,我正在使用 1 个隐藏的密集层,有 23 个节点。何时使用 Dense 层,何时使用 Conv2D 或 Dropout,或 Keras 的任何其他层?
我正在对数值数据进行分类。这是我的数据的样子(数据框分成 2 张照片,因为它对于只有 1 张来说太宽了):
PS:分类特征是 One-Hot-Encoded 使用:
basic_df = pd.get_dummies(basic_df, columns=['industry', 'weekday', 'category_name', 'page_name', 'type'])
并且标签列是“成功的”。