零基础学习机器学习【第五天】“朴素贝叶斯算法”的实现和应用

什么是朴素贝叶斯算法

朴素贝叶斯算法是一种基于概率的分类算法。朴素就是假设特征与特征之间是相互独立,贝叶斯则为贝叶斯公式
它的核心思想是通过已知的特征和类别信息,计算新样本属于不同类别的概率,从而将新样本分类到概率最大的类别中。该算法基于贝叶斯定理,并假设数据集中的特征是相互独立的,这一假设虽然在现实中往往不成立,但简化了计算过程,使得算法在实际应用中仍具有很好的表现。

核心思想:朴素贝叶斯算法 = 朴素 + 贝叶斯 ; 旨通过概率对新样本进行分类

概率基础

什么是概率?旨一件事情发生的可能性,概率分为三种。

  • 联合概率
    • 包含多个条件,且多个条件同时成立的概率。例如,事件 A 和事件 B 同时发生的概率可以表示为 P (A,B)。
  • 条件概率
    • 条件概率是在已知某个事件发生的条件下,另一个事件发生的概率。例如,在事件 B 已经发生的条件下,事件 A 发生的概率可以表示为 P (A|B)。
  • 相互独立
    • 如果两个事件 A 和 B 相互独立,事件A可以推出事件B,事件B可以推出事件A,即 P (A,B) <=> P (A) P (B)。

贝叶斯公式

贝叶斯公式是朴素贝叶斯算法的理论基础。它的公式为:
在这里插入图片描述
P(A|B)表示事件B发生的条件下事件A发生的概率
P(B|A)表示事件A发生的条件下事件B发生的概率
P(A)是事件A发生的先验概率,
P(B)是事件B发生的先验概率

案例

def nb_news():
    """
    用朴素贝叶斯算法对新闻进行分类
    :return:
    """
    # 1)获取数据
    news = fetch_20newsgroups(subset="all")

    # 2)划分数据集
    x_train, x_test, y_train, y_test = train_test_split(news.data, news.target)

    # 3)特征工程:文本特征抽取-tfidf
    transfer = TfidfVectorizer()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)

    # 4)朴素贝叶斯算法预估器流程
    estimator = MultinomialNB()
    estimator.fit(x_train, y_train)

    # 5)模型评估
    # 方法1:直接比对真实值和预测值
    y_predict = estimator.predict(x_test)
    print("y_predict:\n", y_predict)
    print("直接比对真实值和预测值:\n", y_test == y_predict)

    # 方法2:计算准确率
    score = estimator.score(x_test, y_test)
    print("准确率为:\n", score)

    return None
    
if __name__ == "__main__":

	nb_news()

运行结果:
在这里插入图片描述

总结

朴素贝叶斯算法

  • 优点
    • 算法简单高效
    • 对小规模数据表现良好
    • 对缺失数据不敏感
  • 缺点
    • 特征独立性假设不总是成立
    • 对输入数据的表达形式敏感
    • 可能会出现概率估计偏差

应用场景:适用于新闻分类、情感分析、垃圾邮件过滤等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值