Работа с признаками в текстовой классификации
У меня есть дата-сет, в котором присутствуют 4 признака, дата, текст, категориальные (штаты), численный (компания). Я использую лемматизацию, далее удаляю стоп слова и создаю разреженную матрицу (для использования в обучении). Как мне объединить остальные 3 признака с полученной матрицей для внедрения уже в модель машинного обучения (И нужно ли это вообще делать)?
import re
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
def tokenLemmat(text):
tokens = [word for sent in nltk.sent_tokenize(text) for word in nltk.word_tokenize(sent)]
filtered_tokens = []
for token in tokens:
if re.search('[a-zA-Z]', token):
filtered_tokens.append(token)
lem = [lemmatizer.lemmatize(t) for t in filtered_tokens]
return lem
import nltk
stopwords = nltk.corpus.stopwords.words('english')
nltk.download('stopwords')
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf_vectorizer = TfidfVectorizer(max_df=0.8, max_features=10000, min_df=0.01, stop_words=stopwords, use_idf=True, tokenizer=tokenLemmat, ngram_range=(1, 1))
title = file['title']
tfidf_matrix = tfidf_vectorizer.fit_transform(title)
matrix_numbers = tfidf_matrix.toarray()# Разреженная матрица
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Объединить то можно, например, с помощью numpy.hstack, но тогда придётся разреженную матрицу превращать в обычную, что не очень хорошо.
- Можно предварительно понизить размерность разреженных данных до приемлемой (скажем, 50 или 100 фич, а иногда может и 20 фич хватить или даже 2) с помощью
sklearn.decomposition.TruncatedSVD(этот алгоритм может принимать на вход разреженные данные, в отличие от PCA) и уже тогда объединять получившиеся фичи с остальными данными. - Можно применить несколько этапов машинного обучения, например, на первом этапе сделать предсказание вероятностей на основе разреженных данных с помощью
predict_probaалгоритмаsklearn.naive_bayes.GaussianNB, а потом уже объединить эти предсказания с остальными фичами. Но тут надо аккуратно действовать, есть некоторые тонкости в подходе, когда последовательно используются модели машинного обучения, там нужно использовать методы стекинга (предсказывать данные out of fold) и т.д.
