Задачи с плавающей точкой в ​​Matlab - PullRequest
1 голос
/ 09 декабря 2011

У меня есть некоторый код ниже, который зацикливает обзор и вокаб документ для наивного байесовского классификатора. Результат дает 0, поэтому я думаю, что есть проблема в формате результата.

%Loop the termdoc to find the word no.
    for k = 1: dlength 
        %Sum the records for that number
        if wordCount == d(k,1)
            result = result * ((sum(d(k,:)))-d(k,1))/n;
        end 
    end
end
%Multiply by the probability d/a
result = result * 0.5;

Я отладил код, и в результате все правильные значения сохраняются, возможно, они округляются вниз, возможно, я не слишком уверен, что здесь делают matlabs

Ответы [ 3 ]

0 голосов
/ 09 декабря 2011

Вы проверили начальное значение result?

Что это возвращает?

I = (d(:,1) == wordCount);
values = sum(d,2) - d(:,1);
result = prod(values(I)/n)
0 голосов
/ 19 апреля 2013

Другим моментом может быть предварительная оценка double

для (sum(d(k,:)))-d(k,1), если записи d(k,i >1) равны <<code>eps(d(k,1)) (значение самой младшей цифры в d(k,1), которая может быть намного больше, чем realmin), они не будут вносить вклад в сумму делая (sum(d(k,:)))-d(k,1) = 0

0 голосов
/ 09 декабря 2011

Рассмотрим возможность недополнения. Вы умножаете много чисел вместе, если каждое из них меньше 1, тогда произведение может быть меньше, чем realmin, следовательно, ноль.

Регистрация продукта может быть правильным решением, так как тогда вы будете работать с суммой журналов, которая не будет уменьшена.

Если нет, то вы не дали достаточно информации, чтобы сделать более правильное предположение.

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