Local Linear Laplacian Eigenmaps is an unsupervised manifold learning method as an
extension of Local Linear Embedding (`do.lle`

). It is claimed to be
more robust to local structure and noises. It involves the concept of
artificial neighborhood in constructing the adjacency graph for reconstruction of
the approximated manifold.

```
do.llle(
X,
ndim = 2,
preprocess = c("null", "center", "scale", "cscale", "decorrelate", "whiten"),
K = round(nrow(X)/2),
P = max(round(nrow(X)/4), 2),
bandwidth = 0.2
)
```

## Arguments

- X
an \((n\times p)\) matrix or data frame whose rows are observations
and columns represent independent variables.

- ndim
an integer-valued target dimension.

- preprocess
an additional option for preprocessing the data.
Default is `"null"`

. See also `aux.preprocess`

for more details.

- K
size of near neighborhood for each data point.

- P
size of artifical neighborhood.

- bandwidth
scale parameter for Gaussian kernel. It should be in \((0,1)\).

## 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.

## References

Liu F, Zhang W, Gu S (2016).
“Local Linear Laplacian Eigenmaps: A Direct Extension of LLE.”
*Pattern Recognition Letters*, **75**, 30--35.

## Examples

```
if (FALSE) {
## use iris data
data(iris)
X = as.matrix(iris[,1:4])
label = as.integer(iris$Species)
# see the effect bandwidth
out1 = do.llle(X, bandwidth=0.1, P=20)
out2 = do.llle(X, bandwidth=0.5, P=20)
out3 = do.llle(X, bandwidth=0.9, P=20)
# visualize the results
opar <- par(no.readonly=TRUE)
par(mfrow=c(1,3))
plot(out1$Y, col=label, main="bandwidth=0.1")
plot(out2$Y, col=label, main="bandwidth=0.5")
plot(out3$Y, col=label, main="bandwidth=0.9")
par(opar)
}
```