Basis machine learning in R: een handleiding (2023)

Gepubliceerd op:
Ik ken **Python**, en ik heb onlangs wat geëxperimenteerd met eenvoudige **machine learning** in **R**. Hier zijn een paar basisstappen om dit te doen.

Inleiding

Inleiding tot Machinaal Leren in R

Machine learning is een vaste waarde geworden in de gereedschapskist van elke data scientist. En R, met zijn rijke ecosysteem van pakketten, is een uitstekende taal om de kracht ervan te benutten. Ik vond het fantastisch om met R te beginnen om de basisconcepten van machine learning te begrijpen, zonder overweldigd te worden door programmeercomplexiteit.

Laten we eerst even stilstaan bij wat machine learning eigenlijk is. Machine learning omvat algoritmes die computers het vermogen geven om te leren van data en voorspellingen te doen. Van het voorspellen van huizenprijzen tot het bepalen of een e-mail spam is.

Nu gaan we aan de slag met wat data. Een van de grootste voordelen van R is de overvloed aan datasets die beschikbaar zijn. De iris dataset, een klassieker in machine-learningvoorbeelden, zit ingebouwd en is klaar voor gebruik. Het bevat metingen van verschillende iris bloemensoorten.

Hier is hoe je het kunt laden en even bekijken:

data(iris)
head(iris)

De functie head laat ons de eerste paar rijen van de dataset zien. Het is altijd een goede gewoonte om jezelf vertrouwd te maken met het formaat en de structuur van de data voordat je verdergaat.

Wat doe je nu na het laden van de data? Relaties binnen de data begrijpen en visualiseren. De functie pairs in R biedt ons een simpele manier om de data in paren te visualiseren, wat inzicht kan geven in correlaties tussen kenmerken.

pairs(iris[1:4], main = "Iris Data", pch = 21, bg = c("red", "green3", "blue")[unclass(iris$Species)])

Bij machine learning is het cruciaal om het juiste model te kiezen. Er zijn veel modellen beschikbaar, maar een goed startpunt voor classificatieproblemen is het k-nearest neighbors algoritme (KNN). Het is intuïtief en eenvoudig, wat het ideaal maakt als startpunt.

De code om een KNN-model te trainen en te testen ziet er als volgt uit:

library(class)
# We splitsen data in een train- en testset
indexes  sample(1:nrow(iris), nrow(iris) * 0.7)
train_data  iris[indexes,]
test_data  iris[-indexes,]
train_label  iris[indexes, 5]
test_label  iris[-indexes, 5]

# Pas het knn-algoritme toe
knn_pred  knn(train = train_data[,1:4], test = test_data[,1:4], cl = train_label, k=5)

# We kunnen nu de voorspellingen printen
print(knn_pred)

Voordat je deze code uitvoert, moet je je datasets splitsen in trainings- en testsets—een proces dat ik vergelijk met een kok die zorgvuldig ingrediënten verdeelt voor het perfecte recept. De functie sample helpt hier goed bij om willekeurige indexen te maken voor het splitsen van data. Onthoud dat testen op aparte data essentieel is om te weten of ons model echt iets heeft geleerd of gewoon de trainingsdata heeft gememoriseerd.

En als laatste een tip: begin met eenvoudige modellen en verhoog de complexiteit als dat nodig is. De verleiding is groot om je vast te klampen aan de nieuwste, glanzende algoritmes, maar vaak zullen eenvoudige modellen je verrassen met hun effectiviteit, en ze zijn ook makkelijker te begrijpen en uit te leggen.

Naarmate je verder gaat met de tutorial, zul je zien dat het itereren op een model, resultaten interpreteren en deze verbeteren, een cyclisch proces is—een machine learning- beoefenaar is altijd op zoek naar manieren om zijn modellen beter te maken. Nadat je een basis hebt gelegd met KNN of een ander simpel algoritme, zul je leren hoe je andere algoritmes gebruikt en je modellen verder optimaliseert.

Het begrijpen en implementeren van machine learning modellen in R is een belonende inspanning—een die ik niet alleen intellectueel stimulerend, maar ook heel praktisch vind, en ik ben ervan overtuigd dat jij dat ook zult vinden.

Je R-omgeving instellen

Voordat we in de details van machine learning met R duiken, is het belangrijk om je R-omgeving gereed te maken. Voor nieuwkomers: R is een open-source programmeertaal die geweldig is voor data-analyse, visualisaties, en ja, ook voor machine learning. Ik weet dat de installatie niet het spannendste deel is van het leren, maar geloof me, een goed werkende omgeving maakt alles op de lange termijn makkelijker. We doen dit samen, dus geen zorgen.

Eerst moet je R downloaden van CRAN, het Comprehensive R Archive Network. Kies de versie die past bij je besturingssysteem. Hier is hoe ik het doe, kopieer en plak deze regel in de adresbalk van je browser. Vervang 'mac' door 'win' of 'linux' indien nodig:

https://cran.r-project.org/bin/macosx/

Zodra je R hebt geïnstalleerd, raad ik aan om RStudio te gebruiken als je IDE (Integrated Development Environment). Het is gebruiksvriendelijk en verbetert de interface van R aanzienlijk, wat je coderervaring veel fijner maakt. Haal de juiste versie van RStudio van hier:

https://www.rstudio.com/products/rstudio/download/

Na installatie, start je RStudio op. Een tip: RStudio heeft verschillende panelen voor verschillende doeleinden. Let op het Console paneel, want daar zie je de resultaten van je code. Om te testen of R klaar is, kun je een eenvoudige opdracht uitvoeren. Laten we het samen proberen:

# Check R versie
R.version.string

Je zou de versie van R in de console moeten zien, wat betekent dat R klaar is voor gebruik.

De volgende stap is het instellen van de benodigde packages. Zie deze alsof het extra tools zijn die R kan gebruiken. Voor machine learning wil je tools zoals caret of tidymodels. Installeer ze met de install.packages() functie. Zo simpel is het:

# Installeer caret of tidymodels
install.packages("caret")
install.packages("tidymodels")

Zodra ze geïnstalleerd zijn, zorg dat ze klaar zijn om te gebruiken met:

# Laad libraries
library(caret)
library(tidymodels)

Om onze projecten overzichtelijk te houden, maken we een nieuw R-project binnen RStudio aan—een essentiële stap voor een goed georganiseerd project.

# In RStudio, ga naar:
# File  New Project  New Directory  New Project
# Voer de naam van je project in en kies een map om het project op te slaan.

Dit creëert een nieuwe werkruimte met zijn eigen scripts, workspaces en geschiedenis – een schone lei.

Tenslotte, laten we versiebeheer erbij halen. Als je er niet bekend mee bent, zie versiebeheer als een tijdmachine voor je code. We gebruiken Git, dat goed geïntegreerd is in RStudio. Stel het in en verbind het aan een repository van GitHub of een vergelijkbare service. Hiermee kun je veranderingen bijhouden en gemakkelijk samenwerken. Hier is hoe je een Git-repository initialiseert binnen je RStudio-project:

# In RStudio, ga naar:
# Tools  Version Control  Project Setup
# Kies 'Git' en volg de instructies om een repository te initialiseren.

Et voilà. Je R-omgeving is helemaal klaar. We hebben R geïnstalleerd, een IDE gekozen, de benodigde packages toegevoegd, onze werkruimte georganiseerd met een nieuw project, en versiebeheer geïntroduceerd. Het is geen raketwetenschap en ik ben er zeker van dat jij het kan. Je bent klaar om je eerste machine learning model te maken, zonder problemen. Laten we aan de slag gaan en beginnen met het leuke deel!

Je Eerste Machine Learning Model in R

Een machine learning model maken in R kan een hele avontuur zijn. Ik herinner me nog goed de eerste keer dat ik ermee begon - het was geweldig om te zien hoe mijn machine data interpreteerde en voorspellingen maakte. Hier neem ik je stap voor stap mee in dit proces.

Zorg eerst dat je de nodige packages hebt geïnstalleerd. Je wilt de package caret hebben, wat staat voor Classification And Regression Training. Deze package maakt het eenvoudiger om modellen te trainen voor complexe regressie- en classificatieproblemen.

install.packages("caret")
library(caret)

Laten we zeggen dat we met de beroemde Iris dataset werken. Dit is een waardevolle dataset voor beginners omdat het relatief eenvoudig en goed begrijpelijk is. De dataset bevat verschillende metingen van iris bloemen en hun soorten. Het doel is vaak om de soort te voorspellen op basis van de metingen.

Laad de dataset, die standaard met R komt:

data(iris)

Voordat we de data in een model stoppen, is het handig om met summary(iris) een korte blik te werpen op wat je hebt.

Nu, laten we deze dataset opsplitsen in twee delen: één om het model te trainen en één om het te testen. Een veelgebruikte verdeling is 70% voor training en 30% voor testen. De functie createDataPartition() uit caret kan daarbij helpen.

set.seed(123) # voor reproduceerbaarheid
trainIndex  createDataPartition(iris$Species, p = 0.7, list = FALSE)
trainData  iris[trainIndex, ]
testData  iris[-trainIndex, ]

Toen ik voor het eerst een model bouwde, hield ik het simpel met een linear discriminant analysis (LDA). Dit is een basistechniek voor classificatieproblemen.

