python实现排列组合公式算法_朴素贝叶斯算法的Python实现

8ff3743a3413ce343dbe3e60eaee6ab0.png

朴素贝叶斯分类算法被广泛应用于文本分类场景中、包含垃圾邮件、互联网新闻等分类任务,属于有监督学习算法。它独立考量每一维度特征被分类的条件概率,然后综合这些概率对其所在的特征向量做出分类预测,即“假设各个维度上的特征被分类的条件概率之间是相互独立的”,该假设使得模型预测需要计算的参数规模从指数级降至线性级,极大地提升计算效率。该算法在模型训练过程中没考虑各个维度特征的相互联系,对于关联性较强的数据特征分类效果较差。

朴素贝叶斯的优缺点

优点:数据集较小时模型表现很好,适合增量式训练、多分类任务。

缺点:对输入数据的表达形式很敏感,由于其“朴素”的特点,也会带来一些准确率上的损失。


MultinomialNB算法的一般流程

  1. 数据采集:使用NumPy与pandas以及sklearn.datasets等方式获取或处理数据集
  2. 数据预处理:测试集、训练集构建,进行数据标准化处理,提取文本特征向量矩阵。
  3. 模型训练:MultinomialNB算法
  4. 模型测试:使用测试集,验证模型性能。
  5. 模型优化:使用交叉验证法优化K值取值。

MultinomialNB(多项式模型)的Python实现

1. 数据采集

该数据集包含分布在20个不同新闻组中的18846篇文档,

数据来源:from sklearn.datasets import fetch_20newsgroups

数据标签:

'alt.atheism', 'comp.graphics', 'comp.os.ms-windows.misc', 'comp.sys.ibm.pc.hardware', 'comp.sys.mac.hardware', 'comp.windows.x', 'misc.forsale', 'rec.autos', 'rec.motorcycles', 'rec.sport.baseball', 'rec.sport.hockey', 'sci.crypt', 'sci.electronics', 'sci.med', 'sci.space', 'soc.religion.christian', 'talk.politics.guns', 'talk.politics.mideast', 'talk.politics.misc', 'talk.religion.misc'

数据样例:

From: Alexander Samuel McDiarmid

Subject: driver ??

Organization: Sophomore, Mechanical Engineering, Carnegie Mellon, Pittsburgh, PA

Lines: 15

NNTP-Posting-Host: po4.andrew.cmu.edu

1) I have an old Jasmine drive which I cannot use with my new system ……

使用sklearn.datasets.fetch_20newsgroups(新闻数据抓取器),加载数据集,Python实现如下:

a7c05b9ffe201869cf6b7abf7bbf6e0a.png

2. 数据预处理

使用 sklearn.model_selection.train_test_split方式,将整个数据集随机抽取80%作为训练集、剩余的20%作为测试集,并且进行数据标准化处理,且重复运行时,训练集与测试集不发生变化,Python实现如下:

8167b889db280b9416fcd2ce6f8a6d72.png

尝试使用四种方式实现文本特征向量的提取,并查看不同文本特征提取方式对算法分类识别率的影响:

  • CountVectorizer提取特征向量。
  • CountVectorizer提取特征向量且去掉停词。
  • TfidfVectorizer提取文本特征向量。
  • TfidfVectorizer提取文本特征向量且去掉停词。

CountVectorizer只考虑每种词汇在训练文本中出现的频率,而TfidfVectorizer除了考量某词汇在训练文本中出现的频率之外,能够降低出现频率高没有意义的词汇出现带来的影响,训练文本的数量越多,TfidfVectorizer方式更有优势,Python实现如下:

a74c960bd0dc6dbfbb6009dbac45e516.png

3. 模型训练及测试

7791bc9415b939f8b513990c71c47e0f.png

测试集验证结果如下:

d9ab6489a5c1af4ae9e3110046b071ea.png

扩展:生成模型和判别模型的区别

有监督机器学习方法可以分为生成模型和判别模型。

生成模型

无穷样本 -> 概率密度模型 = 产生式模型 -> 预测

生成式模型求得联合概率P(Y,X),对于未见示例X,需要求出X与不同标签之间的联合概率分布,然后概率大的获胜。

  • 常见生成模型:朴素贝叶斯、KNN、高斯混合模型、隐马尔可夫模型、限制玻尔兹曼机、文档主题生成模型(LDA)
  • 生成模型举例:利用生成模型是根据哈士奇的特征首先学习出一个哈士奇的模型,然后根据边境牧羊犬的特征学习出一个边境牧羊犬的模型,然后从这只羊中提取特征,放到哈士奇羊模型中看概率是多少,在放到边境牧羊犬模型中看概率是多少,哪个概率大就是哪种品种的狗,求的是P(X,Y),即联合概率。

判别模型

有限样本 -> 判别函数 = 判别式模型 -> 预测

对于判别式模型来说求得P(Y|X),对未见示例X,根据P(Y|X)可以求得标记Y,即可以直接判别出标签。

  • 常见判别模型:K-近邻、决策树、SVM、线性判别分析(LDA)、支持向量机、线性回归、传统的神经网络、逻辑斯蒂回归。
  • 判别模型举例:要确定一个狗是哈士奇还是边境牧羊犬,用判别模型的方法是从训练集中学习到模型,然后通过提取这只狗的特征来直接预测出这只狗的品种(正例)概率,其根据X“判别”Y,求的是P(Y|X),即后验概率。

判别式模型是根据一只狗的特征可以直接给出这只狗品种(正例)的概率(比如 概率为0.8),而生成式模型是要都试一试((X,Y¹), (X,Y²), (X,Y³),…),概率最大的那个就是这只狗的品种结果。

8f5dd4b498768836aa2b8c55a5c0f91b.png

后续会继续分享线性、决策树、SVM、随机森林、K均值聚类等算法介绍及Python实现,若对你有所帮助,欢迎大家评论、留言、关注,感谢支持!

381544c6152ecd9b019f44c723717adb.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/427871.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言操作符总结

一.算术操作符 包括:、 - 、* 、 / 、 % 1.除了%操作符之外,其他的几个操作符可以作用与整数和浮点数。 2.对于/操作符,如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。 3.%操作符的两个操作数必须…

cdr怎么做文字路径_整理128张图片,告诉你文字少的PPT应该怎么做?

点击上方蓝字关注↑,下次看文更方便!微信扫码观看全套Excel、Word、PPT视频作者:自律的音律 来源:自律的音律(ID:yinlvPPT)哈喽,又到周一干货时间。我经常被问到一个问题,PPT 字多的时候&#…

QT安装配置是注意事项

1、源码所在路径不能包含中文 2、构建目录必须和源码目录同级别(在一个文件夹下) 2.1 在 “项目”---构建设置--摘要--构建目录 中 设置构建目录 3、构建套件必须选择正确,否则无法编译 3.1 点击左下角 Debug图标,选择合适的构建…

网件rax40可以刷梅林_美国网件发布全系列Wi-Fi6家用无线路由器,部署未来家用产品市场...

5月25日,美国网件在深圳海上世界文化艺术中心发布全线WiFi 6产品,即RAX40、RAX80、RAX120、RAX200四款产品,重新布局WiFi市场,理论速度远远超出大多数家庭互联网连接所能提供的速度。新产品支持下一代Wi-Fi标准——802.11ax&#…

scikit-learn 学习笔记-- Generalized Linear Models (三)

Bayesian regression 前面介绍的线性模型都是从最小二乘,均方误差的角度去建立的,从最简单的最小二乘到带正则项的 lasso,ridge 等。而 Bayesian regression 是从 Bayesian 概率模型的角度出发的,虽然最后也会转换成一个能量函数的…

ios 部分string颜色_iOS-代码混淆加固方案

对于iOS来说,由于系统是封闭的,APP上架需要通过App Store,安全性来说相当高。但是对于大厂和知名APP而言,别人给的安全保障永远没有自己做的来得踏实。所以对于大厂、少部分企业级和金融支付类应用来说加固是相当重要的。下面是目…

Python入门基础之迭代和列表生成式

什么是迭代 在Python中,如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们成为迭代(Iteration)。 在Python中,迭代是通过 for ... in 来完成的,而很多语言比如C或…

安川最小巧机器人_2020工博会,安川展品前瞻(机器人篇)

~基于YASKAWA(安川)核心产品和i-Mechatronics(i立方-机电一体化)概念,实现客户的生产改革~这次的中国国际工业博览会安川将展出至今为止最多的演示机数量。•提供现在重点关注的智能制造、半导体、汽车制造个性化解决方案•提供适用于所有生产…

EF关闭自动创建数据库表的方式

public class MyEF:DbContext{public MyEF():base("nameCodeFirstDb"){Database.SetInitializer<MyEF>(null);}} } 转载于:https://www.cnblogs.com/kangyuanjiang/p/8726182.html

如何调度spark程序_如何定时,周期性的运行程序?Python APScheduler实现任务灵活调度...

在我们的开发工作中&#xff0c;时常会有这样的开发需求&#xff0c;如需要定时或者周期性的运行某些程序&#xff0c;因此经常用到一些定时服务&#xff0c;如在 Linux系统中使用 Crond 服务实现程序的定时运行。在 Python中也有这样的一个模块&#xff0c;那就是 APScheduler…

caffe生成voc格式lmdb

要训练ssd基本都是在liu wei框架下改&#xff0c;生成lmdb这一关照葫芦画瓢总遇坑&#xff0c;记录之&#xff1a; 1. labelmap_voc.prototxt要根据自己的分类修改&#xff0c;比如人脸检测改成这样&#xff1a; item {name: "none_of_the_above"label: 0display_nam…

redis实现轮询算法_【07期】Redis中是如何实现分布式锁的?

点击上方“Java面试题精选”&#xff0c;关注公众号面试刷图&#xff0c;查缺补漏分布式锁常见的三种实现方式&#xff1a;数据库乐观锁&#xff1b;基于Redis的分布式锁&#xff1b;基于ZooKeeper的分布式锁。本地面试考点是&#xff0c;你对Redis使用熟悉吗&#xff1f;Redis…

prometheus 笔记

前言 prometheus 是监控应用软件类似于nagios. 安装 1.官网下载prometheus-2.2.0.linux-amd64压缩包&#xff0c;解压,执行./prometheus即可。这里重要的是配置文件。 a.如果要远程热加载配置文件,启动时加上--web.enable-lifecycle参数。 调用指令是curl -X POST http://local…

前端radio单选框默认选中_开发记录篇前端内容1

有段时间没有更新文章了&#xff0c;因为是用的公司电脑&#xff0c;没有虚拟机&#xff0c;所以就没法演示hadoop相关的东西了&#xff0c;而且大数据篇的东西需要花费一些时间和精力去收集整理内容&#xff0c;那大数据篇就先暂停一下。最近这段时间的话我可能会更新一些开发…

专属海报小程序_剑3泡泡 | 小程序给你一份专属的账号海报!

01按照惯例&#xff0c;这里是简介paopaods.com本期推送的是&#xff1a;如何正确的使用小程序每个账号均可小程序【剑3泡泡】搜到&#xff0c;生成专属账号海报&#xff01;点击底部【点我卖号】即可拥有&#xff01;02教程开始之前&#xff0c;安利paopaods.com泡泡家定金调整…

日志log4cxx 封装、实例讲解、配置文件log4cxx.properties

日志log4cxx 封装、实例讲解、配置文件log4cxx.properties 1. 日志作用 程序运行过程中&#xff0c;需要记录程序中的运行状况&#xff0c;方便排查问题&#xff0c;记录数据。可以根据日志的记录快速定位错误发生的地方&#xff0c;然后修改代码。还可以设置日志级别&#xff…

td不允许自己扩展_V神原文详解:通过及时性检测器(TD)解决区块链的51%攻击问题...

注&#xff1a;原文作者是以太坊联合创始人Vitalik Buterin&#xff0c;在这篇文章中&#xff0c;他提出了一种称为及时性检测器(TD)的构造&#xff0c;以试图解决区块链51%攻击的问题。(图&#xff1a;Vitalik Buterin)以下为译文&#xff1a;摘要我提出了一种基于Lamport 99%…

Hadoop安装之JDK在Centos虚拟机中安装

安装jdk.bin和jdk.tar.gz打的办法 安装jdk.bin 安装好的VM Centos7的虚拟机&#xff0c; 1、查看是否是64位操作系统&#xff1a; cat /proc/cpuinfo | grep flags | grep lm | wc -l 如果结果>0 则是64位操作系统 2、JDK 中 jdk-6u41-linux-x64.bin 和 jdk-6u41-linux-x64…

Exp3 免杀原理与实践

---恢复内容开始--- 一&#xff0c;实验内容 利用多种工具实现实现恶意代码免杀在另一台电脑上&#xff0c;杀软开启的情况下&#xff0c;实现运行后门程序并回连成功二&#xff0c;实验步骤 &#xff08;1&#xff09;使用msf编码器生成的后门程序 这里可以直接用上次实验生成…

如何进入指定文件目录_Python如何遍历操作指定文件目录下的全部Excel文件?

Python Tablib是麻省理工学院授权的与格式无关的表格数据集库。支持导入、导出和操作表格数据集&#xff0c;轻松的将数据导出为各种不同的格式&#xff0c;包括excel&#xff0c;json&#xff0c;html&#xff0c;yaml&#xff0c;csv&#xff0c;tsv等格式。接下来&#xff0…