require(uba) # ============================================================ # EVALUTION STATISTICS # This function will be used by the different learning routines # to get the stats we are estimating by CV # ============================================================ eval.stats <- function(form,train,test,preds) { trues <- resp(form,test) trainY <- resp(form,train) phiF.args <- phi.control(trainY, method="extremes") lossF.args <- loss.control(trainY) prec <- util(preds,trues,phiF.args,lossF.args,util.control(umetric="P")) rec <- util(preds,trues,phiF.args,lossF.args,util.control(umetric="R")) F05 <- util(preds,trues,phiF.args,lossF.args,util.control(umetric="Fm",beta=0.5)) F1 <- util(preds,trues,phiF.args,lossF.args,util.control(umetric="Fm",beta=1)) F2 <- util(preds,trues,phiF.args,lossF.args,util.control(umetric="Fm",beta=2)) c(mad=mean(abs(trues-preds)), mse=mean((trues-preds)^2), prec=prec,rec=rec,F05=F05,F1=F1,F2=F2 ) } # ============================================================ # Obtraining a model using the standard data set, # i.e. all given data # ============================================================ allData <- function(form,train,test,learner,...) { preds <- do.call(paste('cv',learner,sep='.'), list(form,train,test,...) ) eval.stats(form,train,test,preds) } # ============================================================ # Obtraining a model using random undersampling # i.e. all given data # ============================================================ underSampl <- function(form,train,test,learner,thr.rel=0.5,perc.under=200,...) { newtrain <- random.underSample(form,train,thr.rel,perc.under) preds <- do.call(paste('cv',learner,sep='.'), list(form,newtrain,test,...) ) eval.stats(form,train,test,preds) } # ============================================================ # Obtraining a model using smote # i.e. all given data # ============================================================ smote <- function(form,train,test,learner,thr.rel,perc.over,k,perc.under,...) { newtrain <- SMOTE.R(form,train,thr.rel,perc.over,k,perc.under) preds <- do.call(paste('cv',learner,sep='.'), list(form,newtrain,test,...) ) eval.stats(form,train,test,preds) } # ============================== # the learn/test functions for the different systems cv.svm <- function(form,train,test,...) { m <- svm(form,train,...) predict(m,test) } cv.rf <- function(form,train,test,...) { m <- randomForest(form,train,...) predict(m,test) } cv.earth <- function(form,train,test,...) { m <- earth(form,train,...) predict(m,test) }