r包调用legend函数_R语言实现基于朴素贝叶斯构造分类模型数据可视化

本文内容原创,未经作者许可禁止转载!

目录

一、前言

二、摘要

三、关键词

四、算法原理

五、经典应用

六、R建模

1、载入相关包(内含彩蛋):

1.1 library包载入

1.2 pacman包载入(彩蛋)

2、读入数据:

3、可视化:


一、前言

朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法,最为广泛的两种分类模型是决策树模型和朴素贝叶斯模型。和决策树模型相比,朴素贝叶斯分类器发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率。同时,NBC模型所需估计的参数很少,对缺失数据不太敏感,算法也比较简单。理论上,NBC模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为NBC模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,这给NBC模型的正确分类带来了一定影响。

二、摘要

朴素贝叶斯模型的精确度很高,如果已经准备好了一个带标签的数据集,则我们可以使用朴素贝叶斯模型,朴素贝叶斯模型的训练非常容易,模型的更新也非常迅速。

三、关键词

朴素贝叶斯;分类器

四、算法原理

朴素贝叶斯分类(NBC)是以贝叶斯定理为基础并且假设特征条件之间相互独立的方法,先通过已给定的训练集,以特征词之间独立作为前提假设,学习从输入到输出的联合概率分布,再基于学习到的模型,输入X求出使得后验概率最大的输出Y。

5abe949242d30f4a1a10664d7f9874f8.png

3e1bf9e1d52d28d13b3900d0bd6b41c0.png

五、经典应用

垃圾邮件分类是朴素贝叶斯的经典应用。其原理是创造一个特征向量,每一项对应着词典中的一个词,之后根据每个词是否出现在邮件中,构成一个特征向量。每封邮件都可以表示为一个二元向量,这个向量的第j个元素是0还是1取决于总共要考虑的单词个数。

8557db13736cbdc4f455af263515bd46.png

朴素贝叶斯分类应用定理来计算给定测试集个案条件下的类概率。朴素贝叶斯模型的核心概念是独立性。(其中c是一个类,X1,X2,X3……是一组特征向量,是数据集中预测变量的观测值)

概率P(c)可以视为类c的先验预期,而P(X1,..,Xp | c)则是在给定类c的条件下测试个案的似然概率。最后,分母是观测到的证据的概率。由于分母对所有类都是常数,所以决策仅取决于方程中的分子。

应用条件概率的统计定义和预测变量间独立的条件假设,推导出分式中的分子为:

朴素贝叶斯方法用训练集样本的相对频率来估计这些概率。应用这些估计值,该方法按照类概率公式来输出每一个测试个案的类概率。贝叶斯法则会帮助研究人员计算出真正想知道的概率值p(c | x)。

六、R建模

1、载入相关包:

1.1 library包载入

首先分析所需要的相关包,然后进行载入,本项目中所用的包有:

l dplyr

l purrr

l tidyr

l tidybayes

l ggridges

l cowplot

l rstan

l brms

l gganimate

l ggplot2

通过library(“packagename”)将以上包挨个完成载入。

063d87c9782ec36433136073437cb60c.png
图 1 library载入所需packages

1.2 pacman包载入

对于大规模数据的挖掘项目,多达十几个packages的载入,library( )命令会使得工作量变得很大。在这里推荐一个在R中一次性安装加载多个包的——pacman包。

  • pacman包是R包集群管理的工具,能够减少大量packages操作相关的键入。依托函数library( )为基础,pacman包能够在部署R工程时极大的提高集群管理的效率并减少有关packages的繁琐调用代码。其中p_load()方法用于一次性下载/装载/更新多个packages。
  • 首先对pacman包进行安装:

先对CRAN镜像进行设定,输入代码:install.packages(“pacman”)

9cdcec938119f779e8f5ce67a6a1c552.png
图 2 install.packages(“pacman”)
  • pacman包安装成功后使用p_load( )函数,将以上对packages集群的下载及安装代码缩短为:

