Это мой первый проект НЛП. Я пытаюсь использовать SMOTE для классификатора с 14 классами. Мне нужно преобразовать классы в массив перед использованием SMOTE. Я попытался использовать MultiLinearBinarizer, но он не работает. Из трассировки стека кажется, что все конвертируется, поэтому я не понимаю, почему он все еще обрабатывается как строка.
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import Pipeline
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.preprocessing import MultiLabelBinarizer
nb = Pipeline([('vect', CountVectorizer()),
('tfidf', TfidfTransformer()),
('clf', MultinomialNB()),
])
nb.fit(X_train, y_train)
mlb = MultiLabelBinarizer()
print(mlb.fit_transform(df["Technique"].str.split(",")))
print(mlb.classes_)
import imblearn
from imblearn.over_sampling import SMOTE
smote = SMOTE('minority')
x_sm, y_sm = smote.fit_sample(X_train, y_train)
#print(x_sm.shape, y_sm.shape)
pd.DataFrame(x_sm.todense(), columns=tv.get_feature_names())
Я получаю ошибку ValueError: could not convert string to float: 'left left center'
Вот трассировка стека
[[1 0 0 ... 0 0 0]
[1 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
...
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]]
['Appeal_to_Authority' 'Appeal_to_fear-prejudice' 'Bandwagon'
'Black-and-White_Fallacy' 'Causal_Oversimplification' 'Doubt'
'Exaggeration' 'Flag-Waving' 'Labeling' 'Loaded_Language' 'Minimisation'
'Name_Calling' 'Red_Herring' 'Reductio_ad_hitlerum' 'Repetition'
'Slogans' 'Straw_Men' 'Thought-terminating_Cliches' 'Whataboutism']
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-45-68681190410f> in <module>()
10 smote = SMOTE('minority')
11
---> 12 x_sm, y_sm = smote.fit_sample(X_train, y_train)
13 #print(x_sm.shape, y_sm.shape)
14 pd.DataFrame(x_sm.todense(), columns=tv.get_feature_names())
8 frames
/usr/local/lib/python3.6/dist-packages/numpy/core/_asarray.py in asarray(a, dtype, order)
83
84 """
---> 85 return array(a, dtype, copy=False, order=order)
86
87
ValueError: could not convert string to float: 'left left center'