Warning
This page is located in archive.

TEST 2

  • (0.2 b) Shlukování (clustering). Stručně popiště dva základní přístupy ke tvorbě shluků.
  • (0.2 b) Uvažujte dva body $x=(1;2)$ a $y=(4;6)$. Spočítejte jejich Eukleidovskou i Manhattanskou vzdálenost.
  • (0.1 b) K čemu slouží dendrogram?
  • (0.5 b) Uvažujte data airquality, která jsou vestavěná v R. Z nich extrahujte příznak temp, a to pouze v měsíci květnu (data$Month == 5). Pro tento výběr určete (a) minimální, (b) maximální hodnotu, (c ) medián, (d) mezikvartilovou odchylku a (e) ručně nakreslete boxplot a vyznačte do něj hodnotu mediánu, 1. a 3. kvartilu a konců obou 'fousů'.

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é.

Příklad 1 (Předpovídání léčebných výdajů)

Pro tuto analýzu použijeme simulovaný dataset obsahující hypotetické léčebné výdaje pacientů z USA.

  1. Načtete soubor insurance.txt, změňte přípomu na .csv pomocí příkazu

insurance <- read.csv("insurance.csv", stringsAsFactors = TRUE)

  1. Kolik pacientů dataset obsahuje? Jaké atributy máme k dispozici? Použijte funkce str() a summary().
  2. Vypiště tabulku s počty pacientů přes jednotlivé geografické regiony. O jaký typ atributu se jedná?
  3. Pomocí funkce pairs() zobrazte matici scatterplotů pro atributy age, bmi, children a expenses. Lze vypozorovat nějaké vzory?
  4. Nyní si nainstalujte balíček psych a použijte funkci pairs.panels() pro stejné atributy jako v předchozím případě. Čísla zobrazená v horním trojúhelníku jsou korelace mezi příslušnými atributy. Zobrazené ovály se nazávají korelační elipy. Jejich střed se nachází v těžišti dat (střední hodnota v x i y). Korelace mezi dvěma neznámými je symbolizována tvarem elipsy - čím protáhlejší, tím silnější korelace. Jaký tvar má korelační elipsa pro bmi a chilren a proč?
  5. Natrénujte jednoduchý lineární regresní model, kde využijete všechny atributy.
  6. Jak souvisí věk nebo počet dětí se zdravotnými výlohami?
  7. Jak si model poradil s kategorickými proměnnými? Kolik platí muži více/méně oproti ženám? Kolik stojí kuřáci oproti nekuřákům?
  8. Vypište hodnocení modelu pomocí funkce summary().
  9. → Co značí rezidua? Jaká je maximální chyba na uvažovaných datech? Jaké je interpretace?
  10. → Co značí vypsané p-hodnoty? Které atributy jsou v našem modelu významné? Dává to smysl/shoduje se to s naším očekáváním?
  11. → Najděte koeficient determinace $R^2$ a upravený koeficient determinace $R^2_{adj}$. Jak byste zhodnotili výkon modelu?

Nyní zkusíme předchozí model upravit. Podíváme se na 3 různé závislosti, které nelze postihnout lineárním popisem. Vraťte se k bodu 3 nebo 4 a podívejte se, zdali není možné vysledovat nějaké zajímavé zákonitosti.

  1. Je závislost mezi léč. výlohami a věkem skutečně lineární?
  2. A co bmi? Zdá se, že jeho vliv není kumulativní. Spíše se začíná projevovat po překročení určité meze. Najděte vhodný zlomový bod a pomocí funkce ifelse modelujte jednoduchou binární funkci.
  3. Dosud jsme uvažovali pouze individuální příspěvek každého atributu na určenou závislou proměnnou. Lze však také modelovat kombinavaný vliv. Například kouření a obezita mohou mít škodlivý efekt samostatně, ale je možné se domnívat, že jejich kombinovaný efekt je horší než součet těch individuálních. Tento kombinovaný efekt nazýváme interakce. V prostředí R zapisujeme pomocí speciální syntaxe:

expenses ~ bmi30*smoker
To je ekvivalentní se zápisem:
expenses ~ bmi30 + smokeryes + bmi30:smokeryes
Operátor : označuje interakci mezi dvěma proměnnými.

  1. Nyní do stávajícího modelu přidejte (i) nelinearitu věku, (ii) indikátor obezity a (iii) interakci mezi obezitou a kouřením.
  2. Jak si tento model stojí oproti předcházejícímu? Má interakce mezi obezitou a kouřením nějaký podstatný efekt? Kolik představují extra náklady za kuřáka? A kolik za obézního kuřáka?

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: 2018/10/18 12:46 by nemymila