// Обобщение статистической оценки информативности до случая произвольного числа классов.
// TESTED 07.12.2011
float statistical_descriptiveness_full(int* c_elements_count, int* c_f_elements_count,
                                       int classes_count,
                                       int c_total_elements, int c_f_total_elements) {
    float result = 0;
    int i = 0;
   
    if ((c_total_elements == -1) || (c_f_total_elements == -1)) {
        c_total_elements = 0;
        c_f_total_elements = 0;
        while (i < classes_count) {
            printf("c_elements_count[%d] = %d\n", i, c_elements_count[i]);
            printf("c_f_elements_count[%d] = %d\n", i, c_f_elements_count[i]);
            c_total_elements += c_elements_count[i];
            c_f_total_elements += c_f_elements_count[i];
            result -= log_fact(c_elements_count[i])
                    - log_fact(c_f_elements_count[i]) 
                    - log_fact(c_elements_count[i] - c_f_elements_count[i]);
            i++;
        }
    } else {
        while (i < classes_count) {
            result -= log_fact(c_elements_count[i])
                    - log_fact(c_f_elements_count[i]) 
                    - log_fact(c_elements_count[i] - c_f_elements_count[i]);
            i++;
        }
    }
    result -= log_fact(c_f_total_elements) 
            + log_fact(c_total_elements - c_f_total_elements)
            - log_fact(c_total_elements);
    return result;
}
// Статистическая оценка информативности
// TESTED 07.12.2011
float statistical_descriptiveness(int c_elements_count, 
                                  int c_f_elements_count,
                                  int nc_elements_count,
                                  int nc_f_elements_count) {
    return - log_fact(c_f_elements_count + nc_f_elements_count)
           - log_fact(c_elements_count + nc_elements_count - c_f_elements_count - nc_f_elements_count)
           + log_fact(c_elements_count + nc_elements_count)
           + log_fact(c_f_elements_count)
           + log_fact(c_elements_count - c_f_elements_count)
           - log_fact(c_elements_count)
           + log_fact(nc_f_elements_count)
           + log_fact(nc_elements_count - nc_f_elements_count)
           - log_fact(nc_elements_count);
}
Exemplo n.º 3
0
double mle_Poisson_val(const vector<double>& data, double *lambda)
{
  double s1 = 0.0, s2 = 0.0, s3 = 0.0;
  for (unsigned int i = 0; i < data.size(); i++)
	{
	  s1 += data[i];
	  s2 += i * data[i];
	  s3 += data[i] * log_fact(i);
	}
  *lambda = s2 / s1;
  return log(*lambda)*s2 - *lambda * s1 - s3;
}