Predicting Blood Glucose Ranges with the Sequential Mannequin

Michael Grogan (MGCodesandStats)

With the appearance of TensorFlow 2.Zero, Keras is now the default API for this model. Keras is used to construct neural networks for deep studying functions. As such, Keras is a extremely great tool for conducting evaluation of enormous datasets.

Nevertheless, did you realise that the Keras API will also be run in R?

On this instance, Keras is used to generate a neural community — with the intention of fixing a regression downside in R.

Particularly, the Pima Indians Diabetes dataset is used in an effort to predict blood glucose ranges for sufferers utilizing the related options.

On this regard, this text supplies an summary of:

  • Function choice strategies in R
  • How you can outline a Sequential mannequin in Keras
  • Strategies to validate and check mannequin predictions

The Pima Indians Diabetes dataset is partitioned into three separate datasets for this instance.

Coaching and validation: pima-indians-diabetes1.csv. 80% of the unique dataset is break up from the total dataset. In flip, 70% of this dataset is used for coaching the mannequin, and the remaining 30% is used for validating the predictions.

Check: pima-indians-diabetes2.csv and pima-indians-diabetes3.csv. The remaining 20% of the unique dataset is used as unseen information, to find out whether or not the predictions being yielded by the mannequin would carry out properly when coping with fully new information. pima-indians-diabetes2 accommodates the options (or unbiased variables), whereas pima-indians-diabetes3 accommodates the dependent variable (blood glucose ranges).

The aim of characteristic choice is to find out these options which have essentially the most affect on the dependent variable.

In our instance, there are eight options — some shall be extra necessary than others in figuring out blood glucose ranges.

The 2 characteristic choice strategies used listed here are:

  • Correlation plots
  • A number of Linear Regression

Correlation plots permit us to visually decide:

  1. Options which can be extremely correlated with the dependent variable
  2. Options which can be extremely correlated with one another

If sure options are extremely correlated with blood glucose ranges, then this is a sign that these options are necessary in predicting the identical. Options with low correlation are indicated to be insignificant.

Nevertheless, options which can be extremely correlated with one another would point out that a few of these options are redundant (since they’re in impact trying to elucidate the identical factor).

Right here is the primary correlation plot:

M <- cor(diabetes1)
corrplot(M, technique = "circle")

We are able to see that the Insulin and Final result variables are notably correlated with the Glucose variable, whereas there’s additionally correlation between Age and Pregnancies and Insulin and Pores and skin Thickness.

Nevertheless, we will go into extra element and acquire particular correlation coefficients for every characteristic:

corrplot(M, technique = "quantity")

The aim of a a number of linear regression is to:

  1. Decide the scale and nature of the coefficient for every characteristic in explaining the dependent variable.
  2. Decide the importance or insignificance of every characteristic.

Listed here are the outcomes for the linear regression:

lm(method = Glucose ~ Pregnancies + Final result + Age + DiabetesPedigreeFunction +
BMI + Insulin + SkinThickness + BloodPressure, information = diabetes1)

On the 5% degree, Final result, Age, Insulin and Pores and skin Thickness are deemed vital. Different options are deemed insignificant on the 5% degree.

It’s not deemed essential to run a proper check for multicollinearity on this occasion, because the correlation plots point out options which can be extremely correlated with one another.

Nevertheless, heteroscedasticity (uneven variance throughout normal errors) could possibly be current, e.g. as a result of differing age throughout sufferers. With a purpose to check this, the Breusch-Pagan check is run — with a p-value under Zero.05 indicating the presence of heteroscedasticity.

> bptest(match)

As heteroscedasticity is indicated to be current, a sturdy regression is run — particularly utilizing Huber weights. The aim of that is to position much less worth on the outliers current within the dataset.

> # Huber Weights (Sturdy Regression)
> abstract(rr.huber <- rlm(Glucose ~ Pregnancies + Final result + Age + DiabetesPedigreeFunction + BMI + Insulin + SkinThickness + BloodPressure, information=diabetes1))

On 590 levels of freedom, the two-tailed t vital worth is as follows:

