Бинарный классификатор, который я построил, имеет вспомогательное значение: 72% на тренировочных данных и 78% на тестовых данных.Однако, когда я сохраняю параметры модели и оцениваю невидимые несбалансированные данные, он предсказывает только одно значение для всех точек данных.
Ниже приводится архитектура модели
#Define Model
model = Sequential()
# Input layer
model.add(Dense(units = 512, activation = "relu", input_dim = input_dim, kernel_initializer = "normal", kernel_regularizer=regularizers.l2(0.005),
kernel_constraint = max_norm(5.)))
# Add dropout regularization
##model.add(Dropout(rate=0.2))
model.add(Dense(units = 512, activation = "relu", input_dim = input_dim, kernel_initializer = "normal", kernel_regularizer=regularizers.l2(0.005),
kernel_constraint = max_norm(5.)))
# Add dropout regularization
##model.add(Dropout(rate=0.2))
# First hidden layer
model.add(Dense(units = 256, activation='relu', kernel_regularizer=regularizers.l2(0.005), kernel_constraint=max_norm(5)))
# Add dropout regularization
##model.add(Dropout(rate=0.1))
# Second hidden layer
model.add(Dense(128, activation='relu', kernel_regularizer=regularizers.l2(0.005), kernel_constraint=max_norm(5)))
# Add dropout regularization
##model.add(Dropout(rate=0.1))
# Third hidden layer
model.add(Dense(64, activation='relu', kernel_regularizer=regularizers.l2(0.05), kernel_constraint=max_norm(5)))
# Add dropout regularization
##model.add(Dropout(rate=0.1))
# Output layer
model.add(layers.Dense(units = 1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy',auc])
model.summary()
Веса классов определены следующим образом:
def get_class_weights(y):
counter = Counter(y)
majority = max(counter.values())
return {cls: round(float(majority)/float(count), 2) for cls, count in counter.items()}
Для невидимых данных прогнозируется только 0,98 для всех точек данных.Прочитал много литературы по несбалансированным данным и перепробовал все.Его все еще не становится лучше.Цени любую помощь / вклад.