class_docstr: Bayesian regression model. If poly_degree is specified the features will
  be transformed to with a polynomial basis function, which allows for polynomial
  regression. Assumes Normal prior and likelihood for the weights and scaled inverse
  chi-squared prior and likelihood for the variance of the weights.
  
  Parameters:
  -----------
  n_draws: float
      The number of simulated draws from the posterior of the parameters.
  mu0: array
      The mean values of the prior Normal distribution of the parameters.
  omega0: array
      The precision matrix of the prior Normal distribution of the parameters.
  nu0: float
      The degrees of freedom of the prior scaled inverse chi squared distribution.
  sigma_sq0: float
      The scale parameter of the prior scaled inverse chi squared distribution.
  poly_degree: int
      The polynomial degree that the features should be transformed to. Allows
      for polynomial regression.
  cred_int: float
      The credible interval (ETI in this impl.). 95 => 95% credible interval of the posterior
      of the parameters.
  
  Reference:
      https://github.com/mattiasvillani/BayesLearnCourse/raw/master/Slides/BayesLearnL5.pdf
code: def predict(self, X, eti=False):
      # If polynomial transformation
      if self.poly_degree:
          X = polynomial_features(X, degree=self.poly_degree)
  
      y_pred = X.dot(self.w)
      # If the lower and upper boundaries for the 95%
      # equal tail interval should be returned
      if eti:
          lower_w = self.eti[:, 0]
          upper_w = self.eti[:, 1]
          y_lower_pred = X.dot(lower_w)
          y_upper_pred = X.dot(upper_w)
          return y_pred, y_lower_pred, y_upper_pred
  
      return y_pred
  
file_path: ML-From-Scratch/mlfromscratch/supervised_learning/bayesian_regression.py
imports: from __future__ import print_function, division
  import numpy
  from scipy.stats import chi2, multivariate_normal
  from mlfromscratch.utils import mean_squared_error, train_test_split, polynomial_features
label_desc: Use image node_id 4 for calling the BayesianRegression obj's underlying member method code with example usage: obj.predict(X, eti) and returns: y_pred, y_pred,  y_lower_pred,  y_upper_pred