簡體   English   中英

R 中的 AODE 機器學習

[英]AODE Machine Learning in R

我想知道 AODE 是否真的比朴素貝葉斯更好,正如描述所說:

https://cran.r-project.org/web/packages/AnDE/AnDE.pdf

--> “AODE 通過對所有小空間進行平均來實現高度准確的分類。”

https://www.quora.com/What-is-the-difference-between-a-Naive-Bayes-classifier-and-AODE

--> "AODE 是一種放松朴素貝葉斯獨立性假設的奇怪方法。它不再是一個生成模型,但它以一種與邏輯回歸略有不同(且原則性較低)的方式放松了獨立性假設。它取代了凸函數用於訓練邏輯回歸分類器的優化問題,通過對訓練和測試時間的二次(基於特征數量)依賴性。”

但是當我試驗它時,我發現預測結果似乎不對,我用這些代碼實現了它:

library(gmodels)
library(AnDE)
AODE_Model = aode(iris)
predict_aode = predict(AODE_Model, iris)
CrossTable(as.numeric(iris$Species), predict_aode) 

矩陣表

任何人都可以向我解釋這一點嗎? 或者有什么好的實用解決方案來實施AODE? 先感謝您

如果您查看該功能的小插圖:

訓練:data.frame:訓練數據。 它應該是一個數據框。 AODE 僅適用於離散數據。 最好在將數據幀傳遞給此函數之前對其進行離散化。但是,如果不事先進行,aode 會將數據離散化。 為此,它使用了一個稱為離散化的 R 包。 它使用眾所周知的 MDL 離散化技術。(有時可能會失敗)

默認情況下,arules 的離散化函數將其切成 3,這對於 iris 來說可能不夠。 所以我首先重現你通過arules離散化的結果:

library(arules)
library(gmodels)
library(AnDE)
set.seed(111)
trn = sample(1:nrow(indata),100)
test = setdiff(1:nrow(indata),trn)

indata <- data.frame(lapply(iris[,1:4],discretize,breaks=3),Species=iris$Species)
AODE_Model = aode(indata[trn,])
predict_aode = predict(AODE_Model, indata[test,])
CrossTable(as.numeric(indata$Species)[test], predict_aode)

                                 | predict_aode 
as.numeric(indata$Species)[test] |         1 |         3 | Row Total | 
---------------------------------|-----------|-----------|-----------|
                               1 |        15 |         5 |        20 | 
                                 |     0.500 |     4.500 |           | 
                                 |     0.750 |     0.250 |     0.400 | 
                                 |     0.333 |     1.000 |           | 
                                 |     0.300 |     0.100 |           | 
---------------------------------|-----------|-----------|-----------|
                               2 |        11 |         0 |        11 | 
                                 |     0.122 |     1.100 |           | 
                                 |     1.000 |     0.000 |     0.220 | 
                                 |     0.244 |     0.000 |           | 
                                 |     0.220 |     0.000 |           | 
---------------------------------|-----------|-----------|-----------|
                               3 |        19 |         0 |        19 | 
                                 |     0.211 |     1.900 |           | 
                                 |     1.000 |     0.000 |     0.380 | 
                                 |     0.422 |     0.000 |           | 
                                 |     0.380 |     0.000 |           | 
---------------------------------|-----------|-----------|-----------|
                    Column Total |        45 |         5 |        50 | 
                                 |     0.900 |     0.100 |           | 
---------------------------------|-----------|-----------|-----------|

您可以看到預測中缺少其中一個類。 讓我們將其增加到 4:

indata <- data.frame(lapply(iris[,1:4],discretize,breaks=4),Species=iris$Species)
AODE_Model = aode(indata[trn,])
predict_aode = predict(AODE_Model, indata[test,])
CrossTable(as.numeric(indata$Species)[test], predict_aode)

                                 | predict_aode 
as.numeric(indata$Species)[test] |         1 |         2 |         3 | Row Total | 
---------------------------------|-----------|-----------|-----------|-----------|
                               1 |        20 |         0 |         0 |        20 | 
                                 |    18.000 |     4.800 |     7.200 |           | 
                                 |     1.000 |     0.000 |     0.000 |     0.400 | 
                                 |     1.000 |     0.000 |     0.000 |           | 
                                 |     0.400 |     0.000 |     0.000 |           | 
---------------------------------|-----------|-----------|-----------|-----------|
                               2 |         0 |        10 |         1 |        11 | 
                                 |     4.400 |    20.519 |     2.213 |           | 
                                 |     0.000 |     0.909 |     0.091 |     0.220 | 
                                 |     0.000 |     0.833 |     0.056 |           | 
                                 |     0.000 |     0.200 |     0.020 |           | 
---------------------------------|-----------|-----------|-----------|-----------|
                               3 |         0 |         2 |        17 |        19 | 
                                 |     7.600 |     1.437 |    15.091 |           | 
                                 |     0.000 |     0.105 |     0.895 |     0.380 | 
                                 |     0.000 |     0.167 |     0.944 |           | 
                                 |     0.000 |     0.040 |     0.340 |           | 
---------------------------------|-----------|-----------|-----------|-----------|
                    Column Total |        20 |        12 |        18 |        50 | 
                                 |     0.400 |     0.240 |     0.360 |           | 
---------------------------------|-----------|-----------|-----------|-----------|

它只有3個錯誤。 對我來說,這是一個在不過度擬合的情況下進行離散化的問題,這可能很棘手。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM