library(EBImage)
library(imager)
## Warning: package 'imager' was built under R version 4.3.3
## Loading required package: magrittr
## Warning: package 'magrittr' was built under R version 4.3.3
##
## Attaching package: 'imager'
## The following object is masked from 'package:magrittr':
##
## add
## The following objects are masked from 'package:EBImage':
##
## channel, dilate, display, erode, resize, watershed
## The following objects are masked from 'package:stats':
##
## convolve, spectrum
## The following object is masked from 'package:graphics':
##
## frame
## The following object is masked from 'package:base':
##
## save.image
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.3.3
##
## Attaching package: 'dplyr'
## The following object is masked from 'package:imager':
##
## where
## The following object is masked from 'package:EBImage':
##
## combine
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.3.3
## Warning: package 'ggplot2' was built under R version 4.3.3
## Warning: package 'tibble' was built under R version 4.3.3
## Warning: package 'tidyr' was built under R version 4.3.3
## Warning: package 'readr' was built under R version 4.3.3
## Warning: package 'purrr' was built under R version 4.3.3
## Warning: package 'stringr' was built under R version 4.3.3
## Warning: package 'forcats' was built under R version 4.3.3
## Warning: package 'lubridate' was built under R version 4.3.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats 1.0.0 ✔ readr 2.1.5
## ✔ ggplot2 3.5.1 ✔ stringr 1.5.1
## ✔ lubridate 1.9.3 ✔ tibble 3.2.1
## ✔ purrr 1.0.2 ✔ tidyr 1.3.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ imager::add() masks magrittr::add()
## ✖ stringr::boundary() masks imager::boundary()
## ✖ dplyr::combine() masks EBImage::combine()
## ✖ tidyr::extract() masks magrittr::extract()
## ✖ tidyr::fill() masks imager::fill()
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ✖ purrr::set_names() masks magrittr::set_names()
## ✖ purrr::transpose() masks EBImage::transpose()
## ✖ dplyr::where() masks imager::where()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
# Define the path to your images
image_folder <- "C:/Users/Muraa/Desktop/Natural images"
# Get a list of all categories (folders)
categories <- list.dirs(image_folder, recursive = FALSE)
labels <- basename(categories) # Use folder names as labels
# Debug: print categories
print(categories)
## [1] "C:/Users/Muraa/Desktop/Natural images/Airplane"
## [2] "C:/Users/Muraa/Desktop/Natural images/Car"
## [3] "C:/Users/Muraa/Desktop/Natural images/Dog"
## [4] "C:/Users/Muraa/Desktop/Natural images/Fruit"
## [5] "C:/Users/Muraa/Desktop/Natural images/Motorbike"
# Function to resize images efficiently with added debugging
resize_image <- function(img_path, img_size = 128) {
tryCatch({
cat("Loading image:", img_path, "\n") # Debug: print the image being loaded
img <- load.image(img_path) # Load the image
img <- resize(img, img_size, img_size) # Resize to specified dimensions
as.numeric(img) # Convert to numeric vector
}, error = function(e) {
cat("Error loading image:", img_path, "\n")
return(NULL)
})
}
# Function to load all images into a matrix
load_images <- function(image_folder, categories, img_size = 128) {
all_images <- list() # Initialize an empty list to store image data
labels <- c() # Initialize an empty vector to store labels
for (category in categories) {
label <- basename(category) # Get label from folder name
image_files <- list.files(category, full.names = TRUE) # List all image files
cat("Processing category:", label, "\n") # Debug: print category name
# Process each image file in the category using lapply
category_images <- lapply(image_files, function(x) resize_image(x, img_size))
valid_images <- Filter(Negate(is.null), category_images) # Remove NULLs (invalid images)
# Debug: print the number of valid images
cat("Number of valid images in category", label, ":", length(valid_images), "\n")
# Store valid images and corresponding labels
all_images <- c(all_images, valid_images)
labels <- c(labels, rep(label, length(valid_images)))
}
# Convert list of image vectors into a matrix
if (length(all_images) > 0) {
image_matrix <- do.call(rbind, all_images)
return(list(image_matrix = image_matrix, labels = labels)) # Return image matrix and labels
} else {
return(NULL) # Return NULL if no valid images were loaded
}
}
# Load images and labels
image_data <- load_images(image_folder, categories)
## Processing category: Airplane
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0000.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0001.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0002.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0003.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0004.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0005.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0006.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0007.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0008.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0009.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0010.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0011.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0012.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0013.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0014.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0015.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0016.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0017.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0018.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0019.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0020.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0021.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0022.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0023.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0024.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0025.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0026.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0027.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0028.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0029.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0030.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0031.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0032.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0033.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0034.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0035.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0036.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0037.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0038.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0039.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0040.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0041.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0042.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0043.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0044.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0045.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0046.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0047.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0048.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Airplane/airplane_0049.jpg
## Number of valid images in category Airplane : 50
## Processing category: Car
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0000.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0001.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0002.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0003.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0004.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0005.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0006.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0007.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0008.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0009.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0010.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0011.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0012.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0013.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0014.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0015.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0016.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0017.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0018.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0019.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0020.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0021.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0022.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0023.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0024.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0025.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0026.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0027.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0028.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0029.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0030.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0031.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0032.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0033.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0034.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0035.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0036.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0037.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0038.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0039.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0040.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0041.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0042.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0043.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0044.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0045.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0046.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0047.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0048.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Car/car_0049.jpg
## Number of valid images in category Car : 50
## Processing category: Dog
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0000.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0001.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0002.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0003.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0004.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0005.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0006.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0007.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0008.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0009.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0010.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0011.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0012.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0013.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0014.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0015.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0016.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0017.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0018.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0019.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0020.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0021.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0022.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0023.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0024.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0025.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0026.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0027.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0028.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0029.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0030.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0031.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0032.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0033.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0034.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0035.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0036.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0037.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0038.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0039.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0040.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0041.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0042.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0043.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0044.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0045.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0046.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0047.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0048.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Dog/dog_0049.jpg
## Number of valid images in category Dog : 50
## Processing category: Fruit
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0000.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0001.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0002.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0003.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0004.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0005.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0006.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0007.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0008.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0009.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0010.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0011.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0012.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0013.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0014.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0015.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0016.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0017.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0018.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0019.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0020.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0021.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0022.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0023.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0024.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0025.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0026.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0027.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0028.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0029.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0030.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0031.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0032.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0033.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0034.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0035.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0036.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0037.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0038.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0039.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0040.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0041.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0042.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0043.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0044.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0045.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0046.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0047.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0048.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Fruit/fruit_0049.jpg
## Number of valid images in category Fruit : 50
## Processing category: Motorbike
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0000.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0001.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0002.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0003.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0004.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0005.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0006.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0007.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0008.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0009.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0010.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0011.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0012.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0013.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0014.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0015.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0016.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0017.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0018.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0019.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0020.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0021.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0022.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0023.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0024.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0025.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0026.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0027.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0028.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0029.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0030.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0031.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0032.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0033.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0034.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0035.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0036.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0037.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0038.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0039.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0040.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0041.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0042.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0043.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0044.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0045.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0046.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0047.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0048.jpg
## Loading image: C:/Users/Muraa/Desktop/Natural images/Motorbike/motorbike_0049.jpg
## Number of valid images in category Motorbike : 50
# Check if image_matrix exists and has valid dimensions
if (!is.null(image_data$image_matrix) && length(dim(image_data$image_matrix)) == 2) {
if (dim(image_data$image_matrix)[1] > 0 && dim(image_data$image_matrix)[2] > 0) {
cat("Image data loaded successfully. Dimensions:", dim(image_data$image_matrix), "\n")
} else {
cat("No valid image data found. Check your image folder.\n")
}
} else {
cat("Image matrix is NULL or invalid. Check your image processing.\n")
}
## Image data loaded successfully. Dimensions: 250 49152
| ##NEURAL NETWORKS |
r # Load necessary libraries library(nnet) |
## Warning: package 'nnet' was built under R version 4.3.3 |
r library(caret) |
## Warning: package 'caret' was built under R version 4.3.3 |
## Loading required package: lattice |
## ## Attaching package: 'caret' |
## The following object is masked from 'package:purrr': ## ## lift |
r library(dplyr) library(ggplot2) library(tidyr) library(reshape2) |
## Warning: package 'reshape2' was built under R version 4.3.3 |
## ## Attaching package: 'reshape2' |
## The following object is masked from 'package:tidyr': ## ## smiths |
| ``` r # Set seed for reproducibility set.seed(123) |
| image_data <- data.frame(matrix(rnorm(1000), nrow =
100)) # Mock image data image_data$label <- sample(c(“Class1”,
“Class2”), 100, replace = TRUE) # Mock labels |
| # Perform PCA pca_result <- prcomp(image_data[,
-which(names(image_data) == “label”)], center = TRUE, scale. = TRUE) #
Create a data frame with PCA results and labels image_data_pca <-
data.frame(pca_result\(x, label =
image_data\)label) |
| # Function to fit a neural network model and return
cross-validated accuracy fit_nn_model_cv <- function(hidden_neurons,
train_data, folds = 5) { # Define the control method for
cross-validation train_control <- trainControl(method = “cv”, number
= folds) |
| # Define the model formula formula <- label ~ . |
| # Fit the model with cross-validation nn_model_cv <-
train( formula, data = train_data, method = “nnet”, trace = FALSE,
linout = FALSE, maxit = 100, tuneGrid = expand.grid(size =
hidden_neurons, decay = 0.1), # Increased decay for regularization
trControl = train_control ) |
| # Extract cross-validated accuracy accuracy <-
max(nn_model_cv\(results\)Accuracy,
na.rm = TRUE) # Handle NA values |
| return(accuracy) } ``` |
r # List of hidden neuron counts neurons_list <- c(5, 10, 20) accuracy_results <- data.frame(Hidden_Neurons = neurons_list, Accuracy = NA) |
r # Fit models for (neurons in neurons_list) { accuracy <- fit_nn_model_cv(neurons, image_data_pca) accuracy_results[accuracy_results$Hidden_Neurons == neurons, "Accuracy"] <- accuracy } |
r # Print the results print(accuracy_results) |
## Hidden_Neurons Accuracy ## 1 5 0.5014536 ## 2 10 0.5210777 ## 3 20 0.5810276 |
r # Plot accuracy results ggplot(accuracy_results, aes(x = factor(Hidden_Neurons), y = Accuracy)) + geom_line(group = 1, color = "blue", size = 1.2) + geom_point(color = "red", size = 3) + labs(title = "Neural Network Accuracy by Hidden Neurons", x = "Number of Hidden Neurons", y = "Accuracy") + theme_minimal() |
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0. ## ℹ Please use `linewidth` instead. ## This warning is displayed once every 8 hours. ## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was ## generated. |
 |
