}
  private double estimateAccuracy(BitSet feature_set, int num_atts)    throws Exception  {    int i;    Instances newInstances;    int [] fs = new int [num_atts];    double acc = 0.0;    double [][] evalArray;    double [] instA = new double [num_atts];    int classI = m_theInstances.classIndex();        int index = 0;    for (i=0;i<m_numAttributes;i++)      if (feature_set.get(i))	fs[index++] = i;        // create new hash table    m_entries = new Hashtable((int)(m_theInstances.numInstances() * 1.5));    // insert instances into the hash table    for (i=0;i<m_numInstances;i++)    {      Instance inst = m_theInstances.instance(i);      for (int j=0;j<fs.length;j++)	if (fs[j] == classI)	  instA[j] = Double.MAX_VALUE; // missing for the class	else if (inst.isMissing(fs[j]))	  instA[j] = Double.MAX_VALUE;	else	  instA[j] = inst.value(fs[j]);      insertIntoTable(inst, instA);    }       if (m_CVFolds == 1)    {      // calculate leave one out error      for (i=0;i<m_numInstances;i++)      {	Instance inst = m_theInstances.instance(i);	for (int j=0;j<fs.length;j++)	  if (fs[j] == classI)	    instA[j] = Double.MAX_VALUE; // missing for the class	  else if (inst.isMissing(fs[j]))	    instA[j] = Double.MAX_VALUE;	  else	    instA[j] = inst.value(fs[j]);	double t = classifyInstanceLeaveOneOut(inst, instA);	if (m_classIsNominal)	{	  if (t == inst.classValue())	    acc+=inst.weight();	}	else	  acc += ((inst.weight() * (t - inst.classValue())) * 		  (inst.weight() * (t - inst.classValue())));	// weight_sum += inst.weight();      }    }    else    {      m_theInstances.randomize(m_rr);      m_theInstances.stratify(m_CVFolds);      // calculate 10 fold cross validation error      for (i=0;i<m_CVFolds;i++)      {	Instances insts = m_theInstances.testCV(m_CVFolds,i);		acc += classifyFoldCV(insts, fs);      }    }      if (m_classIsNominal)      return (acc / m_theInstances.sumOfWeights());    else      return -(Math.sqrt(acc / m_theInstances.sumOfWeights()));     }