避免零问题

数据挖掘 分类 数据挖掘 朴素贝叶斯分类器
2021-09-29 06:25:34

我有一个数据集,我正在尝试预测我的样本的标签,但我无法映射它,因为这里从未显示过这种情况是我的样本(我使用的是朴素贝叶斯方法)

X=(年龄=中,has_job=false,own_house=true,credit_rating=good)

这就是数据集

在此处输入图像描述

我应该怎么做才能解决问题?我知道我应该避免它,但不知道如何

2个回答

我完全同意 Esmailian 的观点。

朴素贝叶斯是朴素的——假设独立。

脚步:

  • 独立计算
  • 使用拉普拉斯平滑进行平滑(以避免将整个值归零)

附加提示:

  • 使用对数而不是乘以概率。(这将确保您的值不会接近于零,并保留一些上下文。)

例子:

p(a)=p(x1)p(x2)

应用对数,

log(p(a))=log(p(x1))+log(p(x2))

由于您需要最终分类,因此记录日志不会受到伤害。

朴素贝叶斯分别考虑每个特征,即特征在给定类的情况下是独立的。确切的 X 不在训练数据中,但它的每个特征都曾见过。

但是,根据训练数据(0 除以 6),P(own_house=true|No) 仍然存在问题,该值为零。为此,我们使用拉普拉斯平滑将零替换为 (0+1)/(6+4)=1/10。现在,朴素贝叶斯可以将 X 分配给一个类。

朴素贝叶斯分类器比较

P(X, Class=Yes) = P(Class=Yes) * P(Age=middle|Yes) * P(has_job=false|Yes) * P(own_house=true|Yes) * P(credit_rating=good|Yes) ) = 9/15 * 3/9 * 4/9 * 6/9 * 4/9 = 0.0263

P(X, Class=No) = P(Class=No) * P(Age=middle|No) * P(has_job=false|No) * P(own_house=true|No) * P(credit_rating=good|No ) = 6/15 * 2/6 * 6/6 * 1/10 * 2/6 = 0.0044

并将 X 分配给 Class = Yes。