朴素贝叶斯(基于sklearn的实现)

2023-11-07

由于自己太懒,不想看太长的代码,所以我就调用的sklearn库的朴素贝叶斯类,数据集选择的是这个博客中自己构造的数据集,该博客自己实现了朴素贝叶斯类,想自己编写一个朴素贝叶斯函数的读者可以参考这个博客。
下面是用sklearn库实现朴素贝叶斯分类:

from functools import reduce
import numpy as np
from sklearn.naive_bayes import GaussianNB

def loadDataSet():
"""构造数据集"""
    wordsList = [['周六', '公司', '一起', '聚餐', '时间'],
                 ['优惠', '返利', '打折', '优惠', '金融', '理财'],
                 ['喜欢', '机器学习', '一起', '研究', '欢迎', '贝叶斯', '算法', '公式'],
                 ['公司', '发票', '税点', '优惠', '增值税', '打折'],
                 ['北京', '今天', '雾霾', '不宜', '外出', '时间', '在家', '讨论', '学习'],
                 ['招聘', '兼职', '日薪', '保险', '返利']]
    classVec = [0, 1, 0, 1, 0, 1]
    return wordsList, classVec

def doc2VecList(docList):
"""将数据集合并"""
    a = list(reduce(lambda x, y: set(x) | set(y), docList))  # 相同的词合并成为一个词,最终的结果是一个列表,里面没有重复的词
    # reduce()方法:以本题为例,函数是set(x)|set(y),则要迭代的从docList中取出两个词进行函数计算
    return a

allWordsVec = doc2VecList(docList)  # 形成一个没有重复的词的词汇表
print(allWordsVec)
	# ['研究', '增值税', '在家', '不宜', '兼职', '外出', '贝叶斯', '喜欢', '周六', '发票', '今天', '税点', '公司', '一起', '保险', '算法', '日薪', '公式', '北京', '理财', '打折', '雾霾', '招聘', '金融', '时间', '欢迎', '讨论', '返利', '机器学习', '聚餐', '优惠', '学习']

def word2Vec(vecList, inputWords):
"""词袋模型"""
    resultVec = [0] * len(vecList)
    for word in inputWords:
        if word in vecList:
            resultVec[vecList.index(word)] += 1
        else:
            print('没有发现此单词')
    return np.array(resultVec)
# 将上面形成的词汇表转换成数字,以第一个数据为例,['周六', '公司', '一起', '聚餐', '时间'],
#‘周六’出现在词汇表的第9个位置,所以词汇表的第9个位置记为1,
#同理,‘公司’,‘一起’,‘聚餐’,‘时间’出现的位置都记为1,其余位置记为0,
#最终形式是[0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 1, 0, 0, 0, 0, 1, 0, 0]

trainMat = list(map(lambda x: word2Vec(allWordsVec, x), docList))
print(trainMat)
	# [array([0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
       #0, 0, 1, 0, 0, 0, 0, 1, 0, 0]), array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,
       #0, 1, 0, 0, 0, 1, 0, 0, 2, 0]), array([1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0,
       #0, 0, 0, 1, 0, 0, 1, 0, 0, 0]), array([0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0,
      # 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]), array([0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
       #0, 0, 1, 0, 1, 0, 0, 0, 0, 1]), array([0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
       #1, 0, 0, 0, 0, 1, 0, 0, 0, 0])]    
# 由于特征都是列表形式,所以要转换成矩阵的形式
classVec = np.array(classVec)
print(classVec.shape)   # (6,) 标签是一维
trainMat = np.array(trainMat)
print(trainMat.shape)   # (6, 32) 特征是二维
clf = GaussianNB()   
clf.fit(trainMat, classVec)  # 训练模型

testWords = ['公司', '聚餐', '讨论', '贝叶斯']  # 测试数据
testVec = word2Vec(allWordsVec, testWords)    # 转换成词袋模型
testVec = np.array(testVec)           
testVec = np.expand_dims(testVec, axis=0)     # 把特征转换为二维,shape=(1,32)
clf.predict(testVec)  # 输出0,分类正确
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

朴素贝叶斯(基于sklearn的实现) 的相关文章

