void print_set(const IntervalSet &s) { for(IntervalSet::const_iterator i=s.begin(); i!=s.end(); ++i) { printf("%i-%i ", (int)i->start, (int)i->end); } printf("\n"); }
typename IntervalSet<DomainT,Interval,Compare,Alloc>::interval_type enclosure(const IntervalSet<DomainT,Interval,Compare,Alloc>& object) { typedef IntervalSet<DomainT,Interval,Compare,Alloc> IntervalSetT; typedef typename IntervalSetT::interval_type interval_type; return object.empty() ? neutron<interval_type>::value() : (*object.begin()).span(*object.rbegin()); }
pair<DataType, DataType> get_range(IntervalSet& interval, int dimIndex) { assert(!interval.empty()); int beginIndex = *interval.begin(); IntervalSet::iterator end = interval.end(); --end; int endIndex = *end; assert(beginIndex >= 0 && beginIndex < (int)g_data.size()); assert(endIndex >= 0 && endIndex < (int)g_data.size()); return make_pair( g_data[beginIndex].first[dimIndex], g_data[endIndex].first[dimIndex]); }
// Compute $\chi^2$ value for an interval float chisquared_interval(IntervalSet& interval) { // Count instances of each class map<ClassType, int> classCount; IntervalSet::iterator it = interval.begin(), end = interval.end(); for ( ; it != end; ++it) { int index = *it; ClassType classType = g_data[index].second; classCount[classType]++; } // Keep track of summation float chichiri = 0.0f; set<ClassType>::iterator sit = g_classTypes.begin(), send = g_classTypes.end(); for ( ; sit != send; ++sit) { ClassType classType = *sit; // Uses notation from section 4.2.1, // "Discretization: An Enabling Technique" by H. Liu et al. float A_ij = static_cast<float>(classCount[classType]); float R_i = static_cast<float>(interval.size()); float C_j = static_cast<float>(g_globalClassCount[classType]); float N = static_cast<float>(g_data.size()); float E_ij = (R_i * C_j) / N; float top = (A_ij - E_ij); chichiri += top*top / E_ij; } cout << "{" << chichiri << "} + "; return chichiri; }
// Debugging -- print one interval void print_interval_set(IntervalSet& indices) { copy(indices.begin(), indices.end(), ostream_iterator<int>(cout, ", ")); cout << endl; }