日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/9/27 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 r包调用legend函数_R语言实现基于朴素贝叶斯构造分类模型数据可视化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文內容原創,未經作者許可禁止轉載!

目錄

一、前言

二、摘要

三、關鍵詞

四、算法原理

五、經典應用

六、R建模

1、載入相關包(內含彩蛋):

1.1 library包載入

1.2 pacman包載入(彩蛋)

2、讀入數據:

3、可視化:


一、前言

樸素貝葉斯法是基于貝葉斯定理與特征條件獨立假設的分類方法,最為廣泛的兩種分類模型是決策樹模型和樸素貝葉斯模型。和決策樹模型相比,樸素貝葉斯分類器發源于古典數學理論,有著堅實的數學基礎,以及穩定的分類效率。同時,NBC模型所需估計的參數很少,對缺失數據不太敏感,算法也比較簡單。理論上,NBC模型與其他分類方法相比具有最小的誤差率。但是實際上并非總是如此,這是因為NBC模型假設屬性之間相互獨立,這個假設在實際應用中往往是不成立的,這給NBC模型的正確分類帶來了一定影響。

二、摘要

樸素貝葉斯模型的精確度很高,如果已經準備好了一個帶標簽的數據集,則我們可以使用樸素貝葉斯模型,樸素貝葉斯模型的訓練非常容易,模型的更新也非常迅速。

三、關鍵詞

樸素貝葉斯;分類器

四、算法原理

樸素貝葉斯分類(NBC)是以貝葉斯定理為基礎并且假設特征條件之間相互獨立的方法,先通過已給定的訓練集,以特征詞之間獨立作為前提假設,學習從輸入到輸出的聯合概率分布,再基于學習到的模型,輸入X求出使得后驗概率最大的輸出Y。

五、經典應用

垃圾郵件分類是樸素貝葉斯的經典應用。其原理是創造一個特征向量,每一項對應著詞典中的一個詞,之后根據每個詞是否出現在郵件中,構成一個特征向量。每封郵件都可以表示為一個二元向量,這個向量的第j個元素是0還是1取決于總共要考慮的單詞個數。

樸素貝葉斯分類應用定理來計算給定測試集個案條件下的類概率。樸素貝葉斯模型的核心概念是獨立性。(其中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”)將以上包挨個完成載入。

圖 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”)

圖 2 install.packages(“pacman”)
  • pacman包安裝成功后使用p_load( )函數,將以上對packages集群的下載及安裝代碼縮短為:

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

安裝實例如下圖所示:

圖 3 安裝實例
  • 同時所需要的相關包的依托包也自動完成載入(若存在一些依托包下載失敗的情況可以再手動官網下載相關包),打開包路徑去檢測packages集群的下載及安裝是否正確,示意圖如下:

圖 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條數據(對前十條記錄進行截取),數據樣本如下圖所示:

圖 5數據樣本

設置工作目錄后,通過write.csv()方法將數據框中數據導出到csv文件保存,效果如下:

圖 6 導出為csv文件

導出的csv文件在工作目錄下,效果如下:

圖 7 csv文件在工作目錄下

打開csv文件查看數據是否成功導出,可以發現導出成功,效果如下:

圖 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

圖 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()

圖 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)

圖 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))

圖 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

總結

以上是生活随笔為你收集整理的r包调用legend函数_R语言实现基于朴素贝叶斯构造分类模型数据可视化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。