gpt4 book ai didi

machine-learning - 使用朴素贝叶斯获取类别概率

转载 作者:行者123 更新时间:2023-11-30 08:55:09 27 4
gpt4 key购买 nike

我正在尝试用两个类对输入进行分类,这是代码。 dinocrypto 是两个类:

for w, cnt in list(counts.items()): #count is dict with word and it's count value
p_word = vocab[w] / sum(vocab.values())
p_w_given_dino = (word_counts["dino"].get(w, 0.0) + 1) / (sum(word_counts["dino"].values()) + v)
p_w_given_crypto = (word_counts["crypto"].get(w, 0.0) + 1) / (sum(word_counts["crypto"].values()) + v)

log_prob_dino += math.log(cnt * p_w_given_dino / p_word)
log_prob_crypto += math.log(cnt * p_w_given_crypto / p_word)

print("Score(dino) :", math.exp(log_prob_dino + math.log(prior_dino)))
print("Score(crypto):", math.exp(log_prob_crypto + math.log(prior_crypto)))

另一种方法是:

prior_dino = (priors["dino"] / sum(priors.values()))
prior_crypto = (priors["crypto"] / sum(priors.values()))
for w, cnt in list(counts.items()):
p_word = vocab[w] / sum(vocab.values())
p_w_given_dino = (word_counts["dino"].get(w, 0.0) + 1) / (sum(word_counts["dino"].values()) + v)
p_w_given_crypto = (word_counts["crypto"].get(w, 0.0) + 1) / (sum(word_counts["crypto"].values()) + v)
prob_dino *= p_w_given_dino
prob_crypto *= p_w_given_crypto
t_prior_dino = prob_dino * prior_dino
t_prior_crypto = prob_crypto * prior_crypto

在第二种方法中,我得到的值非常小。

哪一个是正确的,还是两者都正确?

最佳答案

这些是完全等效的方法。然而,第一个是更可取的,因为处理概率的对数使整个过程更加数值稳定。结果应该是相同的(最多有数值错误)。

但是第二种方法似乎有错误

prob_dino *= p_w_given_dino

不使用您有 cnt 事件这一事实;应该是这样的

prob_dino *= pow(p_w_given_dino, cnt) 

关于machine-learning - 使用朴素贝叶斯获取类别概率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31726677/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com