Я пытаюсь реализовать 'compute_class_weight' из 'sklearn.utils.class_weight' самостоятельно. У меня есть несколько вопросов по этому поводу.
Реализация, которую я пробую:
classes = ['a','b','c','d']
for cls in classes:
instamceCountDict[cls] = getCount(cls)
majority = max(instanceCountDict.values())
for cls in classes:
classWeight[cls] = round(majority / classCountDict[cls],2)
Реализация, которую я нашел в интернете:
classes = ['a','b','c','d']
totalSamples = 0
for cls in classes:
instamceCountDict[cls] = getCount(cls)
totalSamples += instanceCountDict[cls]
mu = 0.15 #this can be varied
for cls in classes:
score = math.log(mu * totalSamples / float(instanceCountDict[cls]))
classWeight[cls] = score if score > 1.0 else 1.0
Мой вопрос: какой из них является правильным или какой должен быть более эффективным? При первом подходе для сильно недопредставленных классов я получаю огромные веса классов, некоторые из которых находятся в диапазоне от 300 до 400.
Безопасно ли вообще использовать этот вид весовой категории? Есть ли вероятность, что такой огромный штраф может сломать мою сеть?