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"))
}