基于朴素贝叶斯模型,如何计算给定参数下非分类变量的条件概率?
如何用朴素贝叶斯计算连续特征的条件概率密度
你用e1071包的naiveBayes模型时,已经能拿到分类变量的条件概率,但对连续特征(比如sellerRating)的精确值条件概率摸不着头绪——其实这里要注意:连续变量取单点值的概率是0,我们实际要算的是该点的概率密度,而naiveBayes默认用高斯分布来拟合连续特征的条件分布,以下是具体做法:
1. 提取连续特征的条件分布参数
训练好的nb.model里,tables字段存着每个特征在不同Competitive类别下的分布信息。对于连续的sellerRating,它会保存每个类别对应的均值和标准差。
用这段代码查看Competitive=1时sellerRating的分布参数:
# 查看sellerRating在Competitive=1时的均值和标准差 nb.model$tables$sellerRating[,"1"]
输出大概是这个格式(示例数值):
Mean Std Dev 850.00 200.00
2. 计算指定值的概率密度
根据朴素贝叶斯的条件独立性假设,currency和sellerRating在给定Competitive的条件下是独立的,所以P(sellerRating=1000 | Competitive=1, currency=EUR)就等于P(sellerRating=1000 | Competitive=1)。
用R的dnorm()函数,代入刚才拿到的均值(μ)和标准差(σ),就能算出1000处的概率密度:
# 提取参数 mu <- nb.model$tables$sellerRating["Mean", "1"] sigma <- nb.model$tables$sellerRating["Std Dev", "1"] # 计算概率密度 density_1000 <- dnorm(1000, mean = mu, sd = sigma) print(density_1000)
补充说明
- 概率密度和概率的区别:密度值本身不是概率,但它代表了该点附近单位区间内的概率大小,能反映这个值在条件分布中的“出现可能性”。
- 如果你的
sellerRating其实是离散变量但被当成连续处理了,也可以在训练模型时用naiveBayes()的discrete参数指定它为离散特征,这样就能直接拿到精确值的概率。
内容的提问来源于stack exchange,提问作者Friendly-Hooman
相关产品推荐
相关产品推荐