r # Step 3: Enhanced plot of accuracy results if (!is.null(accuracy_results)) { ggplot(accuracy_results, aes(x = factor(Hidden_Neurons), y = Accuracy)) + geom_line(aes(group = 1), color = "darkorange", size = 1) + # Connect points with lines geom_point(color = "steelblue", size = 4) + # Add points at each accuracy value geom_text(aes(label = round(Accuracy, 3)), vjust = -0.5, size = 5) + # Add accuracy labels above points labs(title = "Neural Network Accuracy by Hidden Neurons", x = "Number of Hidden Neurons", y = "Accuracy") + theme_minimal() + theme(text = element_text(size = 12), # Increase text size for better readability plot.title = element_text(hjust = 0.5)) + # Center title scale_y_continuous(labels = scales::percent_format(accuracy = 0.01)) # Format y-axis as percentage if accuracy is in decimal } |
 |
LOGISTIC REGRESSION
# Load necessary libraries
library(caret)
library(nnet)
library(ggplot2)
library(imager)
# Function to load image data from the specified folder
load_image_data <- function(image_folder) {
categories <- list.dirs(image_folder, recursive = FALSE)
all_images <- list() # Initialize an empty list to store image data
labels <- c() # Initialize an empty vector to store labels
for (category in categories) {
label <- basename(category) # Get label from folder name
image_files <- list.files(category, full.names = TRUE) # List all image files
# Process each image file in the category
category_images <- lapply(image_files, function(x) {
img <- load.image(x) # Load the image
img <- resize(img, 128, 128) # Resize to 128x128
as.numeric(img) # Convert to numeric vector
})
# Store valid images and corresponding labels
valid_images <- Filter(Negate(is.null), category_images) # Remove NULLs (invalid images)
all_images <- c(all_images, valid_images)
labels <- c(labels, rep(label, length(valid_images)))
}
# Create a data frame for image data and labels
image_data <- data.frame(img_vector = I(all_images), label = labels) # I() to store lists
return(image_data)
}
# Function to flatten image vectors and prepare the dataset
prepare_image_data <- function(image_data) {
if (!("img_vector" %in% names(image_data) && "label" %in% names(image_data))) {
stop("image_data must contain 'img_vector' and 'label' columns.")
}
# Flatten image vectors into a matrix
img_matrix <- do.call(rbind, lapply(image_data$img_vector, as.vector))
# Create a data frame with the flattened image data and labels
image_data_flat <- data.frame(label = image_data$label, img_matrix)
# Ensure labels are factors
image_data_flat$label <- as.factor(image_data_flat$label)
return(image_data_flat)
}
# Function to normalize features and perform PCA
perform_pca <- function(image_data_flat, variance_threshold = 0.95) {
# Normalize the pixel data, excluding the label column
image_data_scaled <- scale(image_data_flat[, -1]) # Exclude the label column
# Perform PCA on scaled image data
pca_result <- prcomp(image_data_scaled, center = TRUE, scale. = TRUE)
# Determine number of principal components to retain specified variance
explained_variance <- summary(pca_result)$importance[3,]
num_components <- min(which(cumsum(explained_variance) >= variance_threshold))
# Create a new dataset with selected PCA components and labels
image_data_pca <- data.frame(pca_result$x[, 1:num_components])
image_data_pca$label <- image_data_flat$label
return(image_data_pca)
}
# Function to fit multinomial logistic regression model
fit_multinomial_logistic_regression <- function(image_data_pca) {
multinom_model <- multinom(label ~ ., data = image_data_pca)
return(multinom_model)
}
# Function to evaluate the model
evaluate_model <- function(model, image_data_pca) {
# Predict probabilities and class labels
predicted_probs <- predict(model, type = "prob")
predicted_classes <- predict(model)
# Create a confusion matrix and calculate accuracy
confusion_matrix <- table(Actual = image_data_pca$label, Predicted = predicted_classes)
accuracy <- sum(diag(confusion_matrix)) / sum(confusion_matrix)
# Output results
cat(sprintf("Logistic Regression Accuracy: %.4f\n", accuracy))
cat("Confusion Matrix:\n")
print(confusion_matrix)
}
# Main script
# Define the path to your images
image_folder <- "C:/Users/Muraa/Desktop/Natural images"
# Load the data
image_data <- load_image_data(image_folder)
# Step 1: Prepare dataset
image_data_flat <- prepare_image_data(image_data)
# Step 2: Perform PCA
image_data_pca <- perform_pca(image_data_flat)
# Step 3: Fit multinomial logistic regression model
multinom_model <- fit_multinomial_logistic_regression(image_data_pca)
## # weights: 25 (16 variable)
## initial value 402.359478
## iter 10 value 223.971861
## iter 20 value 183.385776
## iter 30 value 178.543429
## iter 40 value 178.345263
## iter 50 value 178.334769
## final value 178.329092
## converged
# Step 4: Evaluate model performance
evaluate_model(multinom_model, image_data_pca)
## Logistic Regression Accuracy: 0.7200
## Confusion Matrix:
## Predicted
## Actual Airplane Car Dog Fruit Motorbike
## Airplane 26 8 11 0 5
## Car 8 33 9 0 0
## Dog 9 12 26 1 2
## Fruit 0 0 0 50 0
## Motorbike 1 2 2 0 45
Step 5: Clustering Methods
Hierarchical Clustering with Dendrogram
# Load necessary libraries
library(ggplot2)
library(dendextend) # For enhanced dendrogram visualization
## Warning: package 'dendextend' was built under R version 4.3.3
##
## ---------------------
## Welcome to dendextend version 1.17.1
## Type citation('dendextend') for how to cite the package.
##
## Type browseVignettes(package = 'dendextend') for the package vignette.
## The github page is: https://github.com/talgalili/dendextend/
##
## Suggestions and bug-reports can be submitted at: https://github.com/talgalili/dendextend/issues
## You may ask questions at stackoverflow, use the r and dendextend tags:
## https://stackoverflow.com/questions/tagged/dendextend
##
## To suppress this message use: suppressPackageStartupMessages(library(dendextend))
## ---------------------
##
## Attaching package: 'dendextend'
## The following object is masked from 'package:EBImage':
##
## rotate
## The following object is masked from 'package:stats':
##
## cutree
library(ggdendro) # For ggplot-based dendrograms
## Warning: package 'ggdendro' was built under R version 4.3.3
##
## Attaching package: 'ggdendro'
## The following object is masked from 'package:dendextend':
##
## theme_dendro
## The following object is masked from 'package:imager':
##
## label
# Function to perform hierarchical clustering and plot dendrogram
perform_hierarchical_clustering <- function(image_data_pca, num_clusters = 3) {
# Compute the distance matrix excluding the label column
dist_matrix <- dist(image_data_pca[, -which(names(image_data_pca) == "label")])
# Perform hierarchical clustering
hclust_result <- hclust(dist_matrix)
# Convert to a dendrogram
dendro_data <- as.dendrogram(hclust_result)
# Set cluster assignments
image_data_pca$hclust_cluster <- cutree(hclust_result, k = num_clusters) # Define number of clusters
# Plotting the dendrogram
plot_dendrogram(dendro_data, num_clusters)
# View the first few rows with cluster assignments
return(head(image_data_pca))
}
# Function to plot the dendrogram using ggplot
plot_dendrogram <- function(dendro_data, num_clusters) {
# Convert the dendrogram into a tidy data frame for ggplot
dendro_data_df <- dendro_data %>%
ggdendro::dendro_data() %>%
ggdendro::segment() %>%
ggplot(aes(x = x, y = y)) +
geom_segment(aes(xend = xend, yend = yend), color = "steelblue") +
geom_hline(yintercept = 0, linetype = "dashed") +
labs(title = "Hierarchical Clustering Dendrogram",
subtitle = paste("Cutting the dendrogram into", num_clusters, "clusters"),
x = "Cluster Indices",
y = "Height") +
theme_minimal() +
theme(axis.text.x = element_blank(),
axis.ticks.x = element_blank())
print(dendro_data_df)
}
# Execute the clustering process and plot the dendrogram
cluster_results <- perform_hierarchical_clustering(image_data_pca, num_clusters = 3)

