0
点赞
收藏
分享

微信扫一扫

Elasticsearch:BM25 及 使用 Elasticsearch 和 LangChain 的自查询检索器

朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法:

核心思想:是利用特征之间的条件独立性,来对给定的数据进行分类。具体而言,朴素贝叶斯算法基于贝叶斯定理,通过计算每个类别下各个特征对应的概率来进行分类推断。其对应的贝叶斯公式如下:

朴素贝叶斯朴素在: 计算条件概率分布P(X=xY=C_k)时,NB引入了一个很强的条件独立假设,即,当Y确定时,X的各个特征分量取值之间相互独立。

在估计条件概率P(X|Y)时出现概率为0的情况下采用贝叶斯估计,简单来说就是引入“ 入”:

接下来通过文章分类计算案例进行演示,需求是通过前四个训练样本(文章),判断第五篇文章,是否属于China类:

其计算结果如下所示:

上面的例子我们得到P(TokvolC)和P(JapanlC)都为0,这是不合理的,如果词频列表里面有很多出现次数都为0,很可能计算结果都为零。 解决办法就是使用拉普拉斯平滑系数:

商品评论情感分析:接下来通过一个案例来解释一下朴素贝叶斯算法的实现过程,其大致的操作就是给定一段话判断当前是好评还是差评:

下面这段代码主要实现了文本数据的处理、特征提取和朴素贝叶斯模型的训练与评估:

import pandas as pd
import numpy as np
import pkuseg
import matplotlib.pyplot as plt
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB

# 获取数据
data = pd.read_json('./data/书籍评价.json')
# print(data)

# 数据基本处理
# 取出内容列用于后面分析
content = data["内容"]
# print(content)
# 把评价中的好评差评转换为数字
data.loc[data.loc[:, "评价"] == "好评", "评论编号"] = 1
data.loc[data.loc[:, "评价"] == "差评", "评论编号"] = 0

# 选择停用词
stopwords = []
with open("./data/stopwords.txt", "r", encoding="utf-8") as f:
lines = f.readlines()
for tmp in lines:
line = tmp.strip()
stopwords.append(line)
stopwords = set(stopwords) # 去重,集合格式

# 把内容处理成标准模式
comment_list = []
seg = pkuseg.pkuseg() # 实例化分词器对象
for tmp in content:
seg_list = seg.cut(tmp)
seg_list = [word for word in seg_list if word not in stopwords] # 过滤停用词
seg_str = " ".join(seg_list) # 使用空格连接词语
comment_list.append(seg_str)

# 统计词频
con = CountVectorizer()
X = con.fit_transform(comment_list)

# 准备训练集
x_train = X.toarray()[:10, :]
y_train = data["评价"][:10]

# 准备测试集
x_test = X.toarray()[10:, :]
y_test = data["评价"][10:]

# 3. 模型训练
# 构建朴素贝叶斯算法分类器
mb = MultinomialNB(alpha=1) # alpha为Laplace平滑系数

# 训练数据
mb.fit(x_train, y_train)

# 预测数据
y_pred = mb.predict(x_test)
# 预测值与真实值展示
print("预测值:", y_pred)
print("真实值:\r\n", y_test)

# 模型评估
result = mb.score(x_test, y_test)
print("模型评估的结果为: \n", result)

最终的模型评估结果会显示模型在测试集上的准确率。整个过程涉及数据处理、文本特征提取、模型训练和评估:

我们可以体验一下百度开源的情感分析项目:点击跳转地址 :

结果如下:

举报

相关推荐

0 条评论