Advertisement
Guest User

Untitled

a guest
Jun 18th, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.05 KB | None | 0 0
  1. library(keras)
  2. library(tibble)
  3. # Data
  4. boston_housing <- dataset_boston_housing()
  5.  
  6. c(train_data, train_labels) %<-% boston_housing$train
  7. c(test_data, test_labels) %<-% boston_housing$test
  8. paste0("Training entries: ", length(train_data), ", labels: ", length(train_labels))
  9. train_data[1, ] # Display sample features, notice the different scales
  10.  
  11. column_names <- c('CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE',
  12. 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT')
  13. train_df <- as_tibble(train_data)
  14. colnames(train_df) <- column_names
  15. train_df
  16. train_labels[1:10] # Display first 10 entries
  17.  
  18.  
  19. ############################################
  20. # Feature engineering
  21.  
  22. # Test data is *not* used when calculating the mean and std.
  23. # Normalize training data
  24. train_data <- scale(train_data)
  25.  
  26. # Use means and standard deviations from training set to normalize test set
  27. col_means_train <- attr(train_data, "scaled:center")
  28. col_stddevs_train <- attr(train_data, "scaled:scale")
  29. test_data <- scale(test_data, center = col_means_train, scale = col_stddevs_train)
  30.  
  31. train_data[1, ] # First training sample, normalized
  32.  
  33. ######################################
  34. # OLS
  35. olstrain = data.frame(cbind(train_labels, train_data))
  36. olstest = data.frame(cbind(test_labels, test_data))
  37. colnames(olstrain) = c('y', 'CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE',
  38. 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT')
  39. colnames(olstest) = c('y', 'CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE',
  40. 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT')
  41. ols = lm(y~.,data=olstrain)
  42. summary(ols)
  43. olspred = predict(ols, newdata=olstest)
  44.  
  45. library(Metrics)
  46. mae(test_labels, olspred)
  47.  
  48. ##################################
  49. # Keras
  50.  
  51. #lrate=0.02
  52. lrate=0.1
  53.  
  54. # OLS-like results are sensitive to choice of LR and EPOCHS (both must match)
  55.  
  56. epochs = 100
  57. build_model <- function() {
  58. model <- keras_model_sequential() %>%
  59.  
  60. # OLSisch
  61. layer_dense(units = 1, input_shape = dim(train_data)[2])
  62.  
  63. # Simple NN
  64. #layer_dense(units = 64, activation = "relu", input_shape = dim(train_data)[2]) %>%
  65. #layer_dense(units = 1)
  66.  
  67. model %>% compile(
  68. loss = "mse",
  69. optimizer = optimizer_rmsprop(lr=lrate),
  70. metrics = list("mean_absolute_error")
  71. )
  72.  
  73. model
  74. }
  75.  
  76. model <- build_model()
  77. #model %>% summary()
  78.  
  79. # Fit the model and store training stats
  80. history <- model %>% fit(
  81. train_data,
  82. train_labels,
  83. epochs = epochs,
  84. validation_split = 0.2,
  85. verbose = 1
  86. )
  87.  
  88. c(loss, kmae) %<-% (model %>% evaluate(test_data, test_labels, verbose = 0))
  89.  
  90. print("======================================================")
  91. print(paste0("Learning rate: ", lrate))
  92. print(paste0("Keras: Mean absolute error on test set: $", sprintf("%.2f", kmae*1000)))
  93. print(paste0("Keras mean val_mae: $", sprintf("%.2f", mean(history$metrics$val_mean_absolute_error[30:100])*1000)))
  94. print(paste0("O L S: Mean absolute error on test set: $", sprintf("%.2f", mae(test_labels, olspred)*1000)))
  95. print(paste0("Diff. : $", sprintf("%.2f", kmae*1000 - mae(test_labels, olspred)*1000)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement