annotate featureselect/feature_selection.R @ 3:91c141c5efa6 draft

Uploaded
author deepakjadmin
date Fri, 25 Mar 2016 06:48:10 -0400
parents
children 5364cf43a8c1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
1 args <- commandArgs(T)
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
2
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
3 arg1 <- args[1]
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
4 arg2 <- args[2]
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
5 arg3 <- args[3]
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
6 arg4 <- args[4]
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
7 arg5 <- args[5]
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
8 arg6 <- args[6]
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
9 arg7 <- args[7]
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
10 arg8 <- args[8]
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
11
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
12 library(caret)
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
13 load(arg1)
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
14
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
15 RAWDATA <- dataX
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
16 RAWDATA$outcome <- dataY
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
17 rawData <- dataX
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
18 predictorNames <- names(rawData)
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
19
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
20 isNum <- apply(rawData[,predictorNames, drop = FALSE], 2, is.numeric)
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
21 if(any(!isNum)) stop("all predictors in rawData should be numeric")
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
22
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
23 colRate <- apply(rawData[, predictorNames, drop = FALSE],
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
24 2, function(x) mean(is.na(x)))
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
25 colExclude <- colRate > 0.01
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
26 if(any(colExclude)){
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
27 predictorNames <- predictorNames[-which(colExclude)]
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
28 rawData <- RAWDATA[, c(predictorNames,"outcome")]
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
29 } else {
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
30 rawData <- RAWDATA
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
31 }
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
32 rowRate <- apply(rawData[, predictorNames, drop = FALSE],
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
33 1, function(x) mean(is.na(x)))
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
34
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
35 rowno <- dim(rawData)[1]
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
36 if (rowno <= 1000){
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
37 cutoff <- rowno / (rowno * 100)
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
38 } else if (rowno > 1000 & rowno <= 5000) {
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
39 cutoff <- rowno / (rowno * 100 * 0.5 )
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
40 } else {
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
41 cutoff <- rowno / (rowno * 100 * 0.5 * 0.5)
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
42 }
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
43 rowExclude <- rowRate > cutoff
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
44 if(any(rowExclude)){
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
45 rawData <- rawData[!rowExclude, ]
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
46 ##hasMissing <- apply(rawData[, predictorNames, drop = FALSE],
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
47 ##1, function(x) mean(is.na(x)))
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
48
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
49 ############################################################################
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
50
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
51
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
52 ###############################################################################
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
53 } else {
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
54 rawData <- rawData[complete.cases(rawData),]
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
55
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
56 }
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
57
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
58 set.seed(1234)
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
59
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
60 #print(dim(dataX))
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
61 #print(dim(rawData))
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
62 #print(length(dataY))
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
63
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
64 nzv <- nearZeroVar(rawData[,1:(length(rawData) - 1)])
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
65 if(length(nzv) > 0) {
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
66 #nzvVars <- names(rawData)[nzv]
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
67 rawData <- rawData[,-nzv]
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
68 #rawData$outcome <- dataY
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
69 }
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
70
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
71 predictorNames <- names(rawData)[names(rawData) != "outcome"]
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
72
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
73 dx <- rawData[,1:length(rawData)-1]
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
74 dy <- rawData[,length(rawData)]
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
75 corrThresh <- as.numeric(arg8)
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
76 highCorr <- findCorrelation(cor(dx, use = "pairwise.complete.obs"),corrThresh)
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
77 dx <- dx[, -highCorr]
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
78 subsets <- seq(1,length(dx),by=5)
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
79 normalization <- preProcess(dx)
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
80 dx <- predict(normalization, dx)
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
81 dx <- as.data.frame(dx)
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
82
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
83 if (arg4 == "lmFuncs"){
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
84 ctrl1 <- rfeControl(functions = lmFuncs,
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
85 method = arg5 ,
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
86 repeats = as.numeric(arg6),
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
87 number = as.numeric(arg7),
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
88 verbose = FALSE)
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
89 } else if(arg4 == "rfFuncs"){
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
90 ctrl1 <- rfeControl(functions = rfFuncs,
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
91 method = arg5 ,
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
92 repeats = as.numeric(arg6),
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
93 number = as.numeric(arg7),
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
94 verbose = FALSE)
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
95 }else if (arg4 == "treebagFuncs"){
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
96 ctrl1 <- rfeControl(functions = treebagFuncs,
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
97 method = arg5 ,
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
98 repeats = as.numeric(arg6),
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
99 number = as.numeric(arg7),
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
100 verbose = FALSE)
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
101 }else {
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
102
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
103 ctrl1 <- rfeControl(functions = nbFuncs,
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
104 method = arg5 ,
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
105 repeats = as.numeric(arg6),
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
106 number = as.numeric(arg7),
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
107 verbose = FALSE)
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
108 }
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
109
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
110
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
111
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
112
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
113 Profile <- rfe(dx, dy,sizes = subsets,rfeControl = ctrl1)
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
114
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
115 pred11 <- predictors(Profile)
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
116 save(Profile,file=arg2)
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
117 dataX <- rawData[,pred11]
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
118 dataY <- rawData$outcome
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
119
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
120 save(dataX,dataY,file=arg3)
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
121 rm(dataX)
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
122 rm(dataY)
91c141c5efa6 Uploaded
deepakjadmin
parents:
diff changeset
123