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

文章目录

朴素贝叶斯算法

朴素贝叶斯算法介绍

概率数学基础复习

  • 条件概率 : 事件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

python 复制代码
sklearn.naive_bayes.MultinomialNB(alpha = 1.0)
  • 朴素贝叶斯分类
  • alpha 拉普拉斯平滑系数

案例

  • 需求 已知商品评论数据,根据数据进行情感分类(好评、差评)
分析流程
python 复制代码
# 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,买买买,好评
代码实现
python 复制代码
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()
运行结果
相关推荐
新新学长搞科研12 小时前
【经济、管理、大数据可接收】第二届人工智能、业务转型和数据科学创新国际学术会议(ICBTDS 2026)
大数据·人工智能
向哆哆12 小时前
中草药检测数据集分享(适用于目标检测任务已标注+划分)
人工智能·目标检测·计算机视觉
杰瑞学AI13 小时前
学好AI Agent的6把“金钥匙”
人工智能·ai-native
百胜软件@百胜软件13 小时前
董宇辉的尽头是山姆?——个人IP如何转化为零售品牌
人工智能·零售
kattgatt13 小时前
拆解卡特加特AI电商智能体全部功能!
人工智能·卡特加特
万法若空13 小时前
对数恒等式
人工智能·算法·机器学习
招财小梗13 小时前
沈阳AI企业服务真能降本增效?
大数据·人工智能·python
甲维斯13 小时前
Claude发邮件教我Claude Code技巧!
人工智能
孫治AllenSun13 小时前
【JavaAI】LangChain4J(1) Windows 安装 Ollama 本地大模型
人工智能·windows
北京GEO服务商余小铁13 小时前
北京美容美发店AIGEO获客落地指南:精准引流、高效锁客、提升到店率
人工智能·深度学习·神经网络