-
Notifications
You must be signed in to change notification settings - Fork 0
/
LSED_Lab_6.R
90 lines (57 loc) · 1.76 KB
/
LSED_Lab_6.R
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
85
86
87
88
### LSED - Laboratorium 6 - Drzewa klasyfikuj¹ce - part 2
rm(list=ls())
### --- Part 1 - DRZEWA: ALGORYTM KOSZTU-Z£O¯ONOŒCI --- ###
library(MASS)
library(rpart)
library(rpart.plot)
# Generowanie
draw.data.gauss <- function(S1, S2, m1, m2, n1, n2) {
X1 <- mvrnorm(n1, m1, S1)
X2 <- mvrnorm(n2, m2, S2)
X1 <- data.frame(X1); colnames(X1) <- c("x", "y")
X2 <- data.frame(X2); colnames(X2) <- c("x", "y")
X1$class <- 1; X2$class <- 2
data <- rbind(X1, X2); data$class <- factor(data$class)
return(data)
}
# Rysowanie punktów
plot.data <- function(data) {
cols <- c("blue", "orange")
plot(data[,1:2], col = cols[data$class], cex = 2)
text(data[,1:2], labels = 1:nrow(data), cex = 0.6)
}
# Parametry danych z rozk³adu Gaussa
S1 <- matrix(c(4, 2, 2, 4), 2, 2)
S2 <- matrix(c(4, 2, 2, 2), 2, 2)
m1 <- c(-1, -1)
m2 <- c(2, 2)
n1 <- 60
n2 <- 40
# Ustawienie ziarna dla losowania danych
set.seed(1280)
# Generowanie obserwacji
data <- draw.data.gauss(S1, S2, m1, m2, n1, n2)
# Rysowanie danych
plot.data(data)
tree <- rpart(class ~ y + x, data, minsplit = 1, minbucket = 1, cp = 0)
# Rysowanie drzewa
rpart.plot(tree, type = 1, extra = 1)
printcp(tree)
plotcp(tree)
# Przycinanie drzewa
tree1 <- prune(tree, cp = 0.094)
# Nowe dane
newdata <- draw.data.gauss(S1, S2, m1, m2, n1, n2)
# Macierz pomy³ek dla pe³nego drzewa
table(newdata$class, predict(tree, newdata, type = "class"))
# Macierz pomy³ek dla drzewa przyciêtego
table(newdata$class, predict(tree1, newdata, type = "class"))
# Rysowanie drzewa
rpart.plot(tree1, type = 1, extra = 1)
print(tree1$cptable)
### --- Part 2 - Liczba Klas: G > 2 --- ###
rm(list=ls())
# Uczenie drzewa
tree <- rpart(Species ~ ., iris, minsplit = 0, cp = 0)
# Rysowanie
rpart.plot(tree, type = 1, extra = 1)