Хорошо, поэтому я реализовал некоторые модификации вашего кода, которые я вставил сюда.Этот фрагмент идет сразу после того, как вы прочитаете CSV и удалите пустые строки.Вы должны сами реализовать train_test_split.
df['categorizedAccount'] = df['categorizedAccount'].astype('category')
df['all_text'] = df['txn_type'] + ' ' + df['name'] + ' ' + df['memo']
X = df['all_text']
y = df['categorizedAccount']
X_train = X # Change these four lines for train_test_split
X_test = X # I don't have enough rows in the mock dataset to implement it,
y_train = y # And it returns an error
y_test = y
tfidf = TfidfVectorizer()
X_train_transformed = tfidf.fit_transform(X_train)
classifier = LogisticRegression(random_state=0)
classifier.fit(X_train_transformed, y_train)
X_test_transformed = tfidf.transform(X_test)
y_pred = classifier.predict(X_test_transformed)
classifier.score(X_test_transformed, y_pred)
Несколько комментариев, однако:
from sklearn.feature_extraction.text import TfidfVectorizer
Импортировано один раз, хорошо
from io import StringIO
Насколько мне нужноможно увидеть
from sklearn.feature_extraction.text import TfidfVectorizer
Почему вы импортируете его снова?
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
TfidfVectorizer выполняет работу как CountVectorizer, так и TfidfTransformer.От sklearn: «Эквивалент CountVectorizer, за которым следует TfidfTransformer».См. здесь для получения дополнительной информации
from sklearn.naive_bayes import MultinomialNB
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import LinearSVC
from sklearn.model_selection import cross_val_score
Не используется, не импортируйте.
Дополнительно:
1) Непонятно, что вы пытаетесьделать с факторизацией.TfidfVectorizer автоматически выполняет токенизацию для любой предоставленной вами строки текста.Все столбцы, которые вы выбрали в исходном коде, содержат только строки, поэтому имеет смысл объединить их и позволить tfidf выполнить токенизацию, а не пытаться сделать это самостоятельно.
2) Используйте Конвейер конструктор, он спасет вашу жизнь.
3) X = df.loc[:, ['type_id', 'name_id', 'memo_id']]
Этот тип соединения выглядит очень плохо, просто позвоните df[['column_name_1','column_name_2','column_name_3']]
4) И помните PEP20, "Простойлучше, чем сложный "!
В качестве последнего совета, при разработке модели ML всегда лучше начать с чего-то простого и простого, а затем развиваться дальше, когда у вас есть что-то, что работает.