2016-03-25 3 views
2

Когда я делаю:деление на ноль встречается в журнале, когда не деление на ноль

summing += yval * np.log(sigmoid(np.dot(w.transpose(), xi.transpose()))) + (1-yval)* np.log(1-sigmoid(np.dot(w.transpose(), xi.transpose()))) 

, где нет разделения, почему я получаю «деление на ноль встречается в журнале» ошибка? в результате, суммирующий становится [нан]

+5

Возможно, вы должны разорвать этот оператор на несколько строк. Чрезвычайно сложно понять, что происходит, и облегчит его отладку. – IanAuld

ответ

9

Это ошибка, которую вы получаете, когда вы пытаетесь оценить журнал с 0:

>>> import numpy as np 
>>> np.log(0) 
__main__:1: RuntimeWarning: divide by zero encountered in log 

Я согласен, что это не очень понятно.

Так что в вашем случае, я хотел бы проверить, почему ваш вход для входа 0.

PS: это на NumPy 1.10.4

+1

Какая версия? Я получаю -inf. – Reti43

+1

@ Reti43: Это просто предупреждение, а не исключение. Он возвращает '-inf', но он все еще отображает предупреждение. – zondo

+0

Это значение numpy 1.10.4. – DevShark

6

У меня была такая же проблема. Похоже, вы пытаетесь сделать логистическую регрессию. Я выполнял классификацию MULTI-CLASS с логистической регрессией. Но вам нужно решить эту проблему, используя подход ONE VS ALL (подробнее см. Google).

Если вы не установите свою переменную yval так, чтобы она имела только «1» и «0» вместо yval = [1,2,3,4, ...] и т. Д., Тогда вы получите отрицательные издержки которые приводят к убегающей тете, а затем приводят к достижению предела log (y), где y близко к нулю.

Исправление должно состоять в том, чтобы предварительно обработать вашу переменную yval, чтобы она имела только «1» и «0» для положительных и отрицательных примеров.

+0

Большое спасибо за этот комментарий –

+0

Спасибо вам большое! –

Смежные вопросы