Exemplo n.º 1
0
 public double calculate_discrimenet_function(Generic_State_Of_Nature object_state_of_nature, double[,] vector_observed_features_values)
 {
     double gi_x = 0;
     Matrix<double> X = Matrix.Build.DenseOfArray(vector_observed_features_values);
     /**
      * todo move this code to training step
      **/
     Matrix<double> Wi = (-1 / 2) * object_state_of_nature.Matrix_Sigma_Inverse;
     Matrix<double> wi = object_state_of_nature.Matrix_Sigma_Inverse * object_state_of_nature.Vector_Meu;
     Matrix<double> omegai_0 = (-1 / 2) * object_state_of_nature.Vector_Meu_Transpose * object_state_of_nature.Matrix_Sigma_Inverse * object_state_of_nature.Vector_Meu - (1 / 2) * Math.Log(object_state_of_nature.Matrix_Sigma.Determinant(),Math.E) + Math.Log(object_state_of_nature.priori, Math.E);
     Matrix<double> ret = X.Transpose() * Wi * X + wi.Transpose() * X + omegai_0;
     gi_x = ret.Determinant();
     return gi_x;
 }
Exemplo n.º 2
0
        public GenericDataSet(
            Stream _data_set_file_stream,
            char _file_delimeter,
            int _number_of_features,
            int _number_of_states_of_nature,
            int _number_of_samples_per_state_of_nature,
            int _number_of_training_samples_per_state_of_nature,
            int _number_of_test_samples_per_state_of_nature)
        {
            number_of_features = _number_of_features;
            number_of_states_of_nature = _number_of_states_of_nature;
            number_of_samples_per_state_of_nature = _number_of_samples_per_state_of_nature;
            number_of_training_samples_per_state_of_nature = _number_of_training_samples_per_state_of_nature;
            number_of_test_samples_per_state_of_nature = _number_of_test_samples_per_state_of_nature;

            double priori = 1 / number_of_states_of_nature; // @note: equal priori results in uniform decision boundary mainly determined by the posteriori

            array_of_states_natures = new Generic_State_Of_Nature[number_of_states_of_nature];
            for (int i = 0; i < number_of_states_of_nature; i++)
            {
                array_of_states_natures[i] = new Generic_State_Of_Nature(
                    number_of_features,
                    number_of_training_samples_per_state_of_nature,
                    number_of_test_samples_per_state_of_nature,
                    priori
                    );
            }

            read_data_set_from_file_stream(_data_set_file_stream, _file_delimeter);

            for (int i = 0; i < number_of_states_of_nature; i++)
            {
                array_of_states_natures[i].calculate_meus_vector_from_samples();
                array_of_states_natures[i].calculate_covariance_matrix_from_samples();
            }
        }
Exemplo n.º 3
0
 public int classify_using_discriminent_function(Generic_State_Of_Nature[] array_generic_state_nature, double[,] vector_observed_features_values)
 {
     double maximum_discriminent_value = double.PositiveInfinity;
     int class_index = -1;
     for (int i = 0; i < array_generic_state_nature.Length; i++)
     {
         double discriminent_value = calculate_discrimenet_function(array_generic_state_nature[i], vector_observed_features_values);
         if (discriminent_value > maximum_discriminent_value)
         {
             maximum_discriminent_value = discriminent_value;
             class_index = i;
         }
     }
     return class_index;
 }