R: Machine Learning intro

# Primi appunti di R per l'utilizzo delle principali tecniche di Machine Learning

# Steps: Question -> input data -> features -> algorithm -> parameters -> evaluation
# Campione numeroso: 60% training, 20% test, 20% validation
# Campione medio: 60%-75% training, 25%-40% test
# Campione ristretto: solo training, poi cross validation su un campione

# Indici di valutazione:
# 1. Sensitivity (sensibilità): True Positive / (True Positive + False Negative)
# 2. Specificity (specificità): True Negative / (False Positive + True Negative)
# 3. Positive Predictive Value: TP / (TP + FP)
# 4. Negative Predictive Value: TN / (FN + TN)
# 5. Accuracy: (TP + TN) / (TP + FP + TN + FN)
# 6. MSE (valori continui): 1/N(Σᵢ Predictionᵢ - Truthᵢ)²
# 7. RMSE (Root Mean Square Error): √MSE

# R: caret package
library(caret)

# 1. Pre-process (cleaning)
#  valori mancanti, variabili correlate (valutare analisi componenti principali)

# 2. Creo le partizioni
library(kernlab)
data(spam)      # dati per l'esempio (prevedere spam da testo mail)
dati <- createDataPartition(y=spam$type, p=0.75, list=FALSE)
training <- spam[dati,]     # dati per fare la previsione
testing <- spam[-dati,]     # dati per testare la previsione

# Alternative a createDataPartition():
# createFolds() per creare n partizioni per diversi test
# createResample() per utilizzare ogni dato in più di un insieme
# createTimeSlices() per le serie storiche (tiene conto del tempo, quindi utilizza i dati più recenti per il test)

# 3. Creo il modello, faccio la previsione sul test
#     modello di regressione multipla generalizzata sul campione
modello <- train(type~., data=training, method="glm")
modello$finalModel     # vedo i coefficienti
# previsioni sul resto del campione
previsioni <- predict(modello, newdata=testing)
# Es. di altri metodi:
# Trees, alberi di decisione (method="rpart")
# Random forests, n alberi di decisione (method="rf")

# 4. Model comparison (confusion matrix)
#     vedo in quanti casi ho previsto correttamente e gli indici
confusionMatrix(previsioni, testing$type)


No comments:

Post a Comment