Table of Contents

Cvičení 1

Úvod do DVZ

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

Instalace R, R studio
Úvod do R

Příklady byly převzaty z knížek Data mining with R a R Cookbook a dále upraveny.

    a <- 39
    b <- 12 + 16i
    c <- 'hello'
    d <- T
    e <- NA 
    str(a)  
    rm(a)
    ls()
    rm(list=ls())
    ls()
    

    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]
    

    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"
    

    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
    

    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 <- 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)
    

    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)
    

    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

Ú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

r-cheat-sheet-3.pdf

Další je možné nalézt na: 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í:

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.

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