Вопрос или проблема
Я применил TF*IDF к столбцу ‘Ad-topic line’ в моем наборе данных. Для каждой строки темы рекламы я получаю один и тот же вывод:
Во-первых, я не могу понять вывод. Значения TF*IDF указаны справа, но что конкретно означают цифры в скобках?
Я планирую использовать эти значения для своей логистической регрессии для классификации. Как именно мне передать эти значения алгоритму?
Цифры слева тоже важны, они представляют собой индексы в следующем формате
(номер_документа, номер_токена)
TF-IDF вычисляется для всех уникальных токенов во всех документах.
Дайте знать, если у вас есть дополнительные вопросы.
Проголосуйте за меня, если я смог помочь 😉
Прежде всего, я не совсем уверен, как вы применили векторизаторы tfidf к данным, так как код не был прикреплен. Векторизаторы Tfidf применяются к тексту для преобразования текста в числовые векторы. Особенность векторизации tfidf в том, что она придает большее значение редко встречающимся словам по сравнению со словами, которые встречаются часто, например, стоп-слова или слова-наполнители, которые встречаются много раз, но не придают особого значения предложению. Тем не менее, я применил векторизацию tfidf к набору данных и опубликовал их здесь и здесь. Попробуйте воспроизвести это. Надеюсь, это поможет.
Из вывода, который вы поделились, можно понять, что у вас примерно 1000 строк данных и более 300 признаков/столбцов/слов, которые функция tfidf создала на основе вашего выбора параметра ngrams. Теперь, в скобках (x,y) означает:
X – это номер строки ваших данных
А
Y – это n-й признак в списке признаков.
Предполагая, что вы написали что-то подобное, чтобы получить вышеуказанный вывод-
tfidf_matrix = tf.fit_transform(data)
это даст вам список имен признаков
feature_names = tf.get_feature_names()
Теперь вы можете проверить любое значение Y в скобках, например, возьмем первое значение из вашего вывода – (0,53)
feature_names[53]
Это даст название признака (который в основном является словом или сочетанием слов), а значение справа – это tfidf-оценка этого признака в 0-й строке ваших данных.
Ответ или решение
Конечно, давайте разберемся, как использовать значения TFIDF в вашей модели машинного обучения, и проясним, что обозначают выходные данные после применения TFIDF к колонне ‘Ad-topic line’ вашего набора данных.
Понимание выходных данных TF*IDF
Когда вы применяете TF*IDF к текстовым данным, как в вашем случае с колонной ‘Ad-topic line’, результатом является матрица, где строки соответствуют документам (в данном случае рекламным объявлениям), а столбцы — уникальным терминам (словам) из этих документов. Такие выходные данные могут принимать вид, например:
(0, 53) 0.1234
Здесь (0, 53)
обозначает, что значение, равное 0.1234
, относится к первому документу (индекс 0) и 54-му терму (индекс 53) в вашем наборе признаков. Важно отметить, что индексация начинается с нуля. Чтобы выяснить, какому слову соответствует индекс 53, вы можете использовать следующий код:
feature_names = tf.get_feature_names_out()
print(feature_names[53])
Этот код вернет название термина для соответствующего индекса.
Подготовка данных для модели логистической регрессии
Теперь, когда вы понимаете, как работает TFIDF и что означают выводимые значения, следующий шаг — это использование полученной матрицы TFIDF как входных данных в вашу модель логистической регрессии.
-
Подготовка данных: Обычно вам нужно разбить ваши данные на обучающую и тестовую выборки. Вы можете использовать
train_test_split
из библиотекиsklearn
:from sklearn.model_selection import train_test_split # Предполагаем, что 'y' - ваш целевой вектор X_train, X_test, y_train, y_test = train_test_split(tfidf_matrix, y, test_size=0.2, random_state=42)
-
Обучение модели: Обучите модель логистической регрессии на обучающей выборке:
from sklearn.linear_model import LogisticRegression model = LogisticRegression() model.fit(X_train, y_train)
-
Оценка модели: После обучения вы можете оценить модель на тестовой выборке:
from sklearn.metrics import accuracy_score, classification_report y_pred = model.predict(X_test) print(accuracy_score(y_test, y_pred)) print(classification_report(y_test, y_pred))
Заключение
Использование значений TFIDF в ваших моделях машинного обучения может существенно улучшить их производительность, особенно в задачах классификации текстов. TFIDF помогает избавиться от шумовых слов и выделить те термины, которые действительно важны для понимания содержания текста.
Если у вас остались вопросы или нужно дополнительное пояснение по какому-либо из этапов, пожалуйста, дайте знать!