随机推荐

  • 玩转Nginx日志

    目录标题 Nginx日志 nginx conf nginx日志切割 2 设置linux定时任务 Nginx日志 nginx conf user nobody worker processes 1 error log logs error l
  • QT------常用控件:qtlistwidget和qtlistview

    qtlistwidget和qtlistview都是用于在界面成行 成列的显示数据的 两者的区别在于 1 qtlistview可以用使用model 更便于动态添加数据 而qtlistwidget只能一条一条的增加列表项进行显示数据 使用QSt
  • 简易的学生管理系统

    文章目录 前言 一 代码 二 展示结果 1 主界面 2 输入记录 3 插入数据 4 删除数据 5 成绩排序 总结 前言 本文在链表前篇之数组的基础上写的一个简易的学生管理系统 本着练手感的目的去写的一个代码 并不是很完美 代码仅供参考 话不
  • 通过浏览器检测硬件 —— 筑梦之路

    在线硬件检测工具 测试网址1 主要检测显卡显示效果 volumeshader bm 测试网址2 可以检测cpu GPU 屏幕等精大师在线显卡测试 首页 网页版GPU性能测试工具
  • h5跳转到 苹果 ios app store 应用商店 的APP详情页面

    在开发 h5跳转到 ios系统 app store的时候遇到两个问题 原理 判断是安卓还是苹果 如果为苹果显示苹果的标签 点击a标签 执行跳转唤起APP openAPP 加一个定时器 三秒 可根据需求调整 之后 如果没有唤起成功 跳转到Ap
  • Java项目:网上图书馆管理系统(java+jsp+servlert+mysql+ajax)

    源码获取 博客首页 资源 里下载 一 项目简述 功能 区分为管理员用户和普通用户 普通用户 用户登录 个 人信息修改 图书查询 用户借阅 用户归还 管理员用 户 图书馆里 归还管理 借阅信息查询 图书维护 分 类管理 读者管理等等功能 二
  • 服务器控制口协议,服务器管理ipmi接口协议的扩展方法 Extension Methods server management interface protocol ipmi...

    摘要 The invention provides an extension method for managing an IPMI Intelligent Platform Management Interface interface p
  • eclipse中配置Tomcat

    将Tomcat服务器整合到Eclipse工具中 可以通过Eclipse启动 关闭tomcat服务器 更重要的是 可以非常方便的将在Eclipse中创建的Web项目发布到Tomcat服务器中运行 文章目录 在这里插入图片描述 方式一 在win
  • ubuntu20.04安装和卸载gtsam

    安装boost Boost gt 1 43 Ubuntu sudo apt get install libboost all dev 安装cmake CMake gt 3 0 Ubuntu sudo apt get install cmak
  • 2023第十四届蓝桥杯c++ b组省赛真题

    1 冶炼金属 题目描述 小蓝有一个神奇的炉子用于将普通金属 O 冶炼成为一种特殊金属 X 这个炉子有一个称作转换率的属性 V V 是一个正整数 这意味着消耗 V 个普通金 属 O 恰好可以冶炼出一个特殊金属 X 当普通金属 O 的数目不足
  • 十进制与任意进制互转

    n进制转十进制 static int transfer char chars int n int result 0 int index chars length 1 while index gt 0 result chars index 0
  • Linux centos redhat 装NVIDIA显卡驱动

    Linux装显卡驱动 第一步 下载驱动 对应相同型号 下载即可 英伟达驱动下载地址https www nvidia cn Download index aspx lang cn 以 K620为例 如下图 2 下载完成后需要上传至服务器 以U
  • 企业引入人脸识别考勤 想要代打卡?没门!

    近年来 伴随着生物识别技术的进步 越来越多的生物识别技术应用进入市场 冲击各大行业 传统的考勤模式同样面临着来自新兴技术的挑战 以人脸识别技术为首 掀起一场考勤领域的变革 刷脸 考勤 想要代签不容易 传统的 最为人所熟知的考勤模式莫过于磁卡
  • CH11-多媒体应用开发

    目标 掌握MediaPlayer类与SoundPool类的使用 能够实现播放音频文件的功能 掌握VideoView类的使用 能够实现播放视频文件的功能 掌握MediaPlayer类与SurfaceView类的使用 能够实现播放视频文件的功能
  • 一次性解决tensorflow-gpu:library:cusolver64_10.dll/ cudart64_101.dll/cublas64_10.dll not found等

    错误 Could not load dynamic library cudart64 101 dll Could not load dynamic library cublas64 10 dll Could not load dynamic
  • 高速入门知识02:降低串扰和维持信号完整性的布线方法

    文章目录 前言 一 单端走线布线 1 1 带有短截线的菊花链布线 1 2 没有短截线的菊花链布线 1 3 星型布线 1 4 蛇型布线 二 差分走线布线 前言 串扰是并行走线间不需要的信号耦合 微带线和带状线正确的布线和叠层布局能够降低串扰
  • 剑指 Offer 55 - II. 平衡二叉树-- 心得和思路

    Definition for a binary tree node public class TreeNode int val TreeNode left TreeNode right TreeNode int x val x class
  • 0基础学习大数据之大数据技术发展趋势如何

    大数据如今飞速发展 已经逐步开始影响到我们生活的各个角落 同时涌现出了大量新的技术 它们成为大数据采集 存储 处理和呈现的有力武器 那么大数据技术的发展趋势会是怎样的呢 2014年以后 整体大数据的技术栈已经趋于稳定 由于云计算 人工智能等
  • ufs 固态硬盘_UFS究竟是什么?对于手机提升大不大,一文带你了解

    相信很多小伙伴在2020年挑选5G新手机的时候都会看到 UFS 3 0 那这个名称与USB很类似的配置究竟是什么呢 后面的数字是越大越好 还是越小越好 现在就来科普科普 首先UFS闪存的全称Universal Flash Storage 这
  • 朴素贝叶斯(基于sklearn的实现)

    由于自己太懒 不想看太长的代码 所以我就调用的sklearn库的朴素贝叶斯类 数据集选择的是这个博客中自己构造的数据集 该博客自己实现了朴素贝叶斯类 想自己编写一个朴素贝叶斯函数的读者可以参考这个博客 下面是用sklearn库实现朴素贝叶斯