#python #pandas #jupyter-notebook #naivebayes
#python #панды #jupyter-ноутбук #наивный ответ
Вопрос:
Я продолжаю, что это ошибка в моем коде, и я не знаю, как это исправить, и когда я пытаюсь это исправить, это приводит к путанице во всей программе, как я могу это исправить.
def p_appears_in_spam(word):
count = 0
total_spams = 0
for t in train_set:
text = t[0]
if t[1] == 1:
total_spams = 1
if word in text:
count = 1
return count/total_spams
def p_appears_in_ham(word):
count = 0
total_hams = 0
for t in train_set:
text = t[0]
if t[1] == 0:
total_hams = 1
if word in text:
count = 1
return count/total_hams
def total_spams_and_hams(tset):
spams = 0
hams = 0
for t in tset:
spams = 1 if t[1] == 1 else 0
hams = 1 if t[1] == 0 else 0
return spams, hams
p_spam = total_spams_and_hams(train_set)[0]/len(train_set) # Probability that a message is spam
p_ham = total_spams_and_hams(train_set)[1]/len(train_set) # Probability that a message is ham
def p_is_spam_given_word(word):
return (p_appears_in_spam(word)*p_spam)/((p_appears_in_spam(word)*p_spam p_appears_in_ham(word)*p_ham))
word = 'free'
print('Probability that a message is spam given the word "{}" is: {}'.format(word, p_is_spam_given_word(word)))
это ошибка, которую я получаю
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
<ipython-input-102-eaaafc1fa61f> in <module>
31 return (p_appears_in_spam(word)*p_spam)/((p_appears_in_spam(word)*p_spam p_appears_in_ham(word)*p_ham))
32 word = 'free'
---> 33 print('Probability that a message is spam given the word "{}" is: {}'.format(word, p_is_spam_given_word(word)))
<ipython-input-102-eaaafc1fa61f> in p_is_spam_given_word(word)
29 p_ham = total_spams_and_hams(train_set)[1]/len(train_set) # Probability that a message is ham
30 def p_is_spam_given_word(word):
---> 31 return (p_appears_in_spam(word)*p_spam)/((p_appears_in_spam(word)*p_spam p_appears_in_ham(word)*p_ham))
32 word = 'free'
33 print('Probability that a message is spam given the word "{}" is: {}'.format(word, p_is_spam_given_word(word)))
<ipython-input-102-eaaafc1fa61f> in p_appears_in_spam(word)
8 if word in text:
9 count = 1
---> 10 return count/total_spams
11 def p_appears_in_ham(word):
12 count = 0
ZeroDivisionError: division by zero
Я получаю ошибку нулевого деления для подсчета как в функциях spams, так и в функциях hams, которые я написал для этого.
Комментарии:
1. Вопрос был бы более понятным, если бы вы сократили его до минимального рабочего примера.
2. Итак. У вас ошибка, которая вызывает себя
ZeroDivisionError
и описывает себя какdivision by zero
. Я полагаю, вы понимаете, почему недопустимо пытаться делить на ноль. Ошибка указывает на вашу строку кодаreturn count/total_spams
. Итак, здесь происходит деление на ноль. Что это говорит вам о вашем коде? В частности, что это говорит вам о значенииtotal_spams
во время выполнения этой строки кода? Ожидаете ли вы такой возможности? Когда вы это делаетеcount/total_spams
, что это должно вычислять? Имеет ли смысл ваша формула для этого?3. (Подсказка: каким должно быть максимально возможное значение для
p_appears_in_spam
результата, учитывая, что оно представляет вероятность ? Каким должно быть наименьшее возможное значение? В общем, чего вы ожидаете больше:count
, илиtotal_spams
? Почему?)