sda {sparseLDA} | R Documentation |
Performs sparse linear discriminant analysis. Using an alternating minimization algorithm to minimize the SDA criterion.
sda(x, ...) ## Default S3 method: sda(x, y, lambda = 1e-6, stop, maxIte = 100, trace = FALSE, tol = 1e-6, ...)
x |
A matrix of the training data with observations down the rows and variables in the columns. |
y |
A matrix initializing the dummy variables representing the groups. |
lambda |
The weight on the L2-norm for elastic net regression. Default: 1e-6. |
stop |
If STOP is negative, its absolute value corresponds to the desired number of variables. If STOP is positive, it corresponds to an upper bound on the L1-norm of the b coefficients. There is a one to one correspondence between stop and t. |
maxIte |
Maximum number of iterations. Default: 100. |
trace |
If TRUE, prints out its progress. Default: FALSE. |
tol |
Tolerance for the stopping criterion (change in RSS). Default is 1e-6. |
... |
additional arguments |
The function finds sparse directions for linear classification.
Returns a list with the following attributes:
beta |
The loadings of the sparse discriminative directions. |
theta |
The optimal scores. |
rss |
A vector of the Residual Sum of Squares at each iteration. |
Line Clemmensen
Clemmensen, L., Hastie, T. and Ersboell, K. (2007) "Sparse discriminant analysis", Technical report, IMM, Technical University of Denmark
normalize, normalizetest, smda
## load data data(penicilliumYES) X <- penicilliumYES$X Y <- penicilliumYES$Y colnames(Y) <- c("P. Melanoconidium", "P. Polonicum", "P. Venetum") ## test samples Iout<-c(3,6,9,12) Iout<-c(Iout,Iout+12,Iout+24) ## training data Xtr<-X[-Iout,] k<-3 n<-dim(Xtr)[1] ## Normalize data Xc<-normalize(Xtr) Xn<-Xc$Xc p<-dim(Xn)[2] ## Perform SDA with one non-zero loading for each discriminative ## direction with Y as matrix input out <- sda(Xn, Y, lambda = 1e-6, stop = -1, maxIte = 25, trace = TRUE) ## predict training samples train <- predict(out, Xn) ## testing Xtst<-X[Iout,] Xtst<-normalizetest(Xtst,Xc) test <- predict(out, Xtst) print(test$class) ## Factor Y as input Yvec <- factor(rep(colnames(Y), each = 8)) out2 <- sda(Xn, Yvec, lambda = 1e-6, stop = -1, maxIte = 25, trace = TRUE)