R/plot_pixel.R

Defines functions plot_pixel

plot_pixel = function(results) {
  # get datasets
  datasets = unique(results$dataset)
  rotate = FALSE

  # define layout of plot
  image_rows = ceiling(nrow(results %>% dplyr::filter(ids != "full_predictor") %>% dplyr::group_by(dataset, classifier, ids) %>% dplyr::count()) / 5)
  par(mfrow=c(image_rows,5), mar = c(1,1,1,1) + 1)

  for(data in datasets) {
    # get results for this dataset
    results_dataset = results %>% dplyr::filter(dataset == data)

    # get features of full_predictor
    pixel_feats = results_dataset %>% dplyr::filter(ids == "full_predictor") %>% dplyr::select(features)
    pixel_feats = pixel_feats$features[[1]]
    pixel_feats = stringr::str_split(pixel_feats, ", ")[[1]]

    # rotate image for PixRaw10P
    if(data == "PixRaw10P") {
      rotate = TRUE
      range = (length(pixel_feats)-1):1
    }
    else {
      rotate = FALSE
      range = 1:(length(pixel_feats)-1)
    }

    # define width height and range
    width_height = sqrt(length(pixel_feats))
    # range = 1:length(pixel_feats)

    # get classifier
    classifiers = unique(results_dataset %>% dplyr::filter(ids != "full_predictor") %>% dplyr::select(classifier))$classifier

    # get methods
    methods = sort(unique(results_dataset %>% dplyr::filter(ids != "full_predictor") %>% dplyr::select(ids))$ids)

    for(class in classifiers) {
      for(method in methods) {
        # get best performing
        best_result = results_dataset %>% dplyr::filter(ids == method & classifier == class) %>% dplyr::filter(metric == min(metric)) %>% dplyr::select(features)

        if(nrow(best_result) <= 0) {
          break
        }
        best_result = best_result$features

        # create matrix for selected pixels
        pixels = rep(0, width_height*width_height)
        selectedPixels = pixel_feats[range] %in% stringr::str_split(best_result, ", ")[[1]]
        pixels[selectedPixels] = 255

        pixels = matrix(as.numeric(pixels),width_height,width_height)

        # browser()

        # rotate if needed
        if(rotate) {
          pixels = t(pixels)
        }

        # browser()

        image(1:width_height, 1:width_height, pixels, col=gray(1-(0:255)/255), xlab = "", ylab = "")
        title(main = paste(method, class, sep="_"))
      }
    }
  }

  # rotate = FALSE
#
#   if(grepl("mnist", tolower(dataset))) {
#     data = loadMnistNumbers(1)$data
#     width_height = sqrt(ncol(data)-1)
#     range = 1:(ncol(data)-1)
#   }
#   else if(grepl("pixraw", tolower(dataset))) {
#     data = loadPixRaw10P()$data
#     width_height = sqrt(ncol(data)-1)
#     rotate = TRUE
#     range = (ncol(data)-1):1
#   }
  # browser()
  # par(mar=c(1,1,1,1))


}

# plot_pixel(fs_results)
creil94/FeatureSelectionDashboard documentation built on Nov. 4, 2019, 9:17 a.m.