Normalize Data And Split into Trainig And Testing


library(RSNNS)
# make a function PreData tonormilized data and seperate database into two
# parts:training and testing,and normilized them.
PreData <- function(nameOfData, inputs, targets) {
    if (file.exists(paste(nameOfData, "TrainingAndTesting.RData"))) {
        load(paste(nameOfData, "TrainingAndTesting.RData"))
    } else {
        targetsNorm <- normalizeData(targets, type = "0_1")
        inputsNorm <- normalizeData(inputs, type = "0_1")
        # split the data into Training set and Testing set
        Split <- splitForTrainingAndTest(inputsNorm, targetsNorm, ratio = 0.15)
        inputsTrain <- Split$inputsTrain
        targetsTrain <- Split$targetsTrain
        inputsTest <- Split$inputsTest
        targetsTest <- Split$targetsTest
        save(inputsTrain, targetsTrain, inputsTest, targetsTest, file = paste(nameOfData, 
            "TrainingAndTesting.RData"))
    }
}
library(caret)
library(doMC)
registerDoMC(cores = 3)
# build a function that can use four different methods(svm,lm,nnet,rf) to
# training models and test them.finally give the errors of models.
Training <- function(inputsTrain, targetsTrain, inputsTest, targetsTest) {
    cvcontrol <- trainControl(method = "cv", number = 5, repeats = 1)
    # Linear Least Squares
    if (file.exists("lmFit.RData")) {
        load("lmFit.RData")
    } else {
        lmFit <- train(inputsTrain, targetsTrain, method = "lm", trControl = cvcontrol, 
            tuneLength = 4)
        save(lmFit, file = "lmFit.RData")
    }
    # svm
    if (file.exists("svmFit.RData")) {
        load("svmFit.RData")
    } else {
        svmFit <- train(inputsTrain, targetsTrain, method = "svmRadial", trControl = cvcontrol, 
            tuneLength = 4)
        save(svmFit, file = "svmFit.RData")
    }
    # randomForest
    if (file.exists("rfFit.RData")) {
        load("rfFit.RData")
    } else {
        rfFit <- train(inputsTrain, targetsTrain, method = "rf", trControl = cvcontrol, 
            tuneLength = 4)
        save(rfFit, file = "rfFit.RData")
    }
    # neural networks
    if (file.exists("nnetFit.RData")) {
        load("nnetFit.RData")
    } else {
        nnet.grid <- expand.grid(.size = c(7:15), .decay = c(1e-04, 2e-04, 0.005, 
            0.01))
        nnetFit <- train(inputsTrain, targetsTrain, method = "nnet", trControl = cvcontrol, 
            tuneGrid = nnet.grid)
        save(nnetFit, file = "nnetFit.RData")
    }
    modelErrors <- function(predicted, actual) {
        sal <- vector(mode = "numeric", length = 3)
        names(sal) <- c("MAE", "RMSE", "RELE")
        meanPredicted <- mean(predicted)
        meanActual <- mean(actual)
        sumPred <- sum((predicted - meanPredicted)^2)
        sumActual <- sum((actual - meanActual)^2)
        n <- length(actual)
        p3 <- vector(mode = "numeric", length = n)
        for (i in c(1:n)) {
            if (actual[i] == 0) {
                p3[i] <- abs(predicted[i])
            } else {
                p3[i] <- ((abs(predicted[i] - actual[i]))/actual[i])
            }
        }
        sal[1] <- mean(abs(predicted - actual))
        sal[2] <- sqrt(sum((predicted - actual)^2)/n)
        sal[3] <- mean(p3)
        sal
    }

    error <- function(model) {
        pd <- predict(model, newdata = inputsTest)
        modelErrors(pd, targetsTest)
    }
    svmE <- error(svmFit)
    lmE <- error(lmFit)
    rfE <- error(rfFit)
    nnetE <- error(nnetFit)
    Error <- cbind(svmE, lmE, rfE, nnetE)
    save(Error, file = ("Error.RData"))
}