У меня есть обучающие данные T, содержащие основные истины 3 классов C1, C2 и C3. Обучающие данные очень малы по размеру (около 1000 строк). Из 1000 строк около 700 строк используется для C1, около 250 строк для C2< /em> и всего около 50 строк для C3. Поскольку количество строк для C3 очень мало, мы не используем многоклассовую классификацию, а вместо этого используем две RF-модели: одну для прогнозирования C1, а другую для прогнозирования C1 и C3комбинированные. Назовем эти модели m1 и m2. Модели дают прогнозы pred_m1 и pred_m2 для прогнозирования C1 и C1 и C3 соответственно. Получив прогнозы двух моделей, я нахожу два пороговых значения t1 и t2 для нахождения C1, C2 и C3, таких, что оценки F1 для всех три класса максимальны.
Код: Выделить всё
def map_preds_to_classes(x):
if x.pred_m2 < t2:
return 'C2':
if x.pred_m2 >= t2 and x.pred_m1 >= t1:
return 'C1':
return 'C3'
df['class'] = df.apply(map_preds_to_classes, axis=1)
f1_c1 = f1_score(df['class'] == 'C1', df['ground_truth'] == 'C1')
f1_c2 = f1_score(df['class'] == 'C2', df['ground_truth'] == 'C2')
f1_c3 = f1_score(df['class'] == 'C3', df['ground_truth'] == 'C3')
Есть ли способ использовать scipy, чтобы найти t1 и t2, чтобы f1_c1, f1_c2 и f1_c3 были развернут?
Подробнее здесь:
https://stackoverflow.com/questions/792 ... redictions