Я пытаюсь выполнить некоторую классификацию текста с помощью MultinomialNB, но у меня возникают проблемы, потому что мои данные несбалансированы. (Ниже приведены некоторые примеры данных для простоты. На самом деле мои намного больше.) Я пытаюсь пересчитать свои данные, используя передискретизацию, и в идеале я хотел бы встроить их в этот конвейер.
Приведенный ниже конвейер работает нормально без избыточной выборки, но, опять же, в реальной жизни мои данные этого требуют. Это очень несбалансировано.
В этом текущем коде я получаю сообщение об ошибке: «Ошибка типа: все промежуточные шаги должны быть преобразователями и выполнять подгонку и преобразование».
Как мне встроить RandomOverSampler в этот конвейер?
data = [['round red fruit that is sweet','apple'],['long yellow fruit with a peel','banana'],
['round green fruit that is soft and sweet','pear'], ['red fruit that is common', 'apple'],
['tiny fruits that grow in bunches','grapes'],['purple fruits', 'grapes'], ['yellow and long', 'banana'],
['round, small, green', 'grapes'], ['can be red, green, or purple', 'grapes'], ['tiny fruits', 'grapes'],
['small fruits', 'grapes']]
df = pd.DataFrame(data,columns=['Description','Type'])
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 0)
text_clf = Pipeline([('vect', CountVectorizer()),
('tfidf', TfidfTransformer()),
('RUS', RandomOverSampler()),
('clf', MultinomialNB())])
text_clf = text_clf.fit(X_train, y_train)
y_pred = text_clf.predict(X_test)
print('Score:',text_clf.score(X_test, y_test))