{{indexmenu_n>1}} ====== Cvičení 1 ====== === Úvod do DVZ === * úloha DVZ v kostce * data mining vs. statistika **Data mining** (machine learning) v praxi: - Sběr dat - Průzkumová analýza a příprava dat - Trénování modelu - Vyhodnocení modelu - Zlepšení modelu **Typy vstupních dat** * **(jednotka) pozorování** - nejmenší jednotka se (všemi) měřenými vlastnostmi, př. lidé, objekty, transakce, geografické regiony, el. měření, ... * **dataset** - obsahuje (několik, hodně) pozorování a jejich vlastnosti - atributy. Je to kolekce dat skládající se z **pozorování** (instance, example) a **atributů** (features). Atributy jsou zpravidla **numerické** (číselné), //kategorické// (nominální) či jejich speciální typ **ordinální**. == Instalace R, R studio == * instalace R [[http://cran.rstudio.com/|CRAN web]], R studio [[https://www.rstudio.com/products/rstudio/download/|Rstudio download]] * přehled (konzole, workspace) * nastavení pracovního adresáře (menu Session - Set Working Directory) == Úvod do R == Příklady byly převzaty z knížek Data mining with R a R Cookbook a dále upraveny. * **Přiřazení a základní datové typy** a <- 39 b <- 12 + 16i c <- 'hello' d <- T e <- NA str(a) rm(a) ls() rm(list=ls()) ls() * **Vektory** a <- c(4,7,23.5,76.2,80) length(a) mode(a) str(a) a[2] a[2:3] a[-2] b <- c(4,6,8,24) c <- c(10,2,4) b + c x <- c(0,-3,4,-1,45,90,-5) y <- x > 0 y <- x[x > 0] * **Factors** - reprezentace kategorických (nominálních) proměnných - např. pohlaví pacientů g <- c('f','m','m','m','f','m','f','m','f','f') g <- factor(g) str(g) table(g) g <- factor(c('m','m','m','m'), levels = c('f','m')) str(g) gender <- factor(c("MALE", "FEMALE", "MALE")) blood <- factor(c("O", "AB", "A"), levels = c("A", "B", "AB", "O")) #ordinálni typ symptoms <- factor(c("severe", "mild", "moderate"), levels = c("mild", "moderate", "severe"), ordered = TRUE) symptoms > "moderate" * **Lists** - generalizace vektorů - kolekce objektů (různého typu) a <- c('jkl',12,T,F,NA) str(a) a <- list('jkl',12,T,F,NA) str(a) subject <- list(name = "Pepa", temperature = 38.2, flu_status = TRUE ) subject$name * **Matice** m <- matrix(c(45,23,66,77,33,44,56,12,78,23),nrow=2,ncol=5) m <- matrix(c(45,23,66,77,33,44,56,12,78,23),nrow=2,ncol=5,byrow=T) m[2,3] m[1,] m[,4] m[1,c(3,5)] m[1,-c(3,5)] m <- matrix(rep(10,20),nrow=4,ncol=5) results <- matrix(c(10,30,40,50,43,56,21,30),nrow=2,ncol=4,byrow=T) colnames(results) <- c('1qrt','2qrt','3qrt','4qrt') rownames(results) <- c('store1','store2') results['store1',] results['store2',c('1qrt','4qrt')] * **Data Frames** data <- data.frame(site=c('A','B','A','A','B'), season=c('Wi','Su','Su','Sp','Fa'), pH=c(7.4,6.3,8.6,7.2,8.9)) data$site data$pH data[1,] data[,1] data[data$pH>7,] data[data$site=='A',] data$NO3 <- c(234.5,256.5, 654, 356.7,776.4) t <- c(-12.5, 28.4, 31.2, 14, 8.9) data <- cbind(data,t) s <- c('B','Wi',7.5,1) data <- rbind(data,s) nrow(data) ncol(data) dim(data) names(data) names(data)<-c('area','season','pH','NO3') table(data$site) str(data) summary(data) * **Generování dat** x <- 1:1000 seq(from=-2,to=1,by=0.5) seq(from=1, to=5, length.out=4) seq(from=2,to=-2,by=-0.2) rep(5,times=10) rep(1:2,times=3) gl(2,5,labels=c('female','male') rnorm(10) # runif, rbinom, rpois,... rnorm(4, mean=10, sd=3) * ** Řídící struktury ** if ( podmínka ) { příkazy } else { příkazy } for ( přes co iterovat ) { příkazy } while ( podmínka ) { příkazy } repeat { příkazy } break next f <- function ( parametry ) { příkazy return( výsledek ) } Podrobnější informace lze nalézt na stránkách http://www.r-project.org/ v sekci Manuals. ==Instalace balíků, nastavení workspace v RStudiu== * instalace potřebných balíků: **install.packages("package_names")** * nahrání potřebných balíků: **library(package_names)** * nastavení workspace v RStudiu: Menu Session -> Set Working Directory -> Choose Directory, nebo pomocí příkazů **setwd()**, **getwd()** **Úkol:** Nainstalujte balík ggplot2 a nastavte si pracovní adresář v RStudiu ==Psaní funkcí v RStudiu== Podrobný návod lze najít na [[http://www.rstudio.com/ide/docs/using/source|Editing and Executing Code]] **Úkol:** Napište funkci pro nalezení modus veličiny x (modus náhodné veličiny X je hodnota, která se v daném statistickém souboru vyskytuje nejčastěji). Později tuto funkci použijeme pro průzkumovou analýzu dat. /* Mode <- function (x) { ux <- unique(x) ux[which.max(tabulate(match(x, ux)))] } */ == R cheat sheet == [[https://www.rstudio.com/wp-content/uploads/2016/10/r-cheat-sheet-3.pdf|r-cheat-sheet-3.pdf]] Další je možné nalézt na: [[https://www.rstudio.com/resources/cheatsheets/|www.rstudio.com/resources/cheatsheets]] ====== Statistické okénko ====== ===== Rozdělení pravděpodobnosti ===== **K zopakování:** hustota pravděpodobnosti, distribuční funkce, kvantilová funkce **Normální rozdělení** # hustota dnorm(x = 0, mean = 0, sd = 1) # distribuční funkce pnorm(q = 0, mean = 0, sd = 1) # kvantilová funkce qnorm(p = 0.5, mean = 0, sd = 1) **Studentovo rozdělení** # hustota dt(x = 0, df = 5) # distribuční funkce pt(q = 0, df = 5) # kvantilová funkce qt(p = 0.5, df = 5) K zopakování: * F_{X}(x) - distribuční funkce rozdělení náhodné veličiny X * q_{X}(\alpha) - \alpha-kvantil rozdělení náhodné veličiny X * F_{N(\mu, \sigma^2)}(x) - distribuční funkce normálního rozdělení se střední hodnotou \mu a rozptylem \sigma^2 * q_{N(\mu, \sigma^2)}(\alpha) - \alpha-kvantil normálního rozdělení se střední hodnotou \mu a rozptylem \sigma^2 * \Phi(x)=F_{N(\mu = 0, \sigma^2 = 1)}(x) - distribuční funkce normovaného normálního rozdělení se střední hodnotou \mu = 0 a rozptylem \sigma^2 = 1 * \Phi^{-1}(\alpha) = q_{N(\mu = 0, \sigma^2 = 1)}(\alpha) - \alpha-kvantil normovaného normálního rozdělení se střední hodnotou \mu = 0 a rozptylem \sigma^2 = 1 * Platí: q_{N(\mu, \sigma^2)}(\alpha)=\mu + q_{N(0, \sigma^2)} = \mu + \sigma \Phi^{-1}(\alpha) **Příklad 1 (Konfidenční intervaly)** Úspěšnost klasifikace p leží uvnitř nějakého specifického intervalu s určitou mírou důvěry. S=850 správně klasifikovaných příkladů pro N=1000 instancí. Odhadněte relativní úspěšnost klasifikace (výběrovou relativní četnost aproximujte normálním rozdělením): * bodový odhad * intervalový odhad (uvažujte \alpha = 0.1) ===== Studentův t-test ===== Test významnosti podává informaci o tom, jak moc můžeme důvěřovat tomu, že mezi oběma veličinami je skutečně rozdíl. * nulová hypotéza H_0 - mezi oběma veličinami NENÍ rozdíl * alternativní hypotéza H_1 - rozdíl mezi oběma veličinami JE Test významnosti kvantifikuje to, jak moc naše experimenty potvrzují to, že máme zamítnout nulovou hypotézu. **Klasický test hypotézy** - Zvolíme požadovanou hladinu významnosti \alpha. - Spočítáme realizaci testové statistiky t. - Určíme kritickou hodnotu \kappa tak, aby P[T \textgreater \kappa]\leq \frac{\alpha}{2}, tj. \kappa = q_T(1-\frac{\alpha}{2}). - Pokud t \textgreater \kappa nebo t \textless -\kappa, H_0 zamítáme, tj. můžeme rozdíl prohlásit za významný. **Alternativní postup** - Určíme pravděpodobnost, že při platnosti H_{0} nabývá testová statistika T své stávající hodnoty anebo hodnot ještě extrémnějších, tj. takzvanou **dosaženou hladinu významnosti**, neboli **p-hodnotu**. - Dosaženou hladinu významnosti P (1) zveřejníme (a každý si udělá závěr sám), (2) porovnáme se stanovenou požadovanou hladinou významnosti a H_0 zamítáme, pokud P \textless \alpha. **Prakticky:** Čím je p-hodnota (p-value) nižší, tím je výsledek významnější. **Test stř. hodnot dvou normálních rozdělení s neznámým rozptylem** Předpoklad: DX=DY=\sigma^2 - Máme 2 odhady s_X^2, s_Y^2 téhož parametru \sigma^2. Spočítáme sdružený odhad:\\ S^2=\frac{(m-1)S_X^2+(n-1)S_Y^2}{m+n-2}. - Místo normálního rozdělení použijeme Studentovo rozdělení s //m+n-2// stupni volnosti. - Za předpokladu EX=EY:\\ T = (\overline{X}_m-\overline{Y}_n)\frac{1}{S\sqrt{\frac{1}{m}+\frac{1}{n}}} **Jak postupovat v prostředí R** **Příklad 2 (dvouvýběrový nepárový t-test)** U pacientů léčených lékem A byly naměřeny následující hodnoty systolického tlaku: 132, 136, 120, 139, 138, 145, 150, 135, 131, 122, 120, 129, 127, 117, 129 [mmHg]. U pacientů léčených lékem B pak následující hodnoty: 137, 135, 154, 135, 147, 119, 137, 129, 150, 140, 135, 145, 124 [mmHg]. Na hladině významnosti 5 % otestujte hypotézu, že se krevní tlak u těchto dvou skupin pacientů liší. tlakA <- c(132, 136, 120, 139, 138, 145, 150, 135, 131, 122, 120, 129, 127, 117, 129) tlakB <- c(137, 135, 154, 135, 147, 119, 137, 129, 150, 140, 135, 145, 124) **Klasický test hypotézy** # zvolíme hladinu významnosti alpha <- 0.05 # spočítáme testovou statistiku s2 <- ((m-1)*var(tlakA)+(n-1)*var(tlakB))/(m+n-2) t <- (mean(tlakA)-mean(tlakB))/(sqrt(s2)*sqrt(1/m+1/n)) t #[1] -1.665809 # určíme kritickou hodnotu kappa kappa <- qt(1-alpha/2, df=m+m-2) kappa #[1] 2.048407 abs(t) > kappa # FALSE # => H0 nezamítáme! **Alternativní postup** m <- length(tlakA) n <- length(tlakB) # zvolíme hladinu významnosti alpha <- 0.05 # spočítáme testovou statistiku s2 <- ((m-1)*var(tlakA)+(n-1)*var(tlakB))/(m+n-2) t <- (mean(tlakA)-mean(tlakB))/(sqrt(s2)*sqrt(1/m+1/n)) t #[1] -1.665809 # p-hodnota = 2 * P[X <= t] = 2 * F(t) # F(t) - distribuční funkce p_val = 2 * pt(t, df = m+n-2) p_val [1] 0.1077565 # porovnáme p-hodnotu se stanovenou hladinou významnosti alpha # lze použít i funkci t.test t.test(tlakA, tlakB, paired=FALSE, var.equal = TRUE) Two Sample t-test data: tlakA and tlakB t = -1.6658, df = 26, p-value = 0.1078 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: -13.69012 1.43371 sample estimates: mean of x mean of y 131.3333 137.4615 **Příklad 3 (jednostranný test)** Uvažujte přírůstek váhy 19 krys mezi 28. a 84. dnem po narození. 12 z nich bylo krmeno potravou bohatou na bílkoviny, 7 z nich potravou chudou na bílkoviny. Na hladině významnosti 5 % otestujte hypotézu, že krysy krmené nízkoproteinovou dietou přibíraly méně. high_protein <- c(134, 146, 104, 119, 124, 161, 107, 83, 113, 129, 97, 123) low_protein <- c(70, 118, 101, 85, 107, 132, 94) **Řešení:**\\ $H_0: \mu_L = \mu_H$ (L = low protein, H = high protein)\\ $H_1: \mu_L < \mu_H$ (jednostranný test)\\ Hladina významnosti $\alpha = 0.05$\\ Počet stupňů volnosti: $\nu = m+m-2 = 12 + 7 -2 = 17$\\ Kritická hodnota: $\kappa = q_{t(17)}(0.05) = -1.74$\\ Sdružený odhad rozptylu: $s^2 = 446.12$\\ Za předpokladu platnosti $H_0$, testová statistika: $t = (\overline{X}_L-\overline{H}_H)\frac{1}{S\sqrt{\frac{1}{m}+\frac{1}{n}}}=-1.89$\\ Protože $t<\kappa$ (tedy $t$ se nachází v kritické oblasti), $H_0$ zamítáme. Na 5% hladině významnosti můžeme prohlásit, že krysy krmené nízkoproteinovou dietou skutečně přibírají méně.