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

  • 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

  1. Zvolíme požadovanou hladinu významnosti \alpha.
  2. Spočítáme realizaci testové statistiky t.
  3. Určíme kritickou hodnotu \kappa tak, aby P[T \textgreater \kappa]\leq \frac{\alpha}{2}, tj. \kappa = q_T(1-\frac{\alpha}{2}).
  4. 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

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

  1. 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}.
  2. Místo normálního rozdělení použijeme Studentovo rozdělení s m+n-2 stupni volnosti.
  3. 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ě.
courses/a6m33dvz/cviceni/01-zakladyr.txt · Last modified: 2018/10/04 16:02 by nemymila