Фрагмент кода Python NLTK для обучения классификатора (наивных байесов), используя частоту признаков - PullRequest
3 голосов
/ 29 января 2010

Мне было интересно, может ли кто-нибудь помочь мне с помощью фрагмента кода, который демонстрирует, как обучить наивного байесовского классификатора, используя метод частоты признаков, а не наличие признаков.

Я полагаю, что нижеприведенное, как показано в главе 6 текст ссылки относится к созданию набора функций с использованием Feature Presence (FP) -

def document_features(document): 
    document_words = set(document) 

    features = {}
    for word in word_features:
        features['contains(%s)' % word] = (word in document_words)

    return features

Пожалуйста, совет

Ответы [ 3 ]

3 голосов
/ 09 февраля 2010

Для обучения создайте соответствующие FreqDists, которые вы можете использовать для создания ProbDists, которые затем могут быть переданы в NaiveBayesClassifier. Но на самом деле классификация работает с наборами функций, которые используют логические значения, а не частоты. Поэтому, если вы хотите классифицировать на основе FreqDist, вам придется реализовать свой собственный классификатор, который не использует наборы функций NLTK.

3 голосов
/ 30 января 2010

В отправленной вами ссылке сказано, что эта функция является экстрактором функций, который просто проверяет, присутствует ли каждое из этих слов в данном документе.

Вот весь код с номерами для каждой строки:

1     all_words = nltk.FreqDist(w.lower() for w in movie_reviews.words())
2     word_features = all_words.keys()[:2000] 

3     def document_features(document): 
4          document_words = set(document) 
5          features = {}
6          for word in word_features:
7               features['contains(%s)' % word] = (word in document_words)
8          return features

В строке 1 создан список всех слов.

В строке 2 это занимает наиболее часто встречающиеся 2000 слов.

3 определения функции

4 преобразует список документов (я думаю, что это должен быть список) и преобразует список в набор.

5 объявляет словарь

6 перебирает все наиболее часто встречающиеся 2000 слов

7 создает словарь, в котором ключ «содержит (theword)», а значение равно true или false. True, если слово присутствует в документе, false в противном случае

8 возвращает словарь, который показывает, содержит ли документ наиболее часто встречающиеся 2000 слов или нет.

Это отвечает на ваш вопрос?

0 голосов
/ 05 мая 2011

Вот метод, который поможет вам:

''' Returns the frequency of letters '''
def get_freq_letters(words):
    fdist = nltk.FreqDist([char.lower() for word in words for char in word if char.isalpha()])
    freq_letters = {}
    for key,value in fdist.iteritems():
        freq_letters[key] = value
    return freq_letters
...