library(ggplot2) library(dplyr) library(neuralnet) library(plotly)
haberman <- read.csv(“C:/Users/ASUS/Desktop/haberman.csv”, header = FALSE, col.names = c(“Age”, “Op_year”, “Axil_nodes”, “Surv_status”))
haberman <- haberman %>% mutate(Age = as.numeric(Age), Op_year = as.numeric(Op_year), Axil_nodes = as.numeric(Axil_nodes), Surv_status = as.factor(Surv_status)) sum(is.na(haberman))
haberman <- haberman[complete.cases(haberman), ]
summary(haberman)
ggplot(haberman, aes(x = Age)) + geom_histogram(binwidth = 5, fill = “pink”, color = “white”) + labs(title = “Age Distribution”, x = “Age”, y = “Frequency”)
ggplot(haberman, aes(x = Axil_nodes)) + geom_histogram(binwidth = 5, fill = “blue”, color = “white”) + labs(title = “Axillary Nodes Distribution”, x = “Number of Nodes”, y = “Frequency”)
ggplot(haberman, aes(x = as.factor(Op_year))) + geom_bar(fill = “red”, color = “white”) + labs(title = “Operation Year Distribution”, x = “Year of Operation”, y = “Frequency”)
ggplot(haberman, aes(x = Surv_status)) + geom_bar(fill = “green”, color = “white”) + labs(title = “Survival Status Distribution”, x = “Survival Status”, y = “Frequency”)
pairs(haberman[,1:3], col = ifelse(haberman$Surv_status == 1, “purple”, “yellow”), main = “Pairwise Scatter Plots”, pch = 19)
3 PREPROCESSING THE DATA
normalize <- function(x) {
return ((x - min(x)) / (max(x) - min(x)))
}
haberman_norm <- as.data.frame(lapply(haberman[,1:3], normalize)) haberman_norm\(Surv_status <- as.numeric(haberman\)Surv_status) - 1
sum(is.na(haberman_norm))
haberman_norm <- haberman_norm[complete.cases(haberman_norm), ]
4 Model Selection
library(neuralnet)
set.seed(123) index <- sample(1:nrow(haberman_norm), round(0.80 * nrow(haberman_norm))) trainset <- haberman_norm[index,] testset <- haberman_norm[-index,]
nn <- neuralnet(Surv_status ~ Age + Op_year + Axil_nodes, data = trainset, hidden = 3, linear.output = FALSE, act.fct = “tanh”, err.fct = “ce”, likelihood = TRUE)
plot(nn)
5 Performance Evaluation
predicted <- compute(nn, testset[,1:3])$net.result predicted <- ifelse(predicted > 0.5, 1, 0)
predicted <- factor(predicted, levels = c(0, 1))
confusion_matrix <- table(predicted, testset$Surv_status) print(confusion_matrix)
accuracy <- sum(diag(confusion_matrix)) / sum(confusion_matrix) print(paste(“Accuracy:”, round(accuracy, 2)))
mse <- mean((as.numeric(predicted) - 1 - testset$Surv_status)^2) print(paste(“MSE:”, round(mse, 2)))