class_docstr: Similar to regular ridge regression except that the data is transformed to allow
  for polynomial regression.
  Parameters:
  -----------
  degree: int
      The degree of the polynomial that the independent variable X will be transformed to.
  reg_factor: float
      The factor that will determine the amount of regularization and feature
      shrinkage. 
  n_iterations: float
      The number of training iterations the algorithm will tune the weights for.
  learning_rate: float
      The step length that will be used when updating the weights.
class_docstr_tok: ["Similar","to","regular","ridge","regression","except","that","the","data","is","transformed","to","allow","for","polynomial","regression",".","Parameters",":","--","--","--","--","--","-","degree",":","int","The","degree","of","the","polynomial","that","the","independent","variable","X","will","be","transformed","to",".","reg_factor",":","float","The","factor","that","will","determine","the","amount","of","regularization","and","feature","shrinkage",".","n_iterations",":","float","The","number","of","training","iterations","the","algorithm","will","tune","the","weights","for",".","learning_rate",":","float","The","step","length","that","will","be","used","when","updating","the","weights","."]
code: def predict(self, X):
      X = normalize(polynomial_features(X, degree=self.degree))
      return super(PolynomialRidgeRegression, self).predict(X)
  
imports: from __future__ import print_function, division
  import numpy
  import math
  from mlfromscratch.utils import normalize, polynomial_features
label_desc: Use image node_id 3 for calling the PolynomialRidgeRegression obj's underlying member method code with example usage: obj.predict(X) and returns: super