我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

在自然语言处理方面,对于预测其实有很多的算法。那么,贝叶斯函数就是其中一个最常见的方法。上一篇文章里面,苏南讲述了使用多项式朴素贝叶斯函数进行机器学习的预测。本文使用另外一个贝叶斯分类器,叫做高斯贝叶斯分类器,来实现同一批评论文字的分类需求。

苏南大叔:机器学习,如何通过GaussianNB高斯贝叶斯分类器做预测? - 高斯贝叶斯
机器学习,如何通过GaussianNB高斯贝叶斯分类器做预测?(图3-1)

大家好,这里是苏南大叔的平行空间笔记本博客,这里记录苏南大叔和计算机代码的故事。本文描述使用一个高斯贝叶斯分类器,来实现文本的情感分析。测试环境:win10python@3.6.8sklearn@0.24.2

基本思路

基本需求及其方案实现,是基于多项式朴素贝叶斯函数的,可以参考文章:

在后一篇文章里,对于模型的fit结果保存为模型文件,然后再次加载使用。可以参考文章:

在本篇文章里面,实现了对文本的情感分析模型的训练。第一次运行的时候,使用的是一部分训练集做训练。然后,把训练的结果保存下来,然后利用训练的结果,再次对文本进行分析。【本文的数据集的使用,其实是有些问题的】

准备数据

读取评价.csv文件,其中内容字段做分词,评价字段读取成y变量。如果程序报错找不到文件,可以参考:

有关分词的逻辑,可以参考:

from genericpath import exists
import numpy as np
import joblib
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.feature_extraction.text import CountVectorizer
import jieba
import os
os.chdir(os.path.dirname(__file__))
data = pd.read_csv("评价.csv", encoding="gbk")
_text = []
for c in data["内容"]:
    _seg = jieba.cut(c, cut_all=False)      # 这里需要加载自定义词典
    _text.append(','.join(_seg))

con = CountVectorizer(stop_words=[])        # 这里需要控制
X = con.fit_transform(_text)
X = X.toarray()
y = data['评价'].values

高斯贝叶斯分类器

这里为了使用模型的导入导出的功能,硬生生的做个点改变。先用大部分训练集做了训练,再次运行的时候,就全部用于测试。而且,对于本文的需求来说,对于X的处理实际上有些问题。

使用训练好的数据,再去测试新的数据的时候,需要对新的数据【使用原来数据集的词典】进行处理,这部分待后续文章描述。

from genericpath import exists

model_cache = "GaussianNB.model"
if not exists(model_cache):
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.05, random_state=1, shuffle=False)
    model_GaussianNB = GaussianNB()
    model_GaussianNB.fit(X_train, y_train)
    joblib.dump(model_GaussianNB, model_cache)
else:
    model_GaussianNB = joblib.load(model_cache)
    X_test = X
    y_test = y

苏南大叔:机器学习,如何通过GaussianNB高斯贝叶斯分类器做预测? - 高斯贝叶斯分类器
机器学习,如何通过GaussianNB高斯贝叶斯分类器做预测?(图3-2)

获得结果

获得预测的结果:

model_GaussianNB.predict(X_test)

获得预测结果的评分:

model_GaussianNB.score(X_test, y_test)

获得预测结果的单条可能性,测试集样本在各个类别上预测的几率的一个对数转化:

result2 = model_GaussianNB.predict_proba(X_test) 
np.around(result2*100, 2)

苏南大叔:机器学习,如何通过GaussianNB高斯贝叶斯分类器做预测? - 预测结果展示
机器学习,如何通过GaussianNB高斯贝叶斯分类器做预测?(图3-3)

后面的np.around(result2*100, 2)其实就是个可视化的过程,数据分为两列。第一列表示:数据为“好评”的概率,第二列表示数据为“差评”的概率。

相关文章

综述

目前,已经描述了两个用于机器学习的贝叶斯分类器了。整体看上去,高斯贝叶斯和多项式贝叶斯的使用方式,基本上差不多。对于普通人来说,没有太大区别。基本上就是换换函数名的关系罢了。更多机器学习的文章,可以点击:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   python    sklearn