Laten we nu een LDA model trainen met trainData.

ldaModel  train(Species~., data=trainData, method='lda')

De formule Species~. vertelt R om de Species te voorspellen met alle andere kolommen in trainData. De method='lda' geeft aan welk type model we gebruiken.

Als het model eenmaal is getraind, is het tijd om voorspellingen te maken op testData en te kijken hoe het model presteert.

predictions  predict(ldaModel, testData)

Kijk hoe goed je model het deed. De meeste beginners, waaronder ikzelf, beginnen met het bekijken van de confusiematrix. Het is een intuïtieve manier om te zien waar je model het goed of fout doet.

confusionMatrix(predictions, testData$Species)

Deze resultaten laten je zien hoeveel voorspellingen juist waren en waar het model mogelijk de mist in ging.

Onthoud, het doel van dit eerste model is niet om records te breken, maar om een basis te leggen voor begrip, iteratie en verbetering. Het kostte mij meerdere pogingen om de fijne kneepjes te begrijpen en nog meer om complexere modellen en instellingsparameters te verfijnen. De schoonheid van caret en R is dat je makkelijk deze aspecten kunt verkennen zodra je de basis onder de knie hebt.

En dat is het! Je hebt net je eerste machine learning model in R gebouwd en geëvalueerd. Natuurlijk, als je dieper gaat, leer je over cross-validatie, hyperparametertuning en andere algoritmes. Maar voor nu, geef jezelf een schouderklopje, je hebt de eerste stap in machine learning in R gezet!

Evaluatie van Modelprestaties

Als ik overstap van het trainen van een model naar het begrijpen van hoe goed het in de echte wereld zal presteren, is het belangrijk om de prestaties te evalueren. Het gaat niet alleen om het werkend krijgen van een model, maar om ervoor te zorgen dat het model goede voorspellingen maakt.

Eerst moeten we kijken naar evaluatiegegevens. Er zijn verschillende maten voor verschillende soorten problemen. Bijvoorbeeld, bij een classificatieprobleem gebruiken we vaak nauwkeurigheid. Maar bij een regressieprobleem kijken we eerder naar de mean squared error (MSE) of mean absolute error (MAE). Stel dat ik een classificatiemodel heb gemaakt. Zo bereken ik nauwkeurigheid in R:

# Stel 'pred' is je voorspellingen en 'actual' is de werkelijke labels
accuracy  sum(pred == actual) / length(actual)
print(paste("Nauwkeurigheid:", accuracy))

Dat is een begin, maar nauwkeurigheid is niet altijd de beste maatstaf, vooral niet als mijn klassen uit balans zijn. In zulke gevallen helpt een confusiematrix om te zien waar het model het goed of fout doet:

ibrary(caret)
confusionMatrix(as.factor(pred), as.factor(actual))

De caret-package heeft een handige confusionMatrix-functie die niet alleen de matrix geeft, maar ook andere nuttige maten zoals sensitiviteit en specificiteit.

Als ik met een regressiemodel werk, is het anders om de MSE of MAE te krijgen:

mse  mean((pred - actual)^2)
mae  mean(abs(pred - actual))
print(paste("Mean Squared Error:", mse))
print(paste("Mean Absolute Error:", mae))

We moeten deze maten niet geïsoleerd bekijken. Soms helpt het om de fouten te visualiseren. Stel dat ik wil zien hoe de fouten verdeeld zijn. Een snelle plot van de werkelijke tegen voorspelde waarden kan verhelderend zijn:

library(ggplot2)
ggplot() +
geom_point(aes(x=actual, y=pred), color="blue") +
geom_abline(intercept=0, slope=1, color="red") +
ggtitle("Werkelijk vs. Voorspeld")

Die rode lijn laat zien waar de punten zouden liggen als mijn voorspellingen perfect waren. Afwijkingen van die lijn laten de fouten zien.

Een belangrijk aspect van modelprestaties evalueren is cross-validatie. Ik wil niet de fout maken om het model alleen te evalueren op de data die ik gebruikte om het te trainen. Dat kan me laten denken dat mijn model beter is dan het werkelijk is. Dus, gebruik ik de train-functie van het caret-package en specificeer ik mijn cross-validatiemethode:

control  trainControl(method="cv", number=10) # 10-voudige cross-validatie
model_cv  train(target~., data=train_data, method="lm", trControl=control)
print(model_cv)

De trControl-parameter laat me specificeren dat ik tienvoudige cross-validatie wil gebruiken, wat meestal een goed evenwicht is.

Maar voordat je deze technieken gebruikt, onthoud dat elke dataset en elk probleem uniek is—er is geen universele "beste" evaluatiemethode. Het is belangrijk om te begrijpen waarom elke maat iets zegt over mijn model in de specifieke context waarin het wordt toegepast.

