Nothing
#' WFPOF algorithm
#'
#' Algorithm proposed by:
#' ZHOU Xiao-Yun+, SUN Zhi-Hui, ZHANG Bai-Li, YANG Yi-Dong - A Fast Outlier Detection Algorithm for High Dimensional Categorical Data Streams. Journal of Software 18(4). April 2007.
#'
#' @param data \code{data.frame} or \code{transactions} from \code{arules} with input data
#' @param minSupport minimum support for FPM
#' @param mlen maximum length of frequent itemsets
#' @param noCores number of cores for parallel computation
#' @return model output (list) with all results including outlier scores
#' @import arules foreach doParallel parallel
#' @export
#' @examples
#' library("fpmoutliers")
#' dataFrame <- read.csv(
#' system.file("extdata", "fp-outlier-customer-data.csv", package = "fpmoutliers"))
#' model <- WFPOF(dataFrame, minSupport = 0.001)
WFPOF <- function(data, minSupport=0.3, mlen=0, noCores=1){
registerDoParallel(noCores)
if(is(data,"data.frame")){
data <- sapply(data,as.factor)
data <- data.frame(data, check.names=F)
txns <- as(data, "transactions")
} else {
txns <- data
}
if(mlen<=0){
variables <- unname(sapply(txns@itemInfo$labels,function(x) strsplit(x,"=")[[1]][1]))
mlen <- length(unique(variables))
}
fitemsets <- apriori(txns, parameter = list(support=minSupport, maxlen=mlen, target="frequent itemsets"))
fiList <- LIST(items(fitemsets))
qualities <- fitemsets@quality[,"support"]
scores <- c()
tx <- NULL
scores <- foreach(tx = as(txns,"list"), .combine = list, .multicombine = TRUE) %dopar% {
transaction = unlist(tx,"list")
support <- c()
for(item in seq(1,length(fitemsets))){
itemset <- fiList[[item]]
if(all(itemset %in% transaction)){
support <- c(support, (qualities[item]*length(itemset))/length(unique(txns@itemInfo$variables)))
}
}
sum(support)/length(fitemsets)
}
scores <- unlist(scores)
stopImplicitCluster()
output <- list()
output$minSupport <- minSupport
output$maxlen <- mlen
output$model <- fitemsets
output$scores <- scores
output
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.