build_PCC_nonlinear_models = function(X, y, seed_value=456, build_mda_model=TRUE){ # # Builds (using caret's train function) several of the nonlinear models discussed in # this chapter of the book optimizing the probability of correct classification PCC (i.e. accuracy). # # X [n samples, n features] needs to have zero variance columns removed (use nearZeroVar to remove them) and # linear dependent columns removed (use findLinearCombos to remove them) # # y [n samples, 1] is a two factor vector of predictions with the FIRST factor corresponding to the event of interest # # Written by: # -- # John L. Weatherwax 2009-04-21 # # email: wax@alum.mit.edu # # Please send comments and especially bug reports to the # above email address. # #----- # Mixture Discriminant Analysis (MDA): # if( build_mda_model ){ set.seed(seed_value) mda.classifier = train( X, y, method="mda", tuneGrid=expand.grid(.subclasses=1:2) ) mda.predictions = predict( mda.classifier, X ) cm = confusionMatrix( data=mda.predictions, reference=y ) mda=list( classifier=mda.classifier, predictions=mda.predictions, confusionMatrix=cm ) } # Neural Networks: # set.seed(seed_value) nnetGrid = expand.grid( .size=1:5, .decay=c(0,0.1,1,2) ) nnet.classifier = train( X, y, method="nnet", preProc=c("center","scale","spatialSign"), tuneGrid=nnetGrid, trace=FALSE, maxit=2000 ) nnet.predictions = predict( nnet.classifier, X ) cm = confusionMatrix( data=nnet.predictions, reference=y ) nnet=list( classifier=nnet.classifier, predictions=nnet.predictions, confusionMatrix=cm ) # Support Vector Machines: # library(kernlab) sigmaEst = kernlab::sigest( as.matrix(X) ) svarid = expand.grid(.sigma=sigmaEst[1], .C=2^seq(-4,+4)) set.seed(seed_value) svm.classifier = train( X, y, method="svmRadial", tuneGrid=svarid, preProc=c("center","scale"), fit=FALSE ) svm.predictions = predict( svm.classifier, X ) cm = confusionMatrix( data=svm.predictions, reference=y ) svm=list( classifier=svm.classifier, predictions=svm.predictions, confusionMatrix=cm ) # K-Nearest Neighbors: # set.seed(seed_value) knn.classifier = train( X, y, method="knn", tuneLength=20, preProc=c("center","scale") ) knn.predictions = predict( knn.classifier, X ) cm = confusionMatrix( data=knn.predictions, reference=y ) knn=list( classifier=knn.classifier, predictions=knn.predictions, confusionMatrix=cm ) # Naive Bayes: # nbGrid = expand.grid(.fL=c(1,2), .usekernel=c(T,F)) set.seed(seed_value) nb.classifier = train( X, y, method="nb", tuneGrid=nbGrid ) nb.predictions = predict( nb.classifier, X ) cm = confusionMatrix( data=nb.predictions, reference=y ) nb=list( classifier=nb.classifier, predictions=nb.predictions, confusionMatrix=cm ) result = list( nnet=nnet, svm=svm, knn=knn, nb=nb ) if( build_mda_model ){ result = c(result, list(mda=mda)) } return( result ) }