朴素贝叶斯算法-分类算法

                                朴素贝叶斯算法-分类算法

1 概率基础

概率定义为一件事情发生的可能性

联合概率:包含多个条件,且所有条件同时成立的概率,记作P(A,B)

条件概率:事件A在另一个事件B已经发生条件下的发送概率,记作P(A|B)

在A1,A2相互独立的情况下,条件概率的特性:P(A1,A2|B)=P(A1|B)P(A2|B)

2 贝叶斯公式

W:特征向量           C:类别

贝叶斯公式最常用于文本分类,上式左边可以理解为给定一个文本词向量W,那么它属于类别C的概率是多少。式子右边分几部分,P(W∣C​​)为在给定类别的情况下,该文档的词向量(被预测文档中出现词)的概率,P(C)为每个文档类别的概率(某文档类型词数/总文档词数),P(F1,F2..)预测文档中每个词的概率

可以理解为:

C可以是不同类别

假如有个训练集统计结果如下:

特征/统计科技历史汇总
诸葛亮26060
原子弹552075
飞机602383
卢沟桥事变06565
汇总117168285

现有一篇被预测文档:出现了原子弹,飞机,卢沟桥事变属于科技、历史的类别概率?

因为P(原子弹,飞机,卢沟桥事变)在每个统计中都是一样的,所有忽略。

P(科技|原子弹,飞机,卢沟桥事变)=P(原子弹,飞机,卢沟桥事变|科技)P(科技)=(2/55)(60/117)(0/117)(117/285)=0

P(历史|原子弹,飞机,卢沟桥事变)=P(原子弹,飞机,卢沟桥事变|历史)P(历史)=(20/168)(23/168)(65/168)(168/285)

上面的例子中,因为某个某个词的出现概率为0导致属于某个类别为0,这是不合理的,所以引入拉普拉斯平滑

3 拉普拉斯平滑

为了避免训练集样本对一些特征的缺失,即某一些特征出现的次数为0,在计算P(X​1​​,X​2​​,X​3​​,...,X​n​​∣Y​i​​)的时候,各个概率相乘最终结果为零,这样就会影响结果。我们需要对这个概率计算公式做一个平滑处理,即拉普拉斯平滑系数

其中m为特征词向量的个数,α为平滑系数,当α=1,称为拉普拉斯平滑

4 sklearn朴素贝叶斯实现API

sklearn.naive_bayes.MultinomialNB

sklearn.naive_bayes.MultinomialNB(alpha = 1.0) 朴素贝叶斯分类 alpha:拉普拉斯平滑系数

常用方法:

名称解释

fit(X y[,sample_weight])

根据X y拟合朴素贝叶斯分类器
get_params(deep=)获取此估计器的参数
set_params(PARAMS)设置此估计器的参数
partial_fit(X y[,classes,sample_weight])增量拟合一批样本
predict(X)对测试向量X组执行分类
predict_log_proda(X)返回测试矢量X的对数概率统计
predict_proda(X)测试矢量X的返回概率估计
score(X y[,sample_weight])返回给定测试数据和标签的平均精度

5 朴素贝叶斯算法案例

sklearn20类新闻分类 ,20个新闻组数据集包含20个主题的18000个新闻组帖子

步骤:①加载20类新闻数据,并进行分割

②生成文章特征词

③朴素贝叶斯estimator流程进行预估

from sklearn.naive_bayes import MultinomialNB
from sklearn.datasets import fetch_20newsgroups
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics import classification_report
#1加载20类新闻数据,并进行分割
newsgroups = fetch_20newsgroups(subset='all')
#分割
x_train,x_test,y_train,y_test = train_test_split(newsgroups.data,newsgroups.target,test_size=0.25)#2 生成文章特征词,对数据集进行特征抽取
tf = TfidfVectorizer()
#以训练集当中的词的列表进行每篇文章重要性统计
x_train = tf.fit_transform(x_train)
print(tf.get_feature_names())
x_test = tf.transform(x_test)# 进行朴素贝叶斯算法的预测
mlt = MultinomialNB(alpha=1.0)
mlt.fit(x_train,y_train)
y_predict = mlt.predict(x_test)
print("预测的文章类别为",y_predict)
score = mlt.score(x_test,y_test)
print("准确率为:", score)
print("每个类别的精确率,召回率和F1:", classification_report(y_test, y_predict, target_names=newsgroups.target_names))

6 朴素贝叶斯分类优缺点

优点: ①朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。 ②对缺失数据不太敏感,算法也比较简单,常用于文本分类。 ③分类准确度高,速度快

缺点:需要知道先验概率P(F1,F2,…|C),因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。

特点:不需要调参,如果训练集误差大,结果肯定不好。

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

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

相关文章

django简介及环境搭建

MVC简介 MVC框架的核心思想是:解耦,让不同的代码块之间降低耦合,增强代码的可扩展性和可移植性,实现向后兼容 M全拼为Model,主要封装对数据库层的访问,内嵌ORM框架,实现面向对象的编程来操作数据…

LeetCode 1312. 让字符串成为回文串的最少插入次数(区间DP)

文章目录1. 题目2. 解题1. 题目 给你一个字符串 s ,每一次操作你都可以在字符串的任意位置插入任意字符。 请你返回让 s 成为回文串的 最少操作次数 。 「回文串」是正读和反读都相同的字符串。 示例 1: 输入:s "zzazz" 输出&…

Django创建项目

创建项目的名称为test1,完成“图书-英雄”信息的维护,创建应用名称为booktest 创建项目 cd /home/Desktop/ mkdir pytest cd pytest 创建项目的命令如下: django-admin startproject test1 项目默认目录说明 进入test1目录,查看…

分类模型的评估

分类模型的评估 在许多实际问题中,衡量分类器任务的成功程度是通过固定的性能指标来获取。一般最常见使用的是准确率,即预测结果正确的百分比,方法为estimator.score() 1 混淆矩阵 有时候,我们关注的是样本是否被正确诊断出来。…

LeetCode 996. 正方形数组的数目(回溯+剪枝)

文章目录1. 题目2. 解题1. 题目 给定一个非负整数数组 A,如果该数组每对相邻元素之和是一个完全平方数,则称这一数组为正方形数组。 返回 A 的正方形排列的数目。两个排列 A1 和 A2 不同的充要条件是存在某个索引 i,使得 A1[i] ! A2[i]。 …

[Java]java反射随笔

类是面向对象的灵魂,一切事物都可以以类来抽象。 在java使用过程中,我们可能会经常用到一个反射的知识,只是别人都封装好的,如jdbc的加载驱动类有一句Class.for(“…jdbc…”).newInstance.当然框架也是离不开了反射,s…

模型的选择与调优

模型的选择与调优 1 交叉验证 1.1 交叉验证过程 交叉验证:为了让被评估的模型更加准确可信 交叉验证的意义:为了使一部分数据即当成验证集,也做过训练集,更加准确得出准确率,把最后的准确率取平均值。 注意&#…

