docs: def _maximization(self, X):
          """Update the parameters and priors"""
  
          # Iterate through clusters and recalculate mean and covariance
          for i in range(self.k):
              resp = np.expand_dims(self.responsibility[:, i], axis=1)
              mean = (resp * X).sum(axis=0) / resp.sum()
              covariance = (X - mean).T.dot((X - mean) * resp) / resp.sum()
              self.parameters[i]["mean"], self.parameters[i]["cov"] = mean, covariance
  
          # Update weights
          n_samples = np.shape(X)[0]
          self.priors = self.responsibility.sum(axis=0) / n_samples