// Обобщение статистической оценки информативности до случая произвольного числа классов. // 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); }
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; }