As its names suggests, Supervised Locality Preserving Projection (SLPP) is a variant of LPP
in that it replaces neighborhood network construction schematic with class information in that
if two nodes belong to the same class, it assigns weight of 1, i.e., \(S_{ij}=1\) if \(x_i\) and
\(x_j\) have same class labelings.

`do.slpp(X, label, ndim = 2, preprocess = c("center", "decorrelate", "whiten"))`

## Arguments

- X
an \((n\times p)\) matrix or data frame whose rows are observations.

- label
a length-\(n\) vector of data class labels.

- ndim
an integer-valued target dimension.

- preprocess
an additional option for preprocessing the data.
Default is "center" and other options of "decorrelate" and "whiten"
are supported. See also `aux.preprocess`

for more details.

## Value

a named list containing

- Y
an \((n\times ndim)\) matrix whose rows are embedded observations.

- trfinfo
a list containing information for out-of-sample prediction.

- projection
a \((p\times ndim)\) whose columns are basis for projection.

## References

Zheng Z, Yang F, Tan W, Jia J, Yang J (2007).
“Gabor Feature-Based Face Recognition Using Supervised Locality Preserving Projection.”
*Signal Processing*, **87**(10), 2473--2483.

## Examples

```
## use iris data
data(iris)
set.seed(100)
subid = sample(1:150, 50)
X = as.matrix(iris[subid,1:4])
label = as.factor(iris[subid,5])
## compare SLPP with LPP
outLPP <- do.lpp(X)
outSLPP <- do.slpp(X, label)
## visualize
opar <- par(no.readonly=TRUE)
par(mfrow=c(1,2))
plot(outLPP$Y, pch=19, col=label, main="LPP")
plot(outSLPP$Y, pch=19, col=label, main="SLPP")
par(opar)
```