’’’{r} # packages library(dplyr) library(caret) # For data splitting library(data.table) # For one-hot encoding library(scales) # For Min-Max scaling
data <- read.csv(“C:\Users\William\OneDrive - Northeastern University\College\4th Year\Spring\DS4420\Lab1\pokedata_num.csv”) head(X)
X <- data %>% select(-c(hp, pokedex, name))
y <- data$hp
X_scaled <- as.data.frame(scale(X))
X_scaled[“bias”] = 1 X_scaled
set.seed(42) train_indices <- createDataPartition(y, p = 0.75, list = FALSE) X_train <- X_scaled[train_indices, ] X_test <- X_scaled[-train_indices, ] y_train <- y[train_indices] y_test <- y[-train_indices]
X_train y_train
X_test y_test
set.seed(123) W1 <- matrix(rnorm(7 * 10), nrow = 7, ncol = hidden_nodes) W2 <- matrix(rnorm(10 * 1), nrow = hidden_nodes, ncol = 1)
errors <- numeric() epochs <- 500
relu <- function(x) { matrix(pmax(0, x)) }
for (epoch in 1:epochs) { # calculating the hidden layer and passing
through relu
h_mul <- X_train %*% W1 h <- relu(h_mul)
# predicting y from multiplying h1 with W2 pred_y <- h1 %*% W2 error <- pred_y - y_train
# cacluating mse mse <- mean(error^2) errors[epoch] <- mse
# backpropagating d_W2 <- (2 / n) * t(h) %% error mat1 <-
ifelse(h > 0, 1, 0)
error_term <- error t(W2) * mat1 d_W1 <- (2 / n) *
t(X_train) %*% error_term
W2 <- W2 - eta * d_W2 W1 <- W1 - eta * d_W1 }
plot(1:epochs, errors, type = “l”, main = “Error over Epochs”, xlab = “Epochs”, ylab = “Error”) ’’’