15 #ifndef __MLPACK_METHODS_HOEFFDING_TREES_INFORMATION_GAIN_HPP 16 #define __MLPACK_METHODS_HOEFFDING_TREES_INFORMATION_GAIN_HPP 33 static double Evaluate(
const arma::Mat<size_t>& counts)
38 arma::vec splitCounts(counts.n_elem);
39 for (
size_t i = 0; i < counts.n_cols; ++i)
41 splitCounts[i] = arma::accu(counts.col(i));
42 numElem += splitCounts[i];
49 arma::Col<size_t> classCounts = arma::sum(counts, 1);
53 for (
size_t i = 0; i < classCounts.n_elem; ++i)
55 const double f = ((double) classCounts[i] / (
double) numElem);
57 gain -= f * std::log2(f);
62 for (
size_t i = 0; i < counts.n_cols; ++i)
64 if (splitCounts[i] > 0)
66 double splitGain = 0.0;
67 for (
size_t j = 0; j < counts.n_rows; ++j)
69 const double f = ((double) counts(j, i) / (double) splitCounts[i]);
71 splitGain += f * std::log2(f);
74 gain += ((double) splitCounts[i] / (
double) numElem) * splitGain;
86 static double Range(
const size_t numClasses)
91 return std::log2(numClasses);
Linear algebra utility functions, generally performed on matrices or vectors.