private double[][] computePredictions(int index_to_change, boolean add) {
    double[][] predictions = new double[m_models[0].length][m_models[0][0].length];
    for (int i = 0; i < m_bagSize; ++i) {
      if (m_timesChosen[i] > 0) {
	for (int j = 0; j < m_models[0].length; ++j) {
	  for (int k = 0; k < m_models[0][j].length; ++k) {
	    predictions[j][k] += model(i)[j][k] * m_timesChosen[i];
	  }
	}
      }
    }
    for (int j = 0; j < m_models[0].length; ++j) {
      int change = add ? 1 : -1;
      for (int k = 0; k < m_models[0][j].length; ++k) {
	predictions[j][k] += change * model(index_to_change)[j][k];
	predictions[j][k] /= (m_numChosen + change);
      }
    }
    return predictions;
  }