Introduktion
Denna sida är en genomgång av funktioner och tillämpningar av maskinilärningsalgoritmer som presenteras i kursen 732G12 - Data Mining.
Förberedelser
Paket som används i kursen
För databearbetning rekommenderas att använda dplyr
och tidyr
för stora förändringar samt stringr
och lubridate
för text- respektive datumvariabler.
## Databearbetning
require(dplyr)
require(tidyr)
require(stringr)
require(lubridate)
För visualisering rekommenderas att använda ggplot2
(tillsammans med RColorBrewer
för tillägg av färgpaletter) samt plotly
som tillåter funktionalitet med interaktiva diagram.
## Visualisering
require(ggplot2)
require(RColorBrewer)
require(lattice)
require(plotly)
Paketen som används för de algoritmer som 732G12 behandlar är:
rpart
för beslut- och regressionsträd;caret
,e1071
ochkknn
för k-närmaste-grannar;keras
för neurala nätverk;cluster
för hierarkisk klustring;dbscan
för en densitetsbaserad klustringsmetod;kohonen
för SOM/Kohonen kartor;- samt
arules
ocharulesSequences
för associations- och sekvensanalys.
## Beslutsträd
require(rpart)
## KNN
require(caret)
require(e1071)
require(kknn)
## Neurala nätverk
require(keras)
## Klustring
require(cluster)
require(dbscan)
require(kohonen)
## Associationsanalys
require(arules)
## Sekvensanalys
require(arulesSequences)
Installation av keras
För att vid första gången installera keras
behöver en installation av Python 3.x finnas på samma dator. Det rekommenderas att installera Anaconda via följande
länk. För Windows-användare, glöm inte vid de sista valen att bocka för att lägga till installationsmappen till PATH
!
Om ni manuellt måste ändra/lägga till en Python-installation till datorns PATH
eller om ni fortfarande får ett felmeddelande likt Error 1 occurred creating conda environment r-tensorflow
, löses det genom
följande instruktioner.
# Körs endast en gång vid installation av paketet
install_keras()
# För att kunna använda keras behövs tensorflow i bakgrunden
# Denna kod behöver köras endast en gång
reticulate::conda_create("r-tensorflow")
tensorflow::install_tensorflow()
Sammanfattande funktion för modellutvärdering
Följande funktion skapar en förväxlingsmatris samt beräknar fyra utvärderingsmått utifrån denna matris. Funktionen kan användas som den är (se till att kopiera och köra koden i er egna session) eller användas som en mall om ni vill skapa en egen funktion. Vissa paket som nämnts ovan har också egna funktioner för utvärderingsmåtten som också kan användas.
## Funktion som skapar förväxlingsmatris med tillhörande mått för klassificeringsproblem
# new_data : Materialet innehållande förklarande variabler
# model : Den skattade modellen
# true_y : Vektor innehållande de sanna klass-värden i samma ordning som new_data
class_evaluation <- function(new_data, model, true_y, type = "class", digits = 3){
# Predikterar klassen för new_data givet den skattade modellen
if(any(str_detect(class(model), pattern = "keras"))){
pred <- predict_classes(model, new_data)
} else {
pred <- predict(model, newdata = new_data, type = type)
}
# Konverterar de predikterade klasserna till en faktor med samma nivåer som de sanna klasserna
pred <- factor(pred, levels = levels(factor(true_y)))
# Skapar förväxlingsmatris med rader som indikerar sanna klassen och kolumnen som indikerar predikterade klassen
confusion <- table(true_y, pred)
# Träffsäkerhet är antalet korrekta prediktioner dividerat med antalet observationer
accuracy <- sum(diag(confusion)) / sum(confusion)
# Felkvoten är 1 - träffsäkerheten
misclass <- 1 - accuracy
# Sensitivitet är antalet korrekta prediktioner AV DEN NUVARANDE KLASSEN dividerat med antalet observationer AV DEN NUVARANDE KLASSEN
sensitivity <- diag(confusion) / rowSums(confusion)
# Specificitet är antalet korrekta prediktioner AV ICKE DEN NUVARANDE KLASSEN dividerat med antalet observationer AV ICKE DEN NUVARANDE KLASSEN
specificity <- NULL
for(i in 1:nrow(confusion)){
specificity[i] <- sum(confusion[-i, -i])/sum(confusion[-i, ])
}
# Sammanställer alla resultat i en egen lista som sedan returneras
evaluation <- list(confusion_matrix = confusion,
overall =
cbind(acc = accuracy,
mis = misclass),
class_wise =
rbind(sensitivity = round(sensitivity, digits = digits),
specificity = round(specificity, digits = digits))
)
return(evaluation)
}
Inläsning av data
Data importeras i form av csv-filer med funktionen read.csv()
eller read.csv2()
beroende på strukturen på filen. Det rekommenderas att arbeta med csv-filer eftersom filen sparas som ren text och kan användas i flera olika program utan vidare krav.
Notera att för responsvariabeln för klassificering behöver konverteras till en factor
för att modellerna ska skattas korrekt. Om detta inte görs kommer modellerna (ofta) beräkna en regressionsmodell istället. Alla datamaterial som används i detta underlag kan hämtas från antingen datamängder som finns inbyggda i R eller via följande länk.
## Laddar träningsdata
data_class <- data(iris)
## Data för associationsanalys
data_assoc <- read.csv2(file = "data_sets/D2 Data/marbas.csv")
## Data för sekvensanalys
data_seq <- read.csv2(file = "data_sets/D2 Data/clickstream.csv", stringsAsFactors = FALSE)
## Data för klustring
data_clust_circ <- read.csv2(file = "data_sets/D3 Data/circular.csv")
data_clust_arbi <- read.csv2(file = "data_sets/D3 Data/arbitrary.csv")
data_clust_flow <- read.csv2(file = "data_sets/D3 Data/flower.csv")