Наивная байесовская классификационная проблема - ValueError: ошибка математики домена - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь классифицировать невидимые твиты, используя полиномиальную наивную модель Байеса.Я получаю ошибку и не могу понять, как ее исправить.ValueError: ошибка математического домена.Ошибка возникает при использовании функции math.log.Любые идеи, как это исправить?

def calcWordProbability(newTweet, dictionary):
    V = len(dictionary)
    countC = sum(dictionary.values())
    sumOfProbs = 0
    for word in newTweet:
        if (word in dictionary):
            x = (dictionary.get(word)+1) / (countC + V) 
            sumOfProbs = sumOfProbs + math.log(x)
    return sumOfProbs

def classification(tweet):
    totalNegTweets = 0
    for line in trainNegData:
        totalNegTweets += 1
    totalPosTweets = 0
    for line in trainPosData:
        totalPosTweets += 1 

    totalNumOfTweets = totalNegTweets + totalPosTweets
    positiveOverTotal = totalPosTweets / totalNumOfTweets
    negativeOverTotal = totalNegTweets / totalNumOfTweets

    positive = (math.log(positiveOverTotal)) + (calcWordProbability(tweet,posDict))
    negative = (math.log(negativeOverTotal)) + (calcWordProbability(tweet,negDict))

    if(positive < negative):
        prediction = 0
    else:
        prediction = 1

    return prediction

проблема происходит в строках:

positive = (math.log(positiveOverTotal))+(calcWordProbability(tweet,posDict))
negative = (math.log(negativeOverTotal))+(calcWordProbability(tweet,negDict)) 

1 Ответ

0 голосов
/ 14 декабря 2018

Обычно это происходит, когда класс или объект вообще отсутствуют в сэмплах.

Использование numpy.log вместо math.log вызовет предупреждение вместо исключения при попытке получить логарифм нуля.

Но я настоятельно рекомендую использовать sklearn's MultinomialNB: https://scikit -learn.org / stable / modules / generate / sklearn.naive_bayes.MultinomialNB.html # sklearn.naive_bayes.MultinomialNB

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