【机器学习】朴素贝叶斯算法|商品评论情感分析案例介绍及代码实现

news/2024/10/15 9:43:14/

文章目录

  • 朴素贝叶斯算法
    • 朴素贝叶斯算法介绍
      • 概率数学基础复习
      • 朴素贝叶斯算法-利用概率值进行分类的一种机器学习算法
        • 贝叶斯公式
        • 朴素贝叶斯算法
        • 拉普拉斯平滑系数
    • 朴素贝叶斯API
      • 案例
        • 分析流程
        • 数据集
        • 代码实现
        • 运行结果

朴素贝叶斯算法

朴素贝叶斯算法介绍

概率数学基础复习

  • 条件概率 : 事件A在另外一个事件B已经发生条件下的发生概率 P(A|B)
  • 联合概率 : 表示多个条件哦同时成立的概率 P(AB) = P(A) * P(B|A) = P(B) * P(A|B)

朴素贝叶斯算法-利用概率值进行分类的一种机器学习算法

贝叶斯公式
  • 贝叶斯公式

    在这里插入图片描述

    • P© 表示c出现的概率
    • p(W|C) 表示C条件下W出现的概率
    • P(W) 表示 W 出现的概率
  • 例子: 判断女神对你的喜欢情况
    在这里插入图片描述

P(C | W) = P(喜欢 | (程序员,超重))
P(W | C) = P((程序员,超重) | 喜欢)
P© = P(喜欢)
P(W) = P(程序员,超重)

  • 根据训练样本估计先验概率P©:
    • P© = P(喜欢) = 4/7
  • 根据条件概率P(W | C)调整先验概率:
    • P(W | C) = P((程序员,超重) | 喜欢) = 1/4
  • ''此时我们的后验概率
    • P(W | C) * P©为:P(W | C) * P© = P((程序员,超重) | 喜欢) * P(喜欢) = 4/7 * 1/4 = 1/7
  • 那么该部分数据占所有既为程序员,又超重的人中的比例是多少呢?
    • P(W) = P(程序员,超重) = P(程序员) * P(超重 | 程序员) = 3/7 * 2/3 = 2/7

在这里插入图片描述

朴素贝叶斯算法

朴素贝叶斯在贝叶斯基础上增加:特征条件独立假设,即:特征之间是互为独立的。
此时,联合概率的计算即可简化为:
P(程序员,超重|喜欢) = P(程序员|喜欢) * P(超重|喜欢)
P(程序员,超重) = P(程序员) * P(超重)

拉普拉斯平滑系数

在这里插入图片描述

  • 为了避免概率值为 0,我们在分子和分母分别加上一个数值,这就是拉普拉斯平滑系数的作用
    • α 是拉普拉斯平滑系数,一般指定为 1
    • Ni 是 F1 中符合条件 C 的样本数量
    • N 是在条件 C 下所有样本的总数
    • m 表示所有独立样本的总数

朴素贝叶斯API