Het evalueren van modelprestaties is niet slechts een eenmalige controle; het is een iteratief proces. Elke keer dat ik mijn model aanpas, doorloop ik deze stappen opnieuw om te zien of de aanpassingen echte verbeteringen zijn. Zo verbeter ik geleidelijk de voorspellende vermogens van mijn model, altijd met aandacht voor de maten die het meest belangrijk zijn voor de doelstellingen van mijn project.

Verbeteren van uw Model en Volgende Stappen

In de reis om machine learning met R onder de knie te krijgen, is het maken van een model pas het begin. Ik heb geleerd dat het verfijnen van het model en het blijven aanpassen ervan waar echt vooruitgang wordt geboekt. Na het evalueren van de prestatie van ons eerste model, is duidelijk dat er altijd ruimte is voor verbetering.

Een effectieve methode die ik vind, is het tunen van hyperparameters. Hyperparameters zijn de instellingen die je kunt aanpassen om het gedrag van een machine learning-algoritme te controleren. In R kun je hiervoor het caret-pakket gebruiken. Hier is een voorbeeld waarin ik de train() functie gebruik om een random forest model te tunen:

library(caret)
# Stel je voor dat we een dataset hebben genaamd 'training' en 'target_variable'
set.seed(123)
tuneGrid  expand.grid(.mtry = seq(2, 14, by = 2))
control  trainControl(method = "repeatedcv", number = 10, repeats = 3)

tunedModel  train(target_variable ~ ., data = training,
method = "rf",
metric = "Accuracy",
tuneGrid = tuneGrid,
trControl = control)
summary(tunedModel) # Geeft een samenvatting van het getunede model

Door te spelen met het aantal variabelen dat bij elke splitsing wordt geselecteerd (mtry), kan de prestatie van het model vaak verder worden verbeterd. De functie trainControl() stelt de methode voor cross-validatie in, wat helpt overfitting te vermijden.

Een ander belangrijk aspect is feature engineering. Het gaat om het maken van nieuwe inputkenmerken uit je bestaande kenmerken en dit kan een groot verschil maken. Bijvoorbeeld, het combineren van twee variabelen om een nieuwe te maken die meer onderscheidende informatie biedt, kan de nauwkeurigheid van het model verbeteren. Om dit te implementeren, voeg ik misschien een nieuwe kolom toe aan ons data frame:

training$interactionFeature  training$feature1 * training$feature2

Daarna kun je doorgaan met het opnemen van deze nieuwe eigenschap in je modeltrainingsproces.

Het is noodzakelijk om up-to-date te blijven met het laatste onderzoek en trends in machine learning. Ik bekijk regelmatig bronnen van universiteiten en toonaangevende onderzoekers. Bijvoorbeeld, Stanford University's Machine Learning cursus door Andrew Ng op Coursera is een must-watch. GitHub-repositories zoals tidymodels bieden een rijke verzameling pakketten die machine learning in R meer ordelijk en transparant maken. Je kunt het hier vinden: https://github.com/tidymodels.

Ik geloof ook in de waarde van delen en leren van anderen. Gemeenschappen zoals GitHub, Stack Overflow, r/machinelearning op Reddit en YCombinator’s Hacker News zijn uitstekend voor samenwerken en feedback krijgen. Aarzel niet om je werk te laten zien en om advies te vragen.

Als laatste is het documenteren van voortgang essentieel. Notities maken en code schrijven terwijl je experimenteert met verschillende modellen helpt niet alleen om bij te houden wat je hebt gedaan, maar het maakt ook leren van fouten mogelijk. Zo ziet eenvoudige documentatie eruit:

# Deze codeblok is voor een eenvoudig lineair regressiemodel
# Dataset: mtcars
# Datum: YYYY-MM-DD
# Doelen: Het voorspellen van miles per gallon (mpg) vanuit een set van variabelen

linearMod  lm(mpg ~ wt + qsec + factor(am), data = mtcars)
summary(linearMod) # Laat de samenvatting van ons regressiemodel zien

Kortom, de weg naar het verbeteren van je model in R zit vol met tal van kleine maar belangrijke stappen. Hyperparameter tuning, feature engineering, geïnformeerd blijven, samenwerking en documentatie – al deze aspecten samen helpen je machine learning vaardigheden verder te ontwikkelen. Behandel het als een continu proces; bouwen, testen, leren en herhalen. Het machine learning landschap verandert snel, en dat zou jouw methoden en modellen ook moeten doen.


Delen

Opmerkingen (0)

Een reactie plaatsen

© 2023 - 2024 — TensorScience. Alle rechten voorbehouden.