> abs(qt(Zero.05/2, 590))
[1] 1.963993

When the t statistic > t vital worth, the null speculation is rejected. On this regard, Final result, Age, BMI, Insulin, and Pores and skin Thickness have an absolute t-value larger than the vital worth.

Taking the findings of each the correlation plots and a number of linear regression under consideration, Final result, Age, Insulin and Pores and skin Thickness are chosen because the related options for the evaluation.

Now that the related options have been chosen, the neural community may be constructed. Earlier than doing so:

  1. Max-Min Normalization is used to scale every variable between Zero and 1. That is to make sure a standard scale among the many variables in order that the neural community can interpret them correctly.
normalize <- perform(x) 
return ((x - min(x)) / (max(x) - min(x)))
  1. The train-validation set is break up 70/30.
ind <- pattern(2, nrow(maxmindf), exchange=TRUE, prob = c(Zero.7,Zero.Three))

Now, the Sequential mannequin is outlined. The 4 enter options (Final result, Age, Insulin, Pores and skin Thickness) are included within the enter layer. One hidden layer is outlined, and a linear output layer is outlined.

mannequin <- keras_model_sequential() 
mannequin %>%
layer_dense(items = 12, activation = 'relu', kernel_initializer='RandomNormal', input_shape = c(four)) %>%
layer_dense(items = eight, activation = 'relu') %>%
layer_dense(items = 1, activation = 'linear')

Right here is the output:

Mannequin: "sequential"
Layer (sort) Output Form Param #
dense (Dense) (None, 12) 60
dense_1 (Dense) (None, eight) 104
dense_2 (Dense) (None, 1) 9
Whole params: 173
Trainable params: 173
Non-trainable params: Zero

The mannequin is now educated over 30 epochs, and evaluated primarily based on its loss and imply absolute error. Provided that the dependent variable is the interval, the imply squared error is used to find out the deviation between the predictions and precise values.

mannequin %>% compile(
loss = 'mean_squared_error',
optimizer = 'adam',
metrics = c('mae')

The anticipated and precise values are scaled again to their authentic codecs:

mannequin %>% consider(X_val, y_val)
pred <- information.body(y = predict(mannequin, as.matrix(X_val)))
predicted=pred$y * abs(diff(vary(df$Glucose))) + min(df$Glucose)
precise=y_val * abs(diff(vary(df$Glucose))) + min(df$Glucose)

Right here is the output:


Here’s a plot of the loss and imply absolute error:

The mannequin yields a lack of simply above 2% and a imply absolute error of simply above 12%.

The imply proportion error can be calculated:


The MPE is calculated as being just below four%:


Though the mannequin has proven robust predictive energy, our work will not be completed but.

Whereas the mannequin has carried out properly on the validation information, we now must assess whether or not the mannequin can even carry out properly on fully unseen information.

The characteristic variables are loaded from pima-indians-diabetes2, and max0min normalization is invoked as soon as once more:

normalize <- perform(x) 
return ((x - min(x)) / (max(x) - min(x)))

Utilizing the predict perform in R, predictions are generated for the Glucose variable:

pred_test <- information.body(y = predict(mannequin, as.matrix(maxmindf2)))
predicted_test = pred_test$y * abs(diff(vary(diabetes1$Glucose))) + min(diabetes1$Glucose)

The anticipated values are then in comparison with the precise values in pima-indians-diabetes3:

actual_test = diabetes3$Glucose

Now, the imply proportion error is calculated utilizing the check values:


A imply proportion error of just below 7% is calculated:


It’s noticed that whereas the imply proportion error is barely increased than that calculated utilizing the coaching and validation information, the mannequin nonetheless performs properly in predicting blood glucose ranges throughout unseen observations on the check set.

On this instance, we’ve seen:

  • How you can implement characteristic choice strategies in R
  • Assemble a neural community to analyse regression information utilizing the Keras API
  • Gauge prediction accuracy utilizing check information

Many thanks in your time! You may as well view the total GitHub repository for this instance right here, and be happy to take a look at different machine studying examples at

Leave a Reply

Your email address will not be published. Required fields are marked *