Cvičenie 6 - Bayesov klasifikátor¶
Ako príklad si uvedieme postup pre klasifikáciu do dvoch tried (iris setosa
a iris versicolor
).
Načítame si dáta a vytvoríme si podmnožiny pre jednotlivé triedy:
data(iris)
setosa = iris[iris$Species == "setosa",]
setosa
versicolor = iris[iris$Species == "versicolor",]
versicolor
setosa = as.matrix(setosa[1:4])
setosa
versicolor = as.matrix(versicolor[1:4])
versicolor
Vypočítame si P(Y=y)
pre obe triedy:
p_setosa = nrow(setosa)/(nrow(setosa)+nrow(versicolor))
p_setosa
p_versicolor = nrow(versicolor)/(nrow(setosa)+nrow(versicolor))
p_versicolor
Vypočítame si kovariančné matice a vektory stredov pre jednotlivé triedy:
C_setosa = cov(setosa)
C_setosa
C_versicolor = cov(versicolor)
C_versicolor
mean_setosa = colMeans(setosa)
mean_setosa
mean_versicolor = colMeans(versicolor)
mean_versicolor
Pre nový príklad s hodnotami x = (5.7, 2.8, 4.1, 1.3)
vypočítame pravdepodobnosť 𝑃(𝑋 = 𝒙|𝑌 = 𝑐)
dosadením kovariančnej matice a vektora stredov pre jednotlivé triedy. Pre
viachodnotové normálne rozdelenie môžeme pravdepodobnosť 𝑃(𝑋 = 𝒙|𝑌 = 𝑐)
vypočítať
pomocou funkcie dvnorm
z balíka emdbook
:
install.packages("emdbook")
library(emdbook)
x = c(5.7, 2.8, 4.1, 1.3) # tento priklad chceme klasifikovat
p_x_setosa = dmvnorm(x, mean_setosa, C_setosa)
p_x_versicolor = dmvnorm(x, mean_versicolor, C_versicolor)
p_x_setosa
p_x_versicolor
p_setosa * p_x_setosa
p_versicolor * p_x_versicolor
Keďže hodnota pre celkový výraz 𝑃(𝑌 = 𝑐)𝑃(𝑋 = 𝒙|𝑌 = 𝑐)
je oveľa väčšia pre triedu
versicolor
, príklad s hodnotami x = (5.7, 2.8, 4.1, 1.3)
by sme zaradili do triedy versicolor
.
Kovariačná matica musí byť symetrická a pozitívne definitná. To, či je matica pozitívne definitná môžeme zistiť pomocou funkcie is.positive.definite()
z knižnice matrixcalc
. Viac k pozitívne definitným maticiam nájdete tu.
install.packages("matrixcalc")
library(matrixcalc)
A <- matrix( c( 2, -1, 0, -1, 2, -1, 0, -1, 2 ), nrow=3, byrow=TRUE )
is.positive.definite(A)
Úlohy¶
- Načítajte si dáta iris a vypočítajte parametre Bayesovho klasifikátora pre všetky tri
triedy setosa
, versicolor
a virginica
.
- Klasifikujte všetky príklady, tzn. vypočítajte pre každý príklad z množiny
iris
pravdepodobnosti pre všetky tri triedy a určite do ktorej triedy by príklad patril. Vypočítajte celkovú presnosť klasifikácie (počet správne klasifikovaných príkladov / počet všetkých príkladov)
- Nainštalujte si balík
MASS
a pomocou funkciemvrnorm(n, means, C)
si vygenerujte `N
= 500príkladov s viachodnotovým normálnym rozdelením so stredmi
means = c(2,3)a kovariančnou maticou
C = matrix(c(9,6,6,16),2,2)`. Zobrazte vygenerované dáta na
grafe. Postupne meňte hodnoty matice C, vygenerujte si nové dáta a pozorujte ako sa
zmenia na grafe:
* a. Nastavte hodnoty mimo diagonály na 0.
* b. Nastavte hodnoty na diagonále na 10,10 a 2,2.
* c. Nastavte hodnoty mimo diagonály na -3
- Pomocou funkcie mvrnorm si vygenerujte dve dátové množiny o veľkosti
100
a200
príkladov pre triedy so stredmi (10,20)
a (20,30)
a kovariančnými maticami [(6,2), (2,8)] a [(6,-3), (-3,6)]
. Vypočítajte parametre Bayesovho klasifikátora a klasifikujte
príklad s hodnotami (15, 25)
.