pacman::p_load(packagename1,packagename2,……,packagenameN)

安装实例如下图所示:

d0c9cf35a7262ef00eab6ddaed696114.png
图 3 安装实例
  • 同时所需要的相关包的依托包也自动完成载入(若存在一些依托包下载失败的情况可以再手动官网下载相关包),打开包路径去检测packages集群的下载及安装是否正确,示意图如下:

73de8d775784d35003be85b31100ff4b.png
图 4 示意图
  • 我们可以发现相关的包及其依托包成功安装,那么接下来我们可以开始对数据进行读入操作。

2、读入数据:

rnorm(n, mean = 0, sd = 1)
n 为产生随机值个数(长度),mean 是平均数, sd 是标准差 。
使用该函数的时候后,一般要赋予它 3个值.
rnorm() 函数会随机正态分布,然后随机抽样 或者取值 n 次,
>rnorm(5,0,1) 以N(0,1)的正态分布,分别列出5个值。
r 这列代表随机,可以替换成dnorm, pnorm, qnorm 作不同计算
r = random = 随机, d= density = 密度,

p= probability = 概率 , q =quantile = 分位

参数说明:set.seed( ):设置随机数种子,确保实验结果可以复现。

代码如下:

> set.seed(4118)

> n=100

> cens_df=tibble(

+ y_star=rnorm(n,0.5,n),

+ y_lower=floor(y_star),

+ y_upper=ceiling(y_star),

+ censoring="interval"

+ )

> cens_df

则cens_df数据集包含生成的n=100条数据(对前十条记录进行截取),数据样本如下图所示:

e0bb2b2de0691f90af92a9d767647e2c.png
图 5数据样本

设置工作目录后,通过write.csv()方法将数据框中数据导出到csv文件保存,效果如下:

ad0289a0eac1901b261e95079944c8a6.png
图 6 导出为csv文件

导出的csv文件在工作目录下,效果如下:

477f0d5ffcead6ce67516e743643243f.png
图 7 csv文件在工作目录下

打开csv文件查看数据是否成功导出,可以发现导出成功,效果如下:

e8f481ce11d7d17d524d4547b45c0b2a.png
图 8 数据导出成功

数据读入操作完成,接下来对数据进行可视化操作。

3、可视化操作:

3.1可视化:

首先对可视化过程中可能涉及到的几个包与函数进行功能说明,本文的可视化实现全是基于ggplot()函数来完成各图像的绘制。

ggplot(data,aes(x,y)) + 初始化图形并指定数据源和作图变量

geom_type()+ 指定图形的类型

annotate()+ 添加文本注释

labs()+ 修改住坐标和坐标轴标题

  • 管道函数:

%>%来自dplyr包的管道函数,其作用是将前一步的结果直接传参给下一步的函数,从而省略了中间的赋值步骤,可以大量减少内存中的对象,节省内存。

符号%>%,这是管道操作,其意思是将%>%左边的对象传递给右边的函数,作为第一个选项的设置(或剩下唯一一个选项的设置)

  • geom_density_ridges():

主要根据密度绘制山脊线图,该函数首先会根据数据计算密度然后绘图,此时美学映射height没有必要写入函数中。

  • geom_jitter():

在R中散点图的时候会经常出现,点重合比较严重的现象,这对我们寻找数据规律或者观察数据有很大的干扰。所幸的是R中,可以用geom_jitter()函数来调整,消除点的重合。

geom_jitter(mapping = NULL, data = NULL, stat = "identity", position = "jitter", ..., width = NULL, height = NULL, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE)就参数而言,geom_jitter()和其他函数差别不大,特别的两个参数是width,height

width 用于调节点波动的宽度

height 用于调节点波动的高度

  • 标度Scale:

标度(scale),是将数据空间(标度的定义域)映射到图形属性空间(标度的值域)
的一个函数。每一种图形属性都有一个默认的标度,当我们每一次使用这个图形属性时都会自动
添加到图形中。

  • geom_dotplot:

ggplot2包中绘制点图的函数有两个:geom_point和 geom_dotplot,当使用geom_dotplot绘图时,point的形状是dot,不能改变点的形状,因此,geom_dotplot 叫做散点图(Scatter Plot),通过绘制点来呈现数据的分布,对点分箱的方法有两种:点密度(dot-density )和直方点(histodot)。当使用点密度分箱(bin)方式时,分箱的位置是由数据和binwidth决定的,会根据数据进行变化,但不会大于binwidth指定的宽度;当使用直方点分箱方式时,分箱有固定的位置和固定的宽度,就像由点构成的直方图(histogram)。

bin是分箱的意思,在统计学中,数据分箱是一种把多个连续值分割成多个区间的方法,每一个小区间叫做一个bin(bucket),这就意味着每个bin定义一个数值区间,连续值会落到相应的区间中。对点进行分箱时,点的位置(Position adjustment)有多种调整方式:

identity:不调整

dodge:垂直方向不调整,只调整水平位置

nudge:在一定的范围内调整水平和垂直位置

jitter:抖动,当具有离散位置和相对较少的点数时,抖动很有用

jitterdodge:同时jitter和 dodge

stack:堆叠,

fill:填充,用于条形图

  • 使用geom_dotplot()函数来绘制点图:

geom_dotplot(mapping = NULL, data = NULL, position = "identity", ...,

binwidth = NULL, binaxis = "x", method = "dotdensity",

binpositions = "bygroup", stackdir = "up", stackratio = 1,

dotsize = 1, stackgroups = FALSE, origin = NULL, right = TRUE,

width = 0.9, drop = FALSE, na.rm = FALSE, show.legend = NA,

inherit.aes = TRUE)

uncensored_plot=cens_df %>%

ggplot(aes(y=””,x=y_star))+

geom_density_ridges(bandwidth=0.5,scale=1.5)+

geom_jitter(aes(y=0.75,color=ordered(y_lower)),position=position_jitter(height=0.2))+

ylab(NULL)+

scale_x_continuous(breaks=-4:4,limits=c(-4,4))

censored_plot=cens_df %>%

ggplot(aes(y=””,x=(y_lower+y_upper)/2))+

geom_dotplot(

aes(fill=ordered(y_lower)),

method=”histodot”,origin=-4,binwidth=1,dotsize=0.5,stackratio=.8,show.legend=FALSE, stackgroups=TRUE,binpositions=”all”,color=NA)+

geom_segment(

aes(x=y+0.5,xend=y+0.5,y=1.75,yend=1.5,color=ordered(y)),

data=data.frame(y=unique(cens_df$y_lower)),show.legend=FALSE,

arrow=arrow(type=”closed”,length=unit(7,”points”)),size=1)+

ylab(NULL)+

xlab(“interval-censored y”)+

scale_x_continuous(breaks=-4:4,limits=c(-4,4))

