Как использовать TF*IDF баллы для моей модели машинного обучения?

Вопрос или проблема

Я применил 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 как входных данных в вашу модель логистической регрессии.

  1. Подготовка данных: Обычно вам нужно разбить ваши данные на обучающую и тестовую выборки. Вы можете использовать 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)
  2. Обучение модели: Обучите модель логистической регрессии на обучающей выборке:

    from sklearn.linear_model import LogisticRegression
    
    model = LogisticRegression()
    model.fit(X_train, y_train)
  3. Оценка модели: После обучения вы можете оценить модель на тестовой выборке:

    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 помогает избавиться от шумовых слов и выделить те термины, которые действительно важны для понимания содержания текста.

Если у вас остались вопросы или нужно дополнительное пояснение по какому-либо из этапов, пожалуйста, дайте знать!

Оцените материал
Добавить комментарий

Капча загружается...