修改代码,要求以测试集最大AUC为评价指标,同时考虑到标签中的1比0要少:model = Sequential() model.add(Dense(64, activation='relu', input_dim=X_train.shape[1])) model.add(Dropout(0.5)) model.add(Dense(32, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(1, activation='sigmoid')) model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) early_stopping = EarlyStopping(monitor='val_loss', patience=5, verbose=1) model_checkpoint = ModelCheckpoint('model.h5', monitor='val_loss', save_best_only=True, verbose=1) history = model.fit(X_train, y_train_forced_turnover_nolimited, epochs=50, batch_size=32, validation_data=(X_test, y_test_forced_turnover_nolimited), callbacks=[early_stopping, model_checkpoint]) model.load_weights('model.h5') pred = model.predict(X_test) auc = roc_auc_score(y_test_forced_turnover_nolimited, pred) print('Testing AUC:', auc)
时间: 2024-02-24 14:55:33 浏览: 150
可以尝试使用 class_weight 参数来平衡标签中1和0的数量。同时,将 metrics 中的参数从 'accuracy' 改为 'auc',并将 loss function 改为 'binary_crossentropy' 以适应二分类问题。修改后的代码如下:
```
model = Sequential()
model.add(Dense(64, activation='relu', input_dim=X_train.shape[1]))
model.add(Dropout(0.5))
model.add(Dense(32, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['auc'])
early_stopping = EarlyStopping(monitor='val_loss', patience=5, verbose=1)
model_checkpoint = ModelCheckpoint('model.h5', monitor='val_auc', save_best_only=True, verbose=1)
class_weight = {0: 1, 1: 10} # 根据实际情况调整权重
history = model.fit(X_train, y_train_forced_turnover_nolimited, epochs=50, batch_size=32,
validation_data=(X_test, y_test_forced_turnover_nolimited),
callbacks=[early_stopping, model_checkpoint], class_weight=class_weight)
model.load_weights('model.h5')
pred = model.predict(X_test)
auc = roc_auc_score(y_test_forced_turnover_nolimited, pred)
print('Testing AUC:', auc)
```
其中,class_weight 的设置可以根据实际情况进行调整,以达到平衡标签数量的目的。
阅读全文