plot_grid(align=”v”,ncol=1,rel_heights=c(1,2.5),

uncensored_plot,

censored_plot

32bfc3f30cc656d36b8848216af91c34.png
图 9 对模型进行可视化

3.2数值比较:

ggplot2 geom设置—散点图

散点图也是目前R中的常用的图形之一

geom_point(mapping = NULL, data = NULL, stat = "identity", position = "identity", na.rm = FALSE, ...),类似上文中的geom_jitter

m %>%

spread_draws(condition_mean[condition],response_sd) %>%

mutate(y_rep=rnorm(n(),condition_mean,response_sd)) %>%

median_qi(y_rep, .width=c(.95, .8, .5)) %>%

ggplot(aes(y=fct_rev(condition),x=y_rep))+

geom_intervalh()+

geom_point(aes(x=response),data=ABC)+

scale_color_brewer()

909adfc95c224b2221fbfcf48c3cada6.png
图 10 对模型的数值进行比较

3.3 绘制分位数点图:

spread用来扩展表,把某一列的值(键值对)分开拆成多列。

spread(data, key, value, fill = NA, convert = FALSE, drop =TRUE, sep = NULL)

key是原来要拆的那一列的名字(变量名),value是拆出来的那些列的值应该填什么(填原表的哪一列)

spread_draws(condition_mean[condition]) %>%

do(tibble(condition_mean=quantile(.$condition_mean,ppoints(100)))%>%

ggplot(aes(x= condition_mean)) +

geom_dotplot(binwidth =.04) +

facet_grid(fct_rev(condition) ~.) +

scale_y_continuous(breaks =NULL)

019b0438ad1425666b7587ef15637c39.png
图 12 绘制分位数点图

3.4绘制小提琴图:

小提琴图(Violin Plot)用于显示数据分布及其概率密度,因其形状酷似小提琴而得名。

这种图表结合了箱线图和密度图的特征,主要用来显示数据的分布形状。中间的黑色粗条表示四分位数范围,从其延伸的幼细黑线代表95% 置信区间,而白点则为中位数。如果需要,中间的箱线图还可以替换为误差条图。

箱线图或误差条图在数据显示方面受到限制,简单的设计往往隐藏了有关数据分布的重要细节。例如使用箱线图时,我们不能了解数据分布是双模还是多模。小提琴图能够展示数据的真正分布范围和形状。值得注意的是,虽然小提琴图可以显示更多详情,但它们也可能包含较多干扰信息。

使用工具:R语言中的ggplot2工具包。

spread_draws(condition_mean[condition]) %>%

ggplot(aes(y=fct_rev(cens_df),x= cens_df))+

geom_violinh(color=NA,fill=”gray65”)+

stat_pointintervalh(.width=c(.95,.66))

fd97ae1665448e16ab24883b817faa15.png
图 11 小提琴图

七、总结

7.1小结:

朴素贝叶斯(Naive Bayes)是一种生成学习算法,即对p(x | y)进行建模,该理论是基于贝叶斯定理的一种统计分类方法,应用到预测变量之间具有独立想这一假设。在实际应用中,通常会有一个简单的基础模型以备使用。

我们首先搜集相关资料,基于朴素贝叶斯构造分类模型,朴素贝叶斯模型的精确度很高,如果已经准备好了一个带标签的数据集,则我们可以使用朴素贝叶斯模型,朴素贝叶斯模型的训练非常容易,模型的更新也非常迅速。

通过对于资料进行整合,发现需要依托的包比较大,然后一个一个导入package使得工作量过大,便在网上查询有没有什么更便捷的方法可以一次load所需要的所有包。果不其然我们找到了pacman包,该包的具体依托函数library( )为基础,pacman包能够在部署R工程时极大的提高集群管理的效率并减少有关packages的繁琐调用代码。其中p_load()方法用于一次性下载/装载/更新多个packages。

完成了相关package的导入以后我们便开始生成相关的随机数,作为我们的数据集,在这里用到了rnorm和set.seed,完成了100条记录的生成,并且导出为csv文件。

接下来最后一步就是对我们生成数据进行可视化操作,分别进行了基本的可视化操作,然后对模型进行数值比较,再是绘制分位数点图和绘制小提琴图,完成了可视化实现。

7.2 收获:

本题目灵感来源于当时所作的”基于神经网络的故障电弧检测研究”科创项目,其中目前研究多为通过快速傅里叶变换来完成故障电弧的数据处理,还有一些相关的生成学习算法,然后就有了基于朴素贝叶斯构造分类模型的灵感。

本论文的完成加深了对各类包的理解,同时以及ggplot包的各种绘图神器,绘制一些简单的散点图、折线图、箱型图、小提琴等图形。还对R语言完成从零到简单入门,进一步的感受到R语言对于庞大数据量进行可视化操作的便利度,相比于matlab的图形处理在很多方面都有更多的便利。

欢迎大家加入人工智能圈参与交流

http://www.zhihu.com/club/1211742218421227520​www.zhihu.com

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

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

相关文章

如何基于Dataphin实现敏感数据保护

简介: 在企业的发展过程中,如果不重视敏感数据的保护,和数据安全体系的建设,那么一旦发生了敏感数据泄漏事件,轻则企业口碑受损,业务受影响;重则会直接触法律,受到主管部门的处罚和制…

百度研究院发布2022科技趋势预测:大模型实用化、AI助力深空探测成热门

1月25日,百度研究院发布2022年科技趋势预测,这是其连续第三年发布对前沿科技趋势的展望。 今年上榜的科技趋势预测涵盖了AI核心技术、交叉学科与跨领域研究,以及AI的产业及社会价值三个层面,包括预训练大模型、AI for Science&am…

计算机操作员技术特长,计算机及应用专业自我鉴定(通用5篇)

计算机及应用专业自我鉴定(通用5篇)自我鉴定是个人在一个阶段的自我总结,自我鉴定可以总结出具体的经验,因此我们是时候写一份自我鉴定了。自我鉴定一般是怎么写的呢?以下是小编收集整理的计算机及应用专业自我鉴定(通用5篇),仅供…

5 款阿里常用代码检测工具,免费用!

简介: 5 款阿里常用代码检测工具免费体验,仅需 2 步,Cherry键盘、公仔抱回家,100%拿奖! 作者 | 喻阳 面临问题 在日常研发过程中,我们通常面临的代码资产问题主要分为两大类:代码质量问题和代…

查看topic信息_如何规划的你博客文章主题(Topic)

产品有了, 写手有了。该写哪些主题,就成问题了。这篇文章,会结合真实案例,告诉大家,该如何规划自己的博客主题。(注意这里不是标题)。以我最近的一个项目, 游泳池产品为例。关键词叫…

DataWorks功能实践速览 — 参数透传

简介: DataWorks功能实践系列,帮助您解析业务实现过程中的痛点,提高业务功能使用效率! 往期回顾: DataWorks 功能实践速览01期——数据同步解决方案:为您介绍不同场景下可选的数据同步方案。DataWorks 功能…

GPU还是IPU?IPU 芯片厂商 Graphcore 的 2021

作者 | 宋慧 出品 | CSDN 云计算&AI 科技大本营 AI 人工智能毋庸置疑是目前最火的 IT 技术领域之一,而主攻图形计算的 NVIDIA GPU(图形处理器)又是现今 AI 领域的当红炸子鸡。不过 AI 芯片领域又迎来了新的挑战者,2016 年创立…

云原生大数据架构中实时计算维表和结果表的选型实践

简介: 随着互联网技术的日渐发展、数据规模的扩大与复杂的需求场景的产生,传统的大数据架构无法承载。 作者 | 志羽 来源 | 阿里技术公众号 一 前言 传统的大数据技术起源于 Google 三架马车 GFS、MapReduce、Bigtable,以及其衍生的开源分布…

冬奥开幕在即,现场通信网络技术深度揭秘!

作者 | 小枣君来源 | 鲜枣课堂还有9天,举世瞩目的北京冬奥会就将拉开大幕。本次冬奥会,是继2008年之后,中国再一次承办这种世界最顶级体育盛会。这两年全球疫情肆虐,抗疫形势波折多变。北京冬奥能够如期举办,意义极为重…

Flink 在 58 同城的应用与实践

简介: 58 同城的实时 SQL 建设以及如何从 Storm 迁移至 Flink。 本文整理自 58 同城实时计算平台负责人冯海涛在 Flink Forward Asia 2020 分享的议题《Flink 在 58 同城应用与实践》,内容包括: 实时计算平台架构实时 SQL 建设Storm 迁移 Fli…

vue解构赋值_前端开发es6知识 模块化、解构赋值、字符串模板

项目开发中一些常用的es6知识,主要是为以后分享小程序开发、nodekoa项目开发以及vueSSR(vue服务端渲染)做个前置铺垫。项目开发常用es6介绍1、块级作用域 let const2、箭头函数及this指向3、promise、asnyc await语法4、模块化 module export和import5、解构赋值、字…

当云原生遇到混合云:如何实现“求变”与“求稳”的平衡

简介: 多年来,随着云计算技术的蓬勃发展和落地,越来越多的企业选择采用云计算技术来帮助自己快速完成业务数字化转型,以便能更好地适应市场变化,进而赢得更大的市场空间。 作者|郝树伟 Flexera 的《RightScale2021 云…

之前写的 JSX 的条件语句竟然存在那么多 Bug?

作者 | 零一来源 | 前端印象今天的主题是&#xff1a;关于 JSX 的条件语句&#xff0c;你不知道3件事一、&&隐藏大坑在 JSX 里写条件语句&#xff0c;&& 应该是用的最多的了&#xff0c;例如&#xff1a;function Demo () {// ...省略一些代码return (<div&…

如何高效学习 Kubernetes 知识图谱?

简介&#xff1a; Kubernetes 知识图谱遵循云原生人才学习路径搭建课程体系框架&#xff0c;及人才发展路线设置不同阶段&#xff0c;由浅入深&#xff0c;帮助云原生人才学习容器基础、Kuternetes 网络、存储、资源对象、服务发现、应用编排与管理等 Kubernetes 完整技术栈内容…

中科院信工所经验_2021中科院信息工程研究所电子信息专业考研经验指导分享...

一、在计算机如此火热的今天&#xff0c;为什么选择要读研&#xff1f;我是一个乐观主义者&#xff0c;上大学以来我一直庆幸自己在高考结束填志愿的时候选择了计算机专业&#xff0c;更庆幸报考了湖南大学信息科学与工程学院&#xff0c;高考仅仅一分的优势把我送到了最美的学…

极验创始人吴渊:恶意流量威胁新趋势,揭秘网络黑产3大核心本质

记者 | 邓晓娟出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;天下没有免费的午餐&#xff0c;更没有免费的流量。以电商为例&#xff0c;最疯狂的时候&#xff0c;某电商平台单个获客成本接近400元。作为互联网的稀缺资源&#xff0c;流量的成本不断冲击着…

如何将一棵LSM-Tree塞进NVM

简介&#xff1a; 随着非易失内存产品的商业化推广&#xff0c;我们对于其在云原生数据库中大规模推广的潜力越来越有兴趣。X-Engine是阿里云数据库产品事业部PolarDB新型存储引擎团队研发的一个LSM-tree存储引擎&#xff0c;目前在阿里云PolarDB产品上提供对外服务。我们以X-E…

axiosa安装_axios安装指令及数据请求

axios安装指令及数据请求1、axios安装指令&#xff1a;cnpm axios --save在核心文件(main.js)中引入import axios from axiosVue.prototype.$axios sxiosv-for"(item,index) in goods":key"index"style"border:1px solid #999;margin:10px"clic…

计算机模拟数学实验动画,计算机图形学实验-简单动画的实现、三维图形变换.docx...

安徽大学计算机实验教学中心PAGE安徽大学计算机实验教学中心PAGE 1学号 专业 姓名实验日期2018.12.11 教师签字 成绩实验报告【实验名称】简单动画的实现、三维图形变换【实验目的】指定图形运动轨迹&#xff0c;实现物体的移动过程和移动速度控制&#xff1b;(2) 理解并掌握形…

再见了,我的散装研发管理平台;再见了,4台ECS!

简介&#xff1a; 目前云效全家桶的功能相对来说比较适合个人开发或者中小团队的群体&#xff0c;如果你此时正在为搭建这类管理平台做选型&#xff0c;同时预算和人力都捉襟见肘&#xff0c;那么不妨试试云效这个产品&#xff01;一起白嫖一起爽&#xff01;尤其服务器资源在阿…