TF-IDF (большие данные, интеллектуальный анализ данных)

TF-IDF(частота термина – обратная частота документов) — это широко используемый метод взвешивания, используемый при поиске информации и интеллектуальном анализе данных.
TF– частота термина (Term Frequency) и
IDFобратный индекс частоты документа (Inverse Document Frequency).

Введение

TF-IDF — это статистический метод, используемый для оценки важности слова для набора документов или документа в корпусе.
Важность слова возрастает пропорционально количеству раз его появления в документе, но при этом снижается обратно пропорционально частоте его появления в корпусе.
Различные формы взвешивания TF-IDF обычно используются поисковыми системами в качестве меры или ранжирования релевантности документа запросу пользователя.

Помимо TF-IDF, поисковые системы в Интернете также используют 链接分析методы ранжирования на основе TF-IDF для определения порядка, в котором файлы появляются в результатах поиска.

принцип

Основная идея TF-IDF такова: если слово или фраза часто встречается в статье TF и ​​редко встречается в других статьях, считается, что это слово или фраза обладает хорошей категориально-различительной способностью и пригодны для использования. . TFIDF на самом деле это: TF*IDF,
частота термина TF (Term Frequency), частота обратного документа IDF (Inverse Document Frequency).
TF представляет частоту появления термина в документе d.

Основная идея IDF

Если документов, содержащих термин t, меньше, то есть чем меньше n и больше IDF, это означает, что термин t имеет хорошую различительную способность категорий.

Недостатки ЦАХАЛа.

Если количество документов, содержащих термин t в определенном типе документа C, равно m, а общее количество документов, содержащих термин t в других типах документов, равно k, то очевидно, что количество документов, содержащих t, равно n = m + k. Когда m велико, n также велико, значение IDF, полученное по формуле IDF, будет небольшим, а это означает, что способность различать t-категорию записи не является сильной.

Фактически,
если термин часто встречается в документах какой-либо категории, это означает, что термин вполне может отражать характеристики текста этой категории. Таким терминам следует придавать больший вес и выбирать в качестве текста этой категории. Характеристические слова текста класса, чтобы отличить его от других документов класса.

Вставьте сюда описание изображения

вычислить

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

Вставьте сюда описание изображения

Обратная частота документов (IDF) — это мера общей важности слова. IDF конкретного слова можно разделить на общее количество документов, разделенное на количество документов, содержащих это слово, а затем полученное частное принять к по основанию 10. Логарифм:
где
|D|: общее количество файлов в корпусе
: количество файлов, содержащих слово (т. е. количество файлов). Если слова нет в корпусе, это приведет к Знаменатель формулы равен нулю, поэтому он обычно используется в качестве знаменателя.
idf Знаменатель формулы
idf Знаменатель формулы
Затем вычислите произведение TF и ​​IDF.
Вставьте сюда описание изображения

Высокая частота слов в конкретном документе и низкая частота этого слова во всей коллекции документов могут привести к высоковзвешенному TF-IDF. Таким образом, TF-IDF имеет тенденцию отфильтровывать общие слова и сохранять важные слова.

Код TF-IDF

import math

# 计算词频(TF)
def calculate_tf(word_list):
    tf_dict = {
    
    }
    for word in word_list:
        if word in tf_dict:
            tf_dict[word] += 1
        else:
            tf_dict[word] = 1
    for word in tf_dict:
        tf_dict[word] = tf_dict[word] / len(word_list)
    return tf_dict

# 计算逆文档频率(IDF)
def calculate_idf(documents, word):
    n = 0
    for document in documents:
        if word in document:
            n += 1
    idf = math.log(len(documents) / n)
    return idf

# 计算TF-IDF
def calculate_tfidf(tf, idf):
    tfidf = {
    
    }
    for word in tf:
        tfidf[word] = tf[word] * idf[word]
    return tfidf

# 示例代码
documents = [
    ['apple', 'banana', 'orange', 'banana'],
    ['banana', 'orange', 'orange', 'orange'],
    ['apple', 'orange', 'orange', 'banana']
]

tf_list = []
idf_dict = {
    
    }
for document in documents:
    tf = calculate_tf(document)
    tf_list.append(tf)
    for word in tf:
        if word in idf_dict:
            idf_dict[word] += 1
        else:
            idf_dict[word] = 1

for word in idf_dict:
    idf_dict[word] = calculate_idf(documents, word)

tfidf_list = []
for tf in tf_list:
    tfidf = calculate_tfidf(tf, idf_dict)
    tfidf_list.append(tfidf)

print(tfidf_list)

Guess you like

Origin blog.csdn.net/weixin_45646640/article/details/130450831