我在下面有一些代码循环一个简单的贝叶斯分类器的评论和词汇文档。结果给出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在这里做什么
答案 0 :(得分:0)
考虑下溢的可能性。您将多个数字相乘,如果每个数字小于1,则产品可能小于realmin,因此为零。
记录产品可能是正确的做法,因为您将使用不会下溢的日志总和。
如果没有,那么你没有提供足够的信息来做出更好的猜测。
答案 1 :(得分:0)
您是否检查了result
的初始值?
这又是什么回报?
I = (d(:,1) == wordCount);
values = sum(d,2) - d(:,1);
result = prod(values(I)/n)
答案 2 :(得分:0)
另一点可能是double
(sum(d(k,:)))-d(k,1)
是< d(k,i >1)
,则{p}为eps(d(k,1))
d(k,1)
((sum(d(k,:)))-d(k,1) = 0
中可能 大于realmin的最低有效数字的值)它们不会对{{1}} 的总和做出贡献