Warning
This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.

Cvičení 3 - Lineární regrese, naivní Bayesův klasifikátor

Lineární regrese

Terminologie:

  • pozorování
  • příznak (proměnná, atribut)
  • regresor (nezávislé proměnná), odezva (závislá proměnná)

Závislost odezvy na jednom regresoru

Budeme pracovat s daty iris:

data(iris)

Prohlídka dat: kolik a jakých příznaků obsahují? Kolik porozování máme k dispozici? Obsahují data nějaké chybějící hodnoty?

dim(iris)
summary(iris)

Studujte závislost délky korunního lístku (Petal.Length) na délce kališního lístku (Sepal Length) u kosatců “virginica”.

Jaký vztah očekáváte?

Závislost vizualizujte.

# vykresleni:
with(iris[iris$Species=='virginica', ], plot(Petal.Length ~ Sepal.Length))

# lepsi vykresleni, aby nesplyvaly pozorovani, u nichz byly namereny shodne hodnoty:
with(iris[iris$Species=='virginica', ], plot(Petal.Length ~ jitter(Sepal.Length)))

# uprava mezi (aby byl videt pocatek souradne soustavy):
with(iris[iris$Species=='virginica', ], plot(Petal.Length ~ jitter(Sepal.Length),
    xlim = c(0, max(Sepal.Length)), ylim = c(0, max(Petal.Length))))

Jak byste intuitivně kvantifikovali studovanou závislost?

Teoretická vsuvka: Formální znázornění závislosti (vzorec). Grafické znázornění závislosti. Míry kvality proložení křivky (přímky). Metoda nejmenších čtverců. Vliv odlehlých pozorování.

Modelujte závislost délky korunního lístku na délce kališního lístku pomocí lineární regrese.

# regresni model:
  m <- lm(Petal.Length ~ Sepal.Length, iris[iris$Species=='virginica', ])
  # alternativne:
  m <- lm(Petal.Length ~ Sepal.Length, iris, subset = Species=='virginica')

# prohlidka modelu:
m
coef(m)
summary(m)

# vizualizace modelu:
abline(coef(m), col='red')

Jaký je výsledek? Závislost formálně zapište. Je závislost statisticky významná? Interpretujte výsledek.

Výsledek: Petal.Lengthi = 0.61 + 0.75 * Sepal.Lengthi + epsi, přičemž intercept (“průsečík s osou Y”) je nevýznamně odlišný od 0, ale koeficient 0.75 u Sepal.Lengthi je významně nenulový, čímž jsme i) prokázali lineární závislost mezi délkou okvětního a kališního lístku, a ii) tuto závislost kvantifikovali.

Interpretace: S nárůstem délky kališního lístky (Sepal.Length) o 1cm narůstá průměrně délka okvětního lístku (Petal.Length) o 7.5mm. Přitom jsme samozřejmě předpokládali (a přesvědčili se obrázkem), že závislost je skutečně lineární.

Modelujte nyní závislost šířky kališního lístku na jeho délce. Jaký výsledek dostáváte?

Vliv odlehlých pozorování

Nyní modelujte výše sledovanou závislost v případě, že v souboru bude (uměle vytvořené) odlehlé pozorování:

# pouzijeme kosatce virginica
d <- iris[iris$Species=='virginica',]
# a umele zmenime delku korunniho listku u rostliny s nejdelsim kalistnim listkem:
d$Petal.Length [d$Sepal.Length==max(d$Sepal.Length)] <- -5

# data vykreslime:
plot(Petal.Length ~ jitter(Sepal.Length), d)

# modelujeme:
m <- lm(Petal.Length ~ Sepal.Length, d)
summary(m)

# a vykreslime nalezeny model
abline(coef(m),col='red')

Zopakujte výše uvedené kroky. K jakému závěru jste dospěli? Co z toho plyne?

Závislost odezvy na více regresorech

Načtěte CSV soubor tuk.txt.

Prohlídka dat: kolik a jakých atributů obsahují? V jakých jednotkách jsou naměřeny? Kolik porozování máme k dispozici? Obsahují data nějaké chybějící hodnoty? Pokud ano, jak se s nimi vypořádáte? Jsou v datech odlehlé hodnoty? Pokud ano, co s nimi uděláte?

Studujte nejprve závislost procenta tuku na hmotnosti. Jaký vztah očekáváte? Závislost vizualizujte a modelujte pomocí lineární regrese. Jaký dostáváte výsledek? Závislost formálně zapište. Je závislost významná?

Studujte závislost procenta tuku na tělesné výšce. Jaký vztah očekáváte? Závislost opět vizualizujte a modelujte pomocí lineární regrese. Jaký dostáváte výsledek? Závislost formálně zapište. Je závislost významná?

Nyní modelujte závislost procenta tuku zároveň na výšce a hmotnosti. Jaký dostáváte výsledek? Závislost formálně zapište. Jsou závislosti významné? Srovnejte tento výsledek s předchozími dvěma. Co z toho plyne?

Výsledek: fati = 16.5 + 0.49 * weighti - 0.24 * heighti + epsi, přičemž intercept (“průsečík s osou Y”) je nevýznamně odlišný od 0, ale oba zbývající koeficienty (u hmotnosti a výšky) jsou významně nenulové.

Interpretace: S nárůstem hmotnosti o 1kg (při pevné výšce) vzrůstá procento tělesného tuku průměrně o 0.49%. Podobně s nárůstem výšky o 1cm (při pevné hmotnosti) klesá procento tělesného tuku průměrně o 0.24%. Upozorňeme, že při interpretaci některého regresoru je podmínka pevných hodnot ostatních regresorů nutná, bez ní by tvrzení nebylo pravdivé.

Naivní Bayesův klasifikátor

Opakování termínů ze statistiky:

  • nezávislost náhodných veličin
  • Bayesova věta

Formulace Bayesova naivního klasifikátoru.

Proč se klasifikátoru říká naivní?

Příklad: Hráči chodí hrát tenis, ale hrají pouze za příznivého počasí. Příklady jejich rozhodnutí jsou v následující tabulce. Atributy jsou outlook, temperature, humidity, windy a rozhodnutí je ve sloupečku play. Nalezněte podle čeho se hráči rozhodují, zda půjdou hrát.

outlook temperature humidity windy play
sunny hot high false no
sunny hot high true no
overcast hot high false yes
rainy mild high false yes
rainy cool normal false yes
rainy cool normal true no
overcast cool normal true yes
sunny mild high false no
sunny cool normal false yes
rainy mild normal false yes
sunny mild normal true yes
overcast mild high true yes
overcast hot normal false yes
rainy mild high true no

Data jsou zde: weather.csv. Aplikací naivního Bayesova klasifikátoru sami vypočtěte, zda je (ne)pravděpodobné, že hráči půjdou hrát, když bude slunečno (sunny), horko (hot), normální vlhkost (normal) a bezvětří (windy=FALSE).

Váš explicitní výpočet můžete ověřit v R:

# nacteni a prohlidka dat
d<-read.csv('weather.csv')
summary(d)

# naivni Bayes
library(e1071)
# je treba zkonvertovat "logical" priznak na "numeric" 
d$windy <- as.numeric(d$windy)
m <- naiveBayes(play~., d)

# vyzkousejme klasifikator
predict(m,d)
table(predict(m,d),d$play)

# a klasifikujme nove pozorovani:
d.new<-data.frame(outlook='sunny',temperature='hot',humidity='normal',windy=0)
predict(m,d.new)

courses/a6m33dvz/cviceni/03-regrese.txt · Last modified: 2017/10/19 10:11 by anyzjiri