update.nb2: Update Naive Bayes Classifier with New Data

Description Usage Arguments See Also Examples

Description

Update Naive Bayes Classifier with New Data

Usage

1
2
## S3 method for class 'nb2'
update(object, newdata, y, ...)

Arguments

object

[nb2]
Naive Bayes model to be updated.

newdata

[data.frame]
Data.frame with same column names as in object.

y

[factor | numeric | character]
Class vector.

...

Arguments passed to nb2().

See Also

nb2, plot.nb2, print.nb2, predict.nb2

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
data = data.frame(x1 = 1:10, x2 = 1:10)
class = factor(rep(1:2, each = 5))
(object = nb2(data, class))
newdata = data.frame(x1 = 11:14, x2 = 11:14)
y = factor(rep(1:2, each = 2))
update(object, newdata, y)

data = data.frame(x1 = 1:10, x2 = 1:10)
class = factor(rep(1, 10))
(object = nb2(data, class))
newdata = data.frame(x1 = 11:14, x2 = 11:14)
y = factor(rep(1:2, each = 2))
update(object, newdata, y)

## Not run: 
set.seed(1909)
dat = mlbench::mlbench.smiley(500)
obj = nb2(x = dat$x[1:100, ], y = dat$classes[1:100])
plot(obj, xlim = c(-2, 2), ylim = c(-2, 2), gg = FALSE)
i = j = 101
while (i < nrow(dat$x)) {
  j = min(j + max(rpois(1, 10), 2), nrow(dat$x))
  newd = dat$x[i:j, ]
  newc = dat$classes[i:j]
  obj = update(obj, newd, newc)
  cat(i, j)
  print(all.equal(obj, nb2(dat$x[1:j, ], dat$classes[1:j]),
                  check.attributes = FALSE, check.names = FALSE))
  plot(obj, xlim = c(-2, 2), ylim = c(-2, 2), gridsize = 50, gg = FALSE)
  points(dat$x[1:j, ], col = dat$classes[1:j], pch = 4, lwd = 4)
  if (requireNamespace("BBmisc", quietly = TRUE)) BBmisc::pause()
  i = j + 1
}
all.equal(obj, nb2(dat$x, dat$classes), check.attributes = FALSE, check.names = FALSE)

## End(Not run)


### mixed attributes:
set.seed(1909)
daten <- mlbench::mlbench.2dnormals(1000)
daten$x <- data.frame(daten$x, X3 = factor(as.numeric(daten$classes) + rbinom(1000, 1, 0.2)))
plot(daten)

mod1 <- nb2(daten$x[, 1:2], daten$classes)
preds1 <- predict(mod1, daten$x[, 1:2])
mean(preds1 != daten$classes)

mod2 <- nb2(daten$x, daten$classes)
preds2 <- predict(mod2, daten$x)
mean(preds2 != daten$classes)

k <- sample(1:1000, 100)
newdata <- daten$x[k, ]
y <- daten$classes[k]

all.equal(update(mod2, newdata, y), nb2(rbind(daten$x, newdata), c(daten$classes, y)),
          check.attributes = FALSE, check.names = FALSE)


iris.disc <- iris[, 1:4]
discParam <- list(Sepal.Length = c(5, 6, 7), Sepal.Width = c(2.5, 3.5))
iris.disc[, 1:2] <- sapply(names(discParam), simplify = FALSE, function(x)
  cut(iris[, x], breaks = unique(c(Inf, -Inf, discParam[[x]]))))
mod.disc1 <- nb2(iris.disc[, 1:4], iris[, 5])

mod.disc2 <- nb2(iris[, 1:4], iris[, 5], discretize = "fixed", discParam = discParam)

all.equal(mod.disc1, mod.disc2)

plot(mod.disc1)
plot(mod.disc2, xlim = c(4, 8), ylim = c(1.5, 4.5))
plot(mod.disc1, features = c(1, 3))
plot(mod.disc2, xlim = c(4, 8), features = c(1, 3))


k <- sample(nrow(iris), 10)
newdata1 <- iris.disc[k, 1:4]
newdata2 <- iris[k, 1:4]
y <- iris[k, 5]

upd1 <- update(mod.disc1, newdata1, y)
upd2 <- update(mod.disc2, newdata2, y)
all.equal(upd1, upd2)

aschersleben/NBCD documentation built on May 12, 2019, 4:32 a.m.