Преобразует ли использование конвейера с CountVectorizer и TfidfTransform входные данные в матрицу терминов документа? - PullRequest
0 голосов
/ 17 июня 2020

Действительно ли следующий код преобразует входные данные в dtm, поскольку он не использует метод fit_transform, а подходит только для изучения словаря? Достаточно ли этой модели для обучения?

X_train, X_test, y_train, y_test = train_test_split(df.data, df.target, test_size = 0.2, random_state = 42) 

pipeline = Pipeline(
    [
        ('vect', CountVectorizer()),
        ('tfidf', TfidfTransformer()),
        ('logreg', LogisticRegression()),
    ]
)
pipeline.fit(X_train, y_train)
y_pred= pipeline.predict(X_test)

1 Ответ

0 голосов
/ 17 июня 2020

Во-первых, давайте начнем с простого вопроса в заголовке; мы должны использовать матрицу документ-термин с алгоритмами машинного обучения для классификации?

Ответ вроде как ... Все, что нам нужно сделать, это пространство функций. Пространство, где есть числа вместо слов, пространство, на котором мы можем выполнять математические вычисления. Это пространство может быть (документ x слово), как в вашем случае, или (слово x слово), или даже (отношение зависимости слова x). Все зависит от того, как вы хотите извлекать функции.

Является ли этот конвейер действительным способом классификации? Ответ - да, это простой конвейер для извлечения функций и использования этих функций для классификации. Вот полный пример, из которого вы можете увидеть, что он неплохо справляется с классификацией:

#import needed modules
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer
from sklearn.pipeline import Pipeline
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

# obtain the data (download if needed)
df = fetch_20newsgroups(subset='train', categories=['alt.atheism', 'talk.religion.misc'])

# Use your classifier
pipeline = Pipeline([
    ('vect', CountVectorizer()),
    ('tfidf', TfidfTransformer()),
    ('logreg', LogisticRegression()),
])

# split the data
X_train, X_test, y_train, y_test = train_test_split(df.data, df.target, test_size = 0.2, random_state = 42) 

# train
pipeline.fit(X_train, y_train)

# predict
y_pred= pipeline.predict(X_test)

#evaluate
accuracy_score(y_test, y_pred)
#0.9127906976744186

Как видите, для начала он неплохо справляется. Давайте перейдем к третьему вопросу, в приведенной выше модели мы использовали fit, а не fit_transform, это нормально? Да, единственное различие между fit_transform - это функция, которая выполняет две функции fit и transform, здесь нам нужен только fit. Мы можем использовать fit_transform, если хотим предсказать классы обучающих данных.

Надеюсь, это ответит на ваш вопрос !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...