一、概述:
1、朴素贝叶斯公式:
朴素贝叶斯公式.png2、API:from sklearn.naive_bayes import MultinomialNB
3、注意事项:一个完整的文本不能直接拿来训练,所以在训练之前,我们需要将自己的语句分词,构建词向量,所以我们这里需要先进行分词处理,这里我选择的是结巴分词。
二、代码开发:
1、数据样式:
数据样式.png2、获取数据:
import pandas as pd
import numpy as np
import jieba
import matplotlib.pyplot as plt
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
# 1、获取数据:
data = pd.read_csv("/Users/weixiujuan/study/人工智能AI/naive_bayes.csv", encoding="utf-8")
print(data)
2.1 数据获取的内容:
数据内容.png3、完整代码:
import pandas as pd
import numpy as np
import jieba
import matplotlib.pyplot as plt
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
# 1、获取数据
data = pd.read_csv("/Users/weixiujuan/study/人工智能AI/naive_bayes.csv", encoding="utf-8")
# print(data)
# 2、数据基本处理
# 2.1 取出内容列,对数据进行分析
content = data["内容"]
print("打印内容:\n", content)
# print(data.loc[:, "评价"])
# 2.2 判定评价标准 -- 0:差评,1:好评
data.loc[data.loc[:, '评价'] == "好评", "评论标号"] = 1 # 把好评修改为1
data.loc[data.loc[:, '评价'] == "差评", "评论标号"] = 0
print("加入评论标号列之后的数据显示:\n", data.head)
good_or_bad = data['评价'].values # 获取数据
print("打印评论内容:\n", good_or_bad)
# ['好评' '好评' '好评' '好评' '差评' '差评' '差评' '差评' '差评' '好评' '差评' '差评' '差评']
# 2.3 选择停用词
# 加载停用词
stopwords = []
with open('/Users/weixiujuan/study/人工智能AI/stopwords.txt', 'r', encoding='utf-8') as f:
lines = f.readlines()
print(lines)
for tmp in lines:
line = tmp.strip()
print("打印停用词:", line)
stopwords.append(line)
# stopwords # 查看新产生列表
print("查看停用词列表:\n", stopwords)
# 对停用词表进行去重
stopwords = list(set(stopwords)) # 去重 列表形式
print("打印去重后的停用词:\n", stopwords)
# 2.4 把"内容"处理,转化成标准格式
comment_list = []
for tmp in content:
print(tmp)
# 对文本数据进行切割
# cut_all 参数默认为 False, 所有使用 cut 方法时 默认为精确模式
seg_list = jieba.cut(tmp, cut_all=False)
print("打印seg_list:\n", seg_list) # <generator object Tokenizer.cut at 0x7fe4b2f34bd0>
seg_str = ','.join(seg_list) # 拼接字符串
print("打印seg_str:\n", seg_str)
comment_list.append(seg_str) # 目的是转化成列表形式
print("打印内容分词后的列表:\n",
comment_list) # ['从,编程,小白,的,角度看,,,入门,极佳,。', '很,好,的,入门,书,,,简洁,全面,,,适合,小白,。', '讲解,全面,,,许多,小,细节,都,有,顾及,,,三个,小,项目,受益匪浅,。', '前半部,分讲,概念,深入浅出,,,要言不烦,,,很赞,。', '看,了,一遍,还是,不会,写,,,有个,概念,而已,。', '中规中矩,的,教科书,,,零,基础,的,看,了,依旧,看不懂,。', '内容,太,浅显,,,个人,认为,不,适合,有,其它,语言,编程,基础,的,人,。', '破书,一本,。', '适合,完完全全,的,小白读,,,有,其他,语言,经验,的,可以,去,看,别的,书', '基础知识,写,的,挺,好,的,!', '太,基础', '略,_,嗦,。,。,适合,完全,没有,编程,经验,的,小白', '真的,真的,不,建议,买']
# 2.5 统计词的个数
# 进行统计词个数
# 实例化对象
# CountVectorizer 类会将文本中的词语转换为词频矩阵
con = CountVectorizer(stop_words=stopwords)
# 进行词数统计
X = con.fit_transform(comment_list) # 它通过 fit_transform 函数计算各个词语出现的次数
name = con.get_feature_names() # 通过get_feature_names() 可获取词袋中所有文本的关键字
print("打印词频矩阵的结果:\n", X.toarray()) # 通过toarray()可看到词频矩阵的结果
print("文本关键字:\n", name)
# 2.6 准备训练集和测试集
# 准备训练集 这里将文本前10行当做训练集,后3行当做测试集
x_train = X.toarray()[:10, :]
y_train = good_or_bad[:10]
# y_train = data["评价"][:10]
# 准备测试集
x_text = X.toarray()[10:, :]
y_text = good_or_bad[10:]
# 3、模型训练
# 构建贝叶斯算法分类器
mb = MultinomialNB(alpha=1) # alpha 为可选项,默认 1.0 ,添加拉普拉修、Lidstone 平滑参数
# 训练数据
mb.fit(x_train, y_train)
# 预测数据
y_predict = mb.predict(x_text)
# 预测值与真实值展示
print('预测值:', y_predict)
print('真实值:', y_text)
# 4、模型评估
score = mb.score(x_text, y_text)
print("模型评估结果为:", score)
3.1、分析结果部分截图:
1.png 2.png 3.png 4.png 5.png3.2 预测结果总结:
从上面预测结果看,预测的三个结果均与真实值一致,模型评估结果值为:1.0 很高!
网友评论