机器学习:朴素贝叶斯

一、定义

        朴素贝叶斯方法是在贝叶斯算法的基础上进行了相应的简化,即假定给定目标值时属性之间相互条件独立。也就是说没有哪个属性变量对于决策结果来说占有着较大的比重,也没有哪个属性变量对于决策结果占有着较小的比重。虽然这个简化方式在一定程度上降低了贝叶斯分类算法的分类效果,但是在实际的应用场景中,极大地简化了贝叶斯方法的复杂性。

优点:在数据较少的情况下任然有效,可以处理多类别问题。

缺点:对于输入数据的准备方式较为敏感。

二、算法原理​

贝叶斯公式:

先验概率P(X)、P(Y):先验概率是指根据以往经验和分析得到的概率。

后验概率P(Y|X):事情已经发生,要求这件事情发生的原因是由某个因素引起的可能性的大小,后验分布P(Y|X)表示事件X已经发生的前提下,事件Y发生的概率,叫做事件X发生下事件Y的条件概率。

后验概率P(X|Y):通常它除以P(X)被叫做调整因子,可能性函数。在已知Y发生后X的条件概率,也由于知道Y的取值而被称为X的后验概率。

朴素:朴素贝叶斯算法是假设各个特征之间相互独立,然而现实生活中这样的事件不存在,也是朴素这词的意思,那么贝叶斯公式中的P(X|Y)可写成:

朴素贝叶斯公式:

 三、代码实现

import math


# 计算词频
def calculate_word_frequency(documents, labels):
    word_freq = {}
    class_word_count = {}
    for document, label in zip(documents, labels):
        if label not in class_word_count:
            class_word_count[label] = 0
        class_word_count[label] += len(document)
        for word in document:
            if word not in word_freq:
                word_freq[word] = {}
            if label not in word_freq[word]:
                word_freq[word][label] = 0
            word_freq[word][label] += 1
    return word_freq, class_word_count


# 计算类别概率
def calculate_class_probabilities(labels):
    class_prob = {}
    total = len(labels)
    for label in labels:
        if label not in class_prob:
            class_prob[label] = 0
        class_prob[label] += 1
    for label in class_prob:
        class_prob[label] = class_prob[label] / total
    return class_prob


# 预测新文档的类别
def predict_class(document, word_freq, class_word_count, class_prob):
    best_label = None
    best_score = -math.inf
    for label in class_prob:
        score = math.log(class_prob[label])
        for word in document:
            if word in word_freq and label in word_freq[word]:
                prob = word_freq[word][label] / class_word_count[label]
                score += math.log(prob)
        if score > best_score:
            best_score = score
            best_label = label
    return best_label


# 示例用法
documents = [
    ['apple', 'banana', 'orange'],
    ['banana', 'orange', 'cat'],
    ['apple', 'orange', 'cat'],
    ['apple', 'banana']
]
labels = ['fruit', 'fruit', 'fruit', 'fruit']

word_freq, class_word_count = calculate_word_frequency(documents, labels)
class_prob = calculate_class_probabilities(labels)

new_document = ['apple', 'cat']
predicted_class = predict_class(new_document, word_freq, class_word_count, class_prob)
print("Predicted class:", predicted_class)

 运行结果:

Predicted class: fruit

四、总结 

         朴素贝叶斯算法是一种简单、高效、易于实现的器学习算法,特别适用于文本分类和情感分析等自然语言处理任务。在实际应用中,我们可以使用不同变体的朴素贝叶斯算法来处理不同类型的数据。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值