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,versicoloravirginica.
- Klasifikujte všetky príklady, tzn. vypočítajte pre každý príklad z množiny
irispravdepodobnosti 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
MASSa pomocou funkciemvrnorm(n, means, C)si vygenerujteN = 500príkladov s viachodnotovým normálnym rozdelením so stredmimeans = c(2,3)a kovariančnou maticouC = 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
100a200prí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).