# Display the results
print(cluster_results)
## PC1 PC2 PC3 label hclust_cluster
## 1 -25.98419 -75.822550 44.91887 Airplane 1
## 2 -85.59935 43.984769 -31.86969 Airplane 1
## 3 98.03365 31.501059 13.10570 Airplane 2
## 4 16.95778 -65.535123 57.88321 Airplane 1
## 5 -45.91266 -96.752360 53.36170 Airplane 1
## 6 143.92170 -2.879701 47.57098 Airplane 2
Step 6: K-means Clustering
K-means Clustering Function
# Load necessary libraries
library(ggplot2)
library(factoextra) # For clustering visualization
## Warning: package 'factoextra' was built under R version 4.3.3
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(pheatmap) # For heatmap visualization
## Warning: package 'pheatmap' was built under R version 4.3.3
library(caret) # For trainControl and cross-validation
perform_kmeans_clustering <- function(image_data_pca, num_clusters = 4) {
set.seed(123) # For reproducibility
# Perform K-means clustering
kmeans_result <- kmeans(image_data_pca[, -which(names(image_data_pca) == "label")], centers = num_clusters, nstart = 10)
# Assign clusters to the dataset
image_data_pca$kmeans_cluster <- as.factor(kmeans_result$cluster)
return(image_data_pca)
}
## Visualization of K-means Clustering
plot_kmeans_results <- function(image_data_pca) {
ggplot(image_data_pca, aes(x = PC1, y = PC2, color = kmeans_cluster)) +
geom_point(alpha = 0.6, size = 2) +
labs(title = "K-means Clustering of Image Data",
subtitle = "Clusters based on the first two Principal Components",
x = "Principal Component 1",
y = "Principal Component 2") +
scale_color_brewer(palette = "Set1") + # Better color palette
theme_minimal() +
theme(legend.title = element_blank(),
plot.title = element_text(hjust = 0.5, size = 16),
plot.subtitle = element_text(hjust = 0.5, size = 14))
}
## Elbow Method to Determine Optimal K
elbow_method <- function(image_data_pca, max_k = 10) {
wss <- sapply(1:max_k, function(k) {
kmeans(image_data_pca[, -which(names(image_data_pca) == "label")], centers = k, nstart = 10)$tot.withinss
})
ggplot(data.frame(Clusters = 1:max_k, WSS = wss), aes(x = Clusters, y = WSS)) +
geom_line() +
geom_point(size = 3) +
labs(title = "Elbow Method for Optimal K",
x = "Number of Clusters (K)",
y = "Total Within-cluster SS") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5, size = 16))
}
## Confusion Matrix Heatmap
plot_confusion_matrix_heatmap <- function(confusion_matrix) {
# Convert confusion matrix to data frame
confusion_matrix_df <- as.data.frame.matrix(confusion_matrix)
pheatmap(confusion_matrix_df, cluster_rows = FALSE, cluster_cols = FALSE,
display_numbers = TRUE, fontsize_number = 10,
main = "Confusion Matrix Heatmap",
color = colorRampPalette(c("white", "blue"))(50))
}
# Main Execution
# Step 1: Perform K-means clustering
image_data_pca <- perform_kmeans_clustering(image_data_pca, num_clusters = 4)
# Step 2: Plot K-means results
plot_kmeans_results(image_data_pca)

