#python #nlp #catboost #imbalanced-data
Вопрос:
Это довольно глупый вопрос, но я нигде не смог найти, поэтому я рискну здесь…
Я создаю классификатор с использованием CatBoost. Поскольку это проблема NLP, моими функциями являются слова / токены в твите, а целью является классификация. В принципе, у меня есть что-то вроде этого:
tweet target
I was looking at her... happy
It's really hot today mad
Last Friday night was... sad
.
.
.
Из-за соответствия требованиям компании я не могу поделиться набором данных, но я думаю, вы, ребята, поймете и даже можете попробовать использовать другой фрейм данных (этот очень похож https://www.kaggle.com/datatattle/covid-19-nlp-text-classification ). У меня есть 5 классов в качестве цели, и набор данных несбалансирован. Веса:
happy: 0.80
neutral: 0.11
mad: 0.080
sad: 0.005
confused: 0.005
Итак, после разделения на обучение и тестирование, стратифицированные по цели, я использовал этот конвейер:
pipe = Pipeline([
(
"tokenizer",CountVectorizer(analyzer= 'word',
ngram_range=(1, 2),
token_pattern=r"w ",
stop_words="english"
)),
("feature_selection", SelectKBest(SelectKBest, k=90)),
("clf", CatBoostClassifier())
])
pipe.fit(X_train, y_train)
Поскольку набор данных несбалансирован, как я могу использовать class_weights здесь?
Я видел учебник, делающий что-то похожее на это:
CatBoostClassifier(class_weights=[1-0.8, 1-0.11, 1-0.08, 1-0.005, 1-0.005])
Но как мне узнать, какой из них является правильным порядком?
Я попытался использовать имя, например class_weights={‘happy’: 1-0.8 …}, но это тоже не сработало.
Ответ №1:
Было бы полезно узнать, что произошло, чтобы заставить вас определить, что добавление весов классов, указанных выше, также не сработало. Вы имеете в виду, что модель была не такой производительной, или вы столкнулись с ошибкой?
Ваш второй пример — это то, как вы устанавливаете веса классов для метки, которая не состоит из последовательных целых чисел (например, class_weights={'a': 1.0, 'b': 0.5, 'c': 2.0}
). Смотрите документацию CatBoost по class_weights .
Вы также можете попробовать auto_class_weights='Balanced'
, поскольку вы пытаетесь установить веса, обратные балансу классов. Смотрите документацию CatBoost по auto_class_weights .