sklearn.naive_bayes.MultinomialNB(alpha = 1.0
  • 朴素贝叶斯分类
  • alpha 拉普拉斯平滑系数

案例

  • 需求 已知商品评论数据,根据数据进行情感分类(好评、差评)

在这里插入图片描述

分析流程
# 1 获取数据
# 2 数据基本处理# 2-1 处理数据y# 2-2 加载停用词# 2-3 处理数据x 把文档分词# 2-4 统计词频矩阵 作为句子特征# 2-5 准备训练集测试集
# 3 模型训练# 4-1 实例化贝叶斯 添加拉普拉斯平滑参数
# 4 模型预测
# 5 模型评估
数据集

用.csv方式保存数据集

,内容,评价
0, 从编程小白的角度看,入门极佳。,好评
1,很好的入门书,简洁全面,适合小白。,好评
2,讲解全面,许多小细节都有顾及,三个小项目受益匪浅。,好评
3,前半部分讲概念深入浅出,要言不烦,很赞,好评
4,看了一遍还是不会写,有个概念而已,差评
5,中规中矩的教科书,零基础的看了依旧看不懂,差评
6,内容太浅显,个人认为不适合有其它语言编程基础的人,差评
7,破书一本,差评
8,适合完完全全的小白读,有其他语言经验的可以去看别的书,差评
9,基础知识写的挺好的!,好评
10,太基础,差评
11,略_嗦。。适合完全没有编程经验的小白,差评
12,真的真的不建议买,差评
13,很好很好,好评
14,买买买,好评
代码实现
import jieba
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt  # 绘图
from sklearn.feature_extraction.text import CountVectorizer  # 文本特征向量化
from sklearn.naive_bayes import MultinomialNB  # 多项式贝叶斯分类器def demo01():data = pd.read_csv('../data/书籍评价.csv', encoding='gbk')# 数据预处理# data['评论标号'] = np.where(data['评价'] == '好评', 1, 0)# y = data['评论标号']y = data['评价']# 加载停用词stopwords = []with open('../data/stopwords.txt', 'r', encoding='utf-8') as f:lines = f.readlines()for line in lines:stopwords.append(line.strip())stopwords = list(set(stopwords))  # 去重# 处理数据 分词comment_list = [','.join(jieba.lcut(line)) for line in data['内容']]# 特征工程transfer = CountVectorizer(stop_words=stopwords)x = transfer.fit_transform(comment_list)mynames = transfer.get_feature_names_out()x = x.toarray()print(mynames)# 准备训练集测试集x_train = x[:10, :]y_train = y.values[:10]x_test = x[10:, :]y_test = y.values[10:]# 模型训练model = MultinomialNB().fit(x_train, y_train)# 模型预测y_predict = model.predict(x_test)print('预测结果:\n', y_predict)print('实际结果:\n', y_test)print('准确率:\n', model.score(x_test, y_test))if __name__ == '__main__':demo01()
运行结果

在这里插入图片描述


http://www.ppmy.cn/news/1539373.html

相关文章

Allegro PCB中过孔的整体替换

Cadence Allegro PCB中过孔的整体替换 在PCB设计过程中,之前是使用的小的过孔,后面需要替换成大的过孔,一个一个去替换过孔非常麻烦的,这里,讲解一下如何去整体的替换过孔,具体的操作方法如下所示&#xf…

【进阶OpenCV】 (13)--视频物体跟踪

文章目录 物体跟踪一、跟踪器二、代码实现1. 创建CSRT跟踪器实例2. 打开视频文件3. 主循环3.1 读取每一帧3.2 设置跟踪目标3.3 更新跟踪器,获取对象位置3.4 显示视频每一帧 4. 释放资源和关闭窗口5. 完整代码展示 总结 物体跟踪 本篇我们来介绍,如何对移…

八:linux之mysql57读写分离mysql-proxy

linux之mysql57读写分离mysql-proxy 1 https://downloads.mysql.com/archives/proxy/ 去下载或者 https://cdn.mysql.com/archives/mysql-proxy/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz 解压 tar -zxvf mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz 2 默…

linux修改mac和ip地址的方法

在 Linux 系统中,你可以通过以下步骤修改 MAC 地址和 IP 地址。 修改 MAC 地址 修改 MAC 地址通常需要管理员权限。以下是修改 MAC 地址的几种方法: 方法一:使用 ip 命令 关闭网络接口: sudo ip link set dev eth0 down其中 et…

【IPv6】IPv6 NAT66介绍

参考链接 IPv6-to-IPv6 Network Address Translation (NAT66) (ietf.org)https://datatracker.ietf.org/doc/id/draft-mrw-nat66-00.html IPv6 NAT66 NAT66,全称为Network Address Translation for IPv6 to IPv6,是一种用于IPv6网络的地址转换技术。在…

Flume面试整理-Flume的基本架构

Apache Flume的基本架构由三个主要组件(Source、Channel、Sink)和一个代理(Agent)组成。Flume的架构设计使其能够高效地从各种来源收集、聚合和传输大量的数据,通常用于大数据环境下的日志和事件数据收集。以下是Flume基本架构的详细描述: 1. Flume的核心组件 1.1 Source…

通俗解释选择、插入和冒泡排序

1. 选择排序(Selection Sort) 选择排序的过程就像我们选最小(或最大)的东西一样。它的操作逻辑是不断从未排序的部分中选出一个最小(或最大)的数,放到前面的已排序部分。想象一下,你…

【Vue】鼠标滚轮横向滚动操作设计

需求&#xff1a; 鼠标滑轮滚动&#xff0c;操作横向滚动条 解决&#xff1a; 监控滚动操作&#xff0c;根据滚动偏移量&#xff0c;修改横向滚动条的位置 <template><div class"image_view"><div class"image_content"><divv-fo…