R/new_featrue_type3.R

Defines functions new_feature_type3

new_feature_type3 <- function(data_trainm,train_label,data_testm,classes,p,corr,powerS,nc){
  if(missing(powerS)){
    powerS=1
  }

  if(missing(p)){
    p=0
  }

  if(missing(corr)){
    corr=0
  }

  if(missing(nc)){
    nc=1
  }

   # network classifier with 2*nc networks

  train_nets <- structure(list(types = character(),
                               featureIDX = list(),
                               nets = list()))

  # build network for each class
  aa = 1
  for(t in classes){
    class_train <- data_trainm[train_label==t,]
    clusters <- hclust(dist(t(as.matrix(class_train))),method = "ward.D")
    clusterCut <- cutree(clusters, nc)
    for(i in 1:nc){
      x = data.frame(class_train[,clusterCut==i])
      if(ncol(x)>2){
        nets <- network_build(as.matrix(x), p, corr)
        train_nets$types[[aa]] <- t
        train_nets$featureIDX[[aa]] <- colnames(x)
        train_nets$nets[[aa]] <- nets
        aa = aa+1
      }
    }

  }
  new_train <- matrix(nrow = nrow(data_trainm),ncol = length(train_nets$types))
  new_test <- matrix(nrow = nrow(data_testm),ncol = length(train_nets$types))

  # new train data
  for(b in 1:length(train_nets$types)){
    nets <- train_nets$nets[[b]]
    smooth_value <- smoothness(Lap = nets$laplacian,
                               data_trainm[,train_nets$featureIDX[[b]]],powerS)
    new_train[,b] <- smooth_value
  }

  # new test data
  for(b in 1:length(train_nets$types)){
    nets <- train_nets$nets[[b]]
    smooth_value <- smoothness(nets$laplacian,
                               data_testm[,train_nets$featureIDX[[b]]],powerS)
    new_test[,b] <- smooth_value
  }

  new_data <- rbind(new_train,new_test)

  return(new_data)
}
xinying17/FeatureCalc documentation built on May 4, 2019, 1:07 p.m.