RotMatMake {ODRF} | R Documentation |
Create rotation matrix used to determine the linear combination of features.
Description
Create any projection matrix with a self-defined projection matrix function and projection optimization model function
Usage
RotMatMake(
X = NULL,
y = NULL,
RotMatFun = "RotMatPPO",
PPFun = "PPO",
FunDir = getwd(),
paramList = NULL,
...
)
Arguments
X |
An n by d numeric matrix (preferable) or data frame. |
y |
A response vector of length n. |
RotMatFun |
A self-defined projection matrix function name, which can also be |
PPFun |
A self-defined projection function name, which can also be |
FunDir |
The path to the |
paramList |
List of parameters used by the functions |
... |
Used to handle superfluous arguments passed in using paramList. |
Details
There are two ways for the user to define a projection direction function. The first way is to connect two custom functions with the function RotMatMake()
.
Specifically, RotMatFun()
is defined to determine the variables to be projected, the projection dimensions and the number of projections (the first two columns of the rotation matrix).
PPFun()
is defined to determine the projection coefficients (the third column of the rotation matrix). After that let the argument RotMatFun="RotMatMake"
,
and the argument paramList
must contain the parameters RotMatFun
and PPFun
. The second way is to define a function directly,
and just let the argument RotMatFun
be the name of the defined function and let the argument paramList
be the arguments list used in the defined function.
Value
A random matrix to use in running ODT
.
Variable: Variables to be projected.
Number: Number of projections.
Coefficient: Coefficients of the projection matrix.
See Also
Examples
set.seed(220828)
X <- matrix(rnorm(1000), 100, 10)
y <- (rnorm(100) > 0) + 0
(RotMat <- RotMatMake(X, y, "RotMatRand", "PPO"))
library(nnet)
(RotMat <- RotMatMake(X, y, "RotMatPPO", "PPO", paramList = list(model = "Log")))
## Define projection matrix function makeRotMat and projection pursuit function makePP.##
## Note that '...' is necessary.
makeRotMat <- function(dimX, dimProj, numProj, ...) {
RotMat <- matrix(1, dimProj * numProj, 3)
for (np in seq(numProj)) {
RotMat[(dimProj * (np - 1) + 1):(dimProj * np), 1] <-
sample(1:dimX, dimProj, replace = FALSE)
RotMat[(dimProj * (np - 1) + 1):(dimProj * np), 2] <- np
}
return(RotMat)
}
makePP <- function(dimProj, prob, ...) {
pp <- sample(c(1L, -1L), dimProj, replace = TRUE, prob = c(prob, 1 - prob))
return(pp)
}
RotMat <- RotMatMake(
RotMatFun = "makeRotMat", PPFun = "makePP",
paramList = list(dimX = 8, dimProj = 5, numProj = 4, prob = 0.5)
)
head(RotMat)
#> Variable Number Coefficient
#> [1,] 6 1 1
#> [2,] 8 1 1
#> [3,] 1 1 -1
#> [4,] 4 1 -1
#> [5,] 5 1 -1
#> [6,] 6 2 1
# train ODT with defined projection matrix function
tree <- ODT(X, y,
split = "entropy", NodeRotateFun = "makeRotMat",
paramList = list(dimX = ncol(X), dimProj = 5, numProj = 4)
)
# train ODT with defined projection matrix function and projection optimization model function
tree <- ODT(X, y,
split = "entropy", NodeRotateFun = "RotMatMake", paramList =
list(
RotMatFun = "makeRotMat", PPFun = "makePP",
dimX = ncol(X), dimProj = 5, numProj = 4, prob = 0.5
)
)