For imbalanced datasets (either in the context of computer vision or NLP), from what I learned, it is good to use a weighted log loss. However, in competitions, the people who are in top positions are not using weighted loss functions, but treating the classification problem as a regression problem, and using MSE as the loss function. I want to know which one should I use for imbalanced datasets? Or maybe should I combine both?
the weighted loss I am talking is:: neg_weights= pos_weights= for i in tqdm(range(5)):##range(num_classes) neg_weights.append(np.sum(y_train[:,i],axis=0)/y_train.shape) pos_weights.append(np.sum(1-y_train[:,i],axis=0)/y_train.shape) def customloss(y_true,y_pred): y_true=tf.cast(y_true,dtype=y_pred.dtype) loss=0.0 loss_pos=0.0 loss_neg=0.0 for i in range(5): loss_pos+=-1*(K.mean(pos_weights[i]*y_true[:,i]*K.log(y_pred[:,i]+1e-8))) loss_neg+=-1*(K.mean(neg_weights[i]*(1-y_true[:,i])*K.log(1-y_pred[:,i]+1e-8))) loss=loss_pos+loss_neg return loss
the competition I was talking about is https://www.kaggle.com/c/aptos2019-blindness-detection/discussion/109594