Dáta

data("mtcars")

Z helpu:

The data was extracted from the 1974 Motor Trend US magazine, and comprises fuel consumption and 10 aspects of automobile design and performance for 32 automobiles (1973–74 models).

A data frame with 32 observations on 11 (numeric) variables.

[, 1] mpg Miles/(US) gallon

[, 2] cyl Number of cylinders

[, 3] disp Displacement (cu.in.)

[, 4] hp Gross horsepower

[, 5] drat Rear axle ratio

[, 6] wt Weight (1000 lbs)

[, 7] qsec 1/4 mile time

[, 8] vs Engine (0 = V-shaped, 1 = straight)

[, 9] am Transmission (0 = automatic, 1 = manual)

[,10] gear Number of forward gears

[,11] carb Number of carburetors

str(mtcars)
## 'data.frame':    32 obs. of  11 variables:
##  $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
##  $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
##  $ disp: num  160 160 108 258 360 ...
##  $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
##  $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
##  $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
##  $ qsec: num  16.5 17 18.6 19.4 17 ...
##  $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
##  $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
##  $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
##  $ carb: num  4 4 1 1 2 1 4 2 2 4 ...

Momentálne majú všetky čísla typ numeric. My však potrebujeme, aby bolo napríklad jasné, že am môže nadobúdať len hodnoty 0 a 1 (nie ľubovoľné reálne - model by zbehol, chybu by nezahlásil, ale odhadovalo by sa niečo iné) v závislosti od toho, či je prevodovka automatická alebo manuálna. Upravíme premenné, ktoré budú vystupovať v našich modeloch: cyl, vs a am:

mtcars$cyl <- factor(mtcars$cyl)
mtcars$vs <- factor(mtcars$vs)
mtcars$am <- factor(mtcars$am)

Vytvoríme novú premennú, ktorú sa budeme snažiť predikovať pomocou ostatných - či má auto napriemernú hodnotu mpg, teda nadpriemerne dobrú spotrebu.

mtcars$mpg_nadpriemer <- (mtcars$mpg > mean(mtcars$mpg))

Rozdelíme dáta na trénovaciu a testovaciu časť rovnako ako na prednáške a až do zostavenia finálneho modelu sa budeme pozerať len na trénovacie dáta:

library(caret)
set.seed(123)
mtcars_index <- createDataPartition(mtcars$mpg_nadpriemer, 
                                    p = 0.8,   # podiel dat v trenovacej casti
                                    list = FALSE)
mtcars_train <- mtcars[mtcars_index, ]
mtcars_test <- mtcars[-mtcars_index, ]  
nrow(mtcars_train) # pocet dat v trenovacej casti
## [1] 27
nrow(mtcars_test) # pocet dat v testovacej casti
## [1] 5
table(mtcars_train$mpg_nadpriemer)
## 
## FALSE  TRUE 
##    15    12
# balik na pracu s naivnym Bayesovym modelom
library(e1071)

Model 1

Použijeme nasledovné dve premenné - typ prevodovky a motora:

table(mtcars_train[, c("mpg_nadpriemer", "am")])
##               am
## mpg_nadpriemer  0  1
##          FALSE 13  2
##          TRUE   2 10
table(mtcars_train[, c("mpg_nadpriemer", "vs")])
##               vs
## mpg_nadpriemer  0  1
##          FALSE 12  3
##          TRUE   3  9

Úlohy.

bayes_1 <-  # DOPLNTE
mtcars_test[1, c("am", "vs")]
##                am vs
## Hornet 4 Drive  0  1

Na kontrolu použite (vyžaduje odhadnutý model bayes_1):

predict(bayes_1, newdata = mtcars_test[1, ], type = "raw")

Výsledok na kontrolu:

##            
## predikcie_1 FALSE TRUE
##       FALSE     2    2
##       TRUE      1    0

Model 2

Spravte model, v ktorom použijete typ prevodovky (premenná am) a počet valcov motora (premenná cyl). Odhadnite ho na trénovacích dátach a spravte predikciu pre testovacie dáta.