Django创建图书管理项目(完整版

一、创建项目test1及应用booktest 创建应用booktest 二、安装应用 在test1/settings.py中INSTALLED_APPS下添加应用的名称就可以完成安装 初始项目的INSTALLED_APPS如下图: 在元组中添加一个新的项,当前示例为booktest booktest, 三、设计模型 1.定义模型…

05.序列模型 W3.序列模型和注意力机制

文章目录1. 基础模型2. 选择最可能的句子3. 集束搜索(Beam Search)4. 改进集束搜索5. 集束搜索的误差分析6. Bleu 得分7. 注意力模型直观理解8. 注意力模型9. 语音识别(Speech recognition)10. 触发字检测(Trigger Wor…

决策树-分类算法

决策树-分类算法 1 认识决策树 决策树是一种基本的分类方法,也可以用于回归。我们一般只讨论用于分类的决策树。决策树模型呈树形结构,在分类问题中,表示基于特征对实例进行分类的过程,它可以认为是if-then规则的集合。在决策树…

在Visual Studio中利用NTVS创建Pomelo项目

刚看新闻,才知道微软发布了Node.js Tools for Visual Studio(NTVS),受够了WebStorm输入法Bug的困扰,这下终于可以解脱了。以Pomelo为例,运行命令:pomelo init pomelo_test,生成一个默…

LeetCode 834. 树中距离之和(树上DP)*

文章目录1. 题目2. 解题1. 题目 给定一个无向、连通的树。树中有 N 个标记为 0...N-1 的节点以及 N-1 条边 。 第 i 条边连接节点 edges[i][0] 和 edges[i][1] 。 返回一个表示节点 i 与其他所有节点距离之和的列表 ans。 示例 1: 输入: N 6, edges [[0,1],[0,2],[2,3],[…

随机森林-集成学习方法(分类)

随机森林-集成学习方法(分类) 1 集成学习方法 集成学习通过建立几个模型组合的来解决单一预测问题。它的工作原理是生成多个分类器/模型,各自独立地学习和作出预测。这些预测最后结合成单预测,因此优于任何一个单分类的做出预测…

05.序列模型 W3.序列模型和注意力机制(作业:机器翻译+触发词检测)

文章目录作业1:机器翻译1. 日期转换1.1 数据集2. 用注意力模型进行机器翻译2.1 注意力机制3. 可视化注意力作业2:触发词检测1. 数据合成:创建语音数据集1.1 听一下数据1.2 音频转频谱1.3 生成一个训练样本1.4 全部训练集1.5 开发集2. 模型2.1…

线性回归分析-回归算法

线性回归分析-回归算法 1 回归算法 机器学习中监督学习算法分为分类算法和回归算法两种,其实就是根据类别标签分布类型为离散型、连续性而定义的。回归算法用于目标是连续的,在指定区间内可以是任意一个数值,针对的是数值型的样本&#xff0…

拟合与岭回归

目录 拟合与岭回归 1 什么是过拟合与欠拟合 2 模型复杂度 3 鉴别欠拟合与过拟合 4 过拟合解决方法 5 岭回归(Ridge) 6 模型的保存与加载 拟合与岭回归 1 什么是过拟合与欠拟合 通过下面两张图来解释过拟合和欠拟合: 左图中机器通过这…

LeetCode 778. 水位上升的泳池中游泳(二分查找+dfs)

文章目录1. 题目2. 解题1. 题目 在一个 N x N 的坐标方格 grid 中,每一个方格的值 grid[i][j] 表示在位置 (i,j) 的平台高度。 现在开始下雨了。当时间为 t 时,此时雨水导致水池中任意位置的水位为 t 。 你可以从一个平台游向四周相邻的任意一个平台&a…

pycharm快捷键、常用设置、配置管理

内容包含: pycharm学习技巧 Learning tips PyCharm3.0默认快捷键(翻译的) pycharm常用设置 pycharm环境和路径配置 Pycharm实用拓展功能:pycharm中清除已编译.pyc中间文件 python2转python3最快方式 [pycharm版本控制和数据库管理][PyCharm中的那些实用功…

逻辑回归-分类算法

目录 逻辑回归-分类算法 1 概述 2 sigmoid函数 3 逻辑回归公式 4 逻辑回归的损失函数 5 均方误差与对数自然损失对比 6 sklearn逻辑回归API 7 案例 8 总结 逻辑回归-分类算法 1 概述 逻辑回归(Logistic Regression),简称LR。它的特…

LeetCode 1220. 统计元音字母序列的数目(DP)

文章目录1. 题目2. 解题1. 题目 给你一个整数 n,请你帮忙统计一下我们可以按下述规则形成多少个长度为 n 的字符串: - 字符串中的每个字符都应当是小写元音字母(a, e, i, o, u) - 每个元音 a 后面都只能跟着 e - 每个元音 e 后面…