Вычислительный класс-вес для несбалансированных классов - PullRequest
0 голосов
/ 26 апреля 2019

Я пытаюсь реализовать '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. Безопасно ли вообще использовать этот вид весовой категории? Есть ли вероятность, что такой огромный штраф может сломать мою сеть?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...