# Step 3: Elbow Method Plot
elbow_method(image_data_pca)

# Step 4: 10-fold Cross-Validation
set.seed(123)
train_control <- trainControl(method = "cv", number = 10)
cv_model <- train(label ~ ., data = image_data_pca, method = "multinom", trControl = train_control)
## # weights: 40 (28 variable)
## initial value 362.123530
## iter 10 value 205.699255
## iter 20 value 158.579174
## iter 30 value 150.500408
## iter 40 value 150.361001
## iter 50 value 150.353042
## iter 60 value 150.349010
## iter 70 value 150.348672
## final value 150.348610
## converged
## # weights: 40 (28 variable)
## initial value 362.123530
## iter 10 value 205.699464
## iter 20 value 163.613312
## iter 30 value 157.960438
## iter 40 value 157.937650
## final value 157.937638
## converged
## # weights: 40 (28 variable)
## initial value 362.123530
## iter 10 value 205.699255
## iter 20 value 158.587272
## iter 30 value 150.538102
## iter 40 value 150.405121
## iter 50 value 150.397512
## iter 60 value 150.393141
## iter 70 value 150.393039
## final value 150.393001
## converged
## # weights: 40 (28 variable)
## initial value 362.123530
## iter 10 value 206.015922
## iter 20 value 160.903551
## iter 30 value 149.798402
## iter 40 value 149.543288
## iter 50 value 149.524953
## iter 60 value 149.521134
## iter 70 value 149.520822
## iter 80 value 149.520763
## iter 80 value 149.520763
## iter 80 value 149.520763
## final value 149.520763
## converged
## # weights: 40 (28 variable)
## initial value 362.123530
## iter 10 value 206.016121
## iter 20 value 165.291912
## iter 30 value 156.739884
## iter 40 value 156.713740
## final value 156.713707
## converged
## # weights: 40 (28 variable)
## initial value 362.123530
## iter 10 value 206.015923
## iter 20 value 160.910594
## iter 30 value 149.826034
## iter 40 value 149.579237
## iter 50 value 149.562077
## iter 60 value 149.558648
## iter 70 value 149.558528
## final value 149.558485
## converged
## # weights: 40 (28 variable)
## initial value 362.123530
## iter 10 value 204.083078
## iter 20 value 161.414141
## iter 30 value 151.016276
## iter 40 value 150.522852
## iter 50 value 150.516247
## iter 60 value 150.511565
## iter 70 value 150.510860
## iter 70 value 150.510859
## iter 70 value 150.510859
## final value 150.510859
## converged
## # weights: 40 (28 variable)
## initial value 362.123530
## iter 10 value 204.083291
## iter 20 value 164.879933
## iter 30 value 157.355750
## iter 40 value 157.336374
## final value 157.336326
## converged
## # weights: 40 (28 variable)
## initial value 362.123530
## iter 10 value 204.083078
## iter 20 value 161.420369
## iter 30 value 151.032234
## iter 40 value 150.553062
## iter 50 value 150.547533
## iter 60 value 150.544715
## iter 70 value 150.544317
## final value 150.544289
## converged
## # weights: 40 (28 variable)
## initial value 362.123530
## iter 10 value 207.816674
## iter 20 value 156.175603
## iter 30 value 148.399661
## iter 40 value 147.617500
## iter 50 value 147.607126
## final value 147.607082
## converged
## # weights: 40 (28 variable)
## initial value 362.123530
## iter 10 value 207.816951
## iter 20 value 160.516147
## iter 30 value 155.562726
## iter 40 value 155.508954
## final value 155.508355
## converged
## # weights: 40 (28 variable)
## initial value 362.123530
## iter 10 value 207.816675
## iter 20 value 156.182352
## iter 30 value 148.476389
## iter 40 value 147.939378
## iter 50 value 147.910329
## iter 60 value 147.889658
## iter 70 value 147.885183
## iter 80 value 147.880338
## iter 90 value 147.833065
## iter 100 value 147.822482
## final value 147.822482
## stopped after 100 iterations
## # weights: 40 (28 variable)
## initial value 362.123530
## iter 10 value 208.950401
## iter 20 value 165.889984
## iter 30 value 154.972882
## iter 40 value 154.606592
## iter 50 value 154.596883
## iter 60 value 154.591834
## final value 154.591718
## converged
## # weights: 40 (28 variable)
## initial value 362.123530
## iter 10 value 208.950582
## iter 20 value 171.833651
## iter 30 value 161.939367
## iter 40 value 161.904288
## final value 161.904257
## converged
## # weights: 40 (28 variable)
## initial value 362.123530
## iter 10 value 208.950401
## iter 20 value 165.897592
## iter 30 value 154.995190
## iter 40 value 154.640109
## iter 50 value 154.631114
## iter 60 value 154.627052
## iter 70 value 154.626935
## final value 154.626889
## converged
## # weights: 40 (28 variable)
## initial value 362.123530
## iter 10 value 273.377594
## iter 20 value 154.503497
## iter 30 value 150.071246
## iter 40 value 149.854728
## iter 50 value 149.644005
## iter 60 value 149.390183
## iter 70 value 149.276847
## iter 80 value 149.196467
## iter 90 value 148.993347
## iter 100 value 148.899305
## final value 148.899305
## stopped after 100 iterations
## # weights: 40 (28 variable)
## initial value 362.123530
## iter 10 value 273.381478
## iter 20 value 165.195906
## iter 30 value 158.010561
## iter 40 value 157.327974
## final value 157.327942
## converged
## # weights: 40 (28 variable)
## initial value 362.123530
## iter 10 value 273.377598
## iter 20 value 154.509309
## iter 30 value 150.094808
## iter 40 value 149.889139
## iter 50 value 149.722670
## iter 60 value 149.586380
## iter 70 value 149.585847
## iter 80 value 149.552571
## iter 90 value 149.514093
## iter 100 value 149.498969
## final value 149.498969
## stopped after 100 iterations
## # weights: 40 (28 variable)
## initial value 362.123530
## iter 10 value 205.901862
## iter 20 value 159.077492
## iter 30 value 149.903057
## iter 40 value 149.664179
## iter 50 value 149.658666
## iter 60 value 149.654144
## iter 70 value 149.653982
## iter 70 value 149.653982
## final value 149.653962
## converged
## # weights: 40 (28 variable)
## initial value 362.123530
## iter 10 value 205.902140
## iter 20 value 163.131946
## iter 30 value 156.982836
## iter 40 value 156.958111
## final value 156.958068
## converged
## # weights: 40 (28 variable)
## initial value 362.123530
## iter 10 value 205.901862
## iter 20 value 159.083583
## iter 30 value 149.941587
## iter 40 value 149.712463
## iter 50 value 149.708971
## iter 60 value 149.705169
## iter 70 value 149.704834
## final value 149.704807
## converged
## # weights: 40 (28 variable)
## initial value 362.123530
## iter 10 value 208.290842
## iter 20 value 164.697454
## iter 30 value 155.874611
## iter 40 value 155.564589
## iter 50 value 155.557506
## iter 60 value 155.549277
## iter 70 value 155.548896
## final value 155.548812
## converged
## # weights: 40 (28 variable)
## initial value 362.123530
## iter 10 value 208.291032
## iter 20 value 168.887537
## iter 30 value 162.644156
## iter 40 value 162.608354
## final value 162.608280
## converged
## # weights: 40 (28 variable)
## initial value 362.123530
## iter 10 value 208.290842
## iter 20 value 164.703818
## iter 30 value 155.899463
## iter 40 value 155.601733
## iter 50 value 155.595107
## iter 60 value 155.588556
## iter 70 value 155.588332
## final value 155.588326
## converged
## # weights: 40 (28 variable)
## initial value 362.123530
## iter 10 value 204.725464
## iter 20 value 159.922796
## iter 30 value 151.416306
## iter 40 value 151.250656
## iter 50 value 151.236301
## iter 60 value 151.233046
## iter 70 value 151.232541
## iter 80 value 151.232499
## iter 80 value 151.232497
## iter 80 value 151.232497
## final value 151.232497
## converged
## # weights: 40 (28 variable)
## initial value 362.123530
## iter 10 value 204.725650
## iter 20 value 164.406005
## iter 30 value 158.249306
## iter 40 value 158.212989
## final value 158.212945
## converged
## # weights: 40 (28 variable)
## initial value 362.123530
## iter 10 value 204.725464
## iter 20 value 159.930114
## iter 30 value 151.446549
## iter 40 value 151.287163
## iter 50 value 151.274238
## iter 60 value 151.271442
## iter 70 value 151.271206
## iter 70 value 151.271205
## iter 70 value 151.271204
## final value 151.271204
## converged
## # weights: 40 (28 variable)
## initial value 362.123530
## iter 10 value 202.685752
## iter 20 value 156.256890
## iter 30 value 145.851507
## iter 40 value 145.555753
## iter 50 value 145.545695
## iter 60 value 145.542729
## iter 70 value 145.542123
## final value 145.542083
## converged
## # weights: 40 (28 variable)
## initial value 362.123530
## iter 10 value 202.685928
## iter 20 value 162.211800
## iter 30 value 154.572784
## iter 40 value 154.532595
## final value 154.532363
## converged
## # weights: 40 (28 variable)
## initial value 362.123530
## iter 10 value 202.685752
## iter 20 value 156.267751
## iter 30 value 145.914969
## iter 40 value 145.645987
## iter 50 value 145.637014
## iter 60 value 145.615205
## iter 70 value 145.614604
## iter 80 value 145.610423
## iter 90 value 145.605873
## iter 100 value 145.599049
## final value 145.599049
## stopped after 100 iterations
## # weights: 40 (28 variable)
## initial value 402.359478
## iter 10 value 223.959609
## iter 20 value 184.504570
## iter 30 value 175.856370
## iter 40 value 175.823738
## final value 175.823734
## converged
# Step 5: Plot Confusion Matrix Heatmap
confusion_matrix <- table(Actual = image_data_pca$label, Predicted = image_data_pca$kmeans_cluster) # Create confusion matrix
plot_confusion_matrix_heatmap(confusion_matrix)

# Display Cross-Validation Results
print(cv_model)
## Penalized Multinomial Regression
##
## 250 samples
## 4 predictor
## 5 classes: 'Airplane', 'Car', 'Dog', 'Fruit', 'Motorbike'
##
## No pre-processing
## Resampling: Cross-Validated (10 fold)
## Summary of sample sizes: 225, 225, 225, 225, 225, 225, ...
## Resampling results across tuning parameters:
##
## decay Accuracy Kappa
## 0e+00 0.680 0.600
## 1e-04 0.680 0.600
## 1e-01 0.692 0.615
##
## Accuracy was used to select the optimal model using the largest value.
## The final value used for the model was decay = 0.1.
# Load necessary libraries
library(ggplot2)
library(Rtsne)
## Warning: package 'Rtsne' was built under R version 4.3.3
library(nnet)
library(caret)
# Function to perform t-SNE and visualize clusters
perform_tsne_visualization <- function(image_data_pca) {
# Apply t-SNE to reduce dimensions to 2
tsne_result <- Rtsne(image_data_pca[, -which(names(image_data_pca) == "label")], dims = 2, pca = TRUE, perplexity = 30)
# Add t-SNE results to the dataset
image_data_pca$tsne1 <- tsne_result$Y[, 1]
image_data_pca$tsne2 <- tsne_result$Y[, 2]
# Plot t-SNE clusters with names instead of numbers
ggplot(image_data_pca, aes(x = tsne1, y = tsne2, color = as.factor(label))) + # Change color to 'label'
geom_point(alpha = 0.6, size = 2) +
labs(title = "t-SNE Clustering Visualization",
x = "t-SNE 1",
y = "t-SNE 2",
color = "Class Label") + # Add legend title for color
scale_color_brewer(palette = "Set1") + # Color palette for clusters
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5, size = 16))
}
# Function to fit a neural network model
fit_neural_network <- function(image_data_pca) {
nn_model <- nnet(label ~ ., data = image_data_pca, size = 10, maxit = 200, trace = FALSE)
return(nn_model)
}
# Function to evaluate the neural network model
evaluate_nn_model <- function(nn_model, image_data_pca) {
predicted_nn <- predict(nn_model, image_data_pca, type = "class")
nn_confusion_matrix <- table(Actual = image_data_pca$label, Predicted = predicted_nn)
nn_accuracy <- sum(diag(nn_confusion_matrix)) / sum(nn_confusion_matrix)
# Output results
cat(sprintf("Neural Network Accuracy: %.4f\n", nn_accuracy))
return(nn_confusion_matrix)
}
# Function to extract and evaluate model importance
evaluate_importance <- function(cv_model) {
importance <- varImp(cv_model, scale = FALSE)
print(importance)
return(importance)
}
Main Execution
# Step 1: t-SNE Visualization
perform_tsne_visualization(image_data_pca)

# Step 2: Fit Neural Network Model
nn_model <- fit_neural_network(image_data_pca)
# Step 3: Evaluate Neural Network Model
nn_confusion_matrix <- evaluate_nn_model(nn_model, image_data_pca)
## Neural Network Accuracy: 0.8000
# Step 4: Coefficients from Multinomial Model for Interpretation
coefficients <- coef(multinom_model)
print("Multinomial Model Coefficients:")
## [1] "Multinomial Model Coefficients:"
print(coefficients)
## (Intercept) PC1 PC2 PC3
## Car -1.26572499 0.015218131 -0.01630593 -0.017713238
## Dog -0.08859595 0.007223894 0.01591797 -0.002352345
## Fruit -12.00860448 -0.043790260 0.18121794 0.016457060
## Motorbike -1.94795949 -0.016453085 -0.01427359 -0.033312564
# Step 5: Evaluate Variable Importance
importance <- evaluate_importance(cv_model)
## multinom variable importance
##
## Overall
## kmeans_cluster3 5.21471
## kmeans_cluster4 4.46947
## kmeans_cluster2 1.06099
## PC2 0.12971
## PC3 0.05895
## PC1 0.05620