Warning
This page is located in archive.

Cvičení 1

Úvod do DVZ

  • úloha DVZ v kostce
  • data mining vs. statistika

Data mining (machine learning) v praxi:

  1. Sběr dat
  2. Průzkumová analýza a příprava dat
  3. Trénování modelu
  4. Vyhodnocení modelu
  5. 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 CRAN web, R studio 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 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.

R cheat sheet

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í:

  • <latex>F_{X}(x)</latex> - distribuční funkce rozdělení náhodné veličiny X
  • <latex>q_{X}(\alpha)</latex> - <latex>\alpha</latex>-kvantil rozdělení náhodné veličiny X
  • <latex>F_{N(\mu, \sigma^2)}(x)</latex> - distribuční funkce normálního rozdělení se střední hodnotou <latex>\mu</latex> a rozptylem <latex>\sigma^2</latex>
  • <latex>q_{N(\mu, \sigma^2)}(\alpha)</latex> - <latex>\alpha</latex>-kvantil normálního rozdělení se střední hodnotou <latex>\mu</latex> a rozptylem <latex>\sigma^2</latex>
  • <latex>\Phi(x)=F_{N(\mu = 0, \sigma^2 = 1)}(x)</latex> - distribuční funkce normovaného normálního rozdělení se střední hodnotou <latex>\mu = 0</latex> a rozptylem <latex>\sigma^2 = 1</latex>
  • <latex>\Phi^{-1}(\alpha) = q_{N(\mu = 0, \sigma^2 = 1)}(\alpha)</latex> - <latex>\alpha</latex>-kvantil normovaného normálního rozdělení se střední hodnotou <latex>\mu = 0</latex> a rozptylem <latex>\sigma^2 = 1</latex>
  • Platí: <latex>q_{N(\mu, \sigma^2)}(\alpha)=\mu + q_{N(0, \sigma^2)} = \mu + \sigma \Phi^{-1}(\alpha)</latex>
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 <latex>\alpha = 0.1</latex>)

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 <latex>H_0</latex> - mezi oběma veličinami NENÍ rozdíl
  • alternativní hypotéza <latex>H_1</latex> - 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

  1. Zvolíme požadovanou hladinu významnosti <latex>\alpha</latex>.
  2. Spočítáme realizaci testové statistiky <latex>t</latex>.
  3. Určíme kritickou hodnotu <latex>\kappa</latex> tak, aby <latex>P[T \textgreater \kappa]\leq \frac{\alpha}{2}</latex>, tj. <latex>\kappa = q_T(1-\frac{\alpha}{2})</latex>.
  4. Pokud <latex>t \textgreater \kappa</latex> nebo <latex>t \textless -\kappa</latex>, <latex>H_0</latex> zamítáme, tj. můžeme rozdíl prohlásit za významný.

Alternativní postup

  1. Určíme pravděpodobnost, že při platnosti <latex>H_{0}</latex> nabývá testová statistika <latex>T</latex> své stávající hodnoty anebo hodnot ještě extrémnějších, tj. takzvanou dosaženou hladinu významnosti, neboli p-hodnotu.
  2. 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 <latex>H_0</latex> zamítáme, pokud <latex>P \textless \alpha</latex>.

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: <latex>DX=DY=\sigma^2</latex>

  1. Máme 2 odhady <latex>s_X^2</latex>, <latex>s_Y^2</latex> téhož parametru <latex>\sigma^2</latex>. Spočítáme sdružený odhad:
    <latex>S^2=\frac{(m-1)S_X^2+(n-1)S_Y^2}{m+n-2}</latex>.
  2. Místo normálního rozdělení použijeme Studentovo rozdělení s m+n-2 stupni volnosti.
  3. Za předpokladu <latex>EX=EY</latex>:
    <latex>T = (\overline{X}_m-\overline{Y}_n)\frac{1}{S\sqrt{\frac{1}{m}+\frac{1}{n}}}</latex>

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ě.
courses/a6m33dvz/cviceni/01-zakladyr.txt · Last modified: 2018/10/04 16:02 by nemymila