def process(self):
previous_likelihood = -<NUM_LIT><EOL>current_likelihood = -<NUM_LIT><EOL>current_iteration = <NUM_LIT:0><EOL>while(self.__stop is False) and (abs(previous_likelihood - current_likelihood) > self.__tolerance) and (current_iteration < self.__iterations):<EOL><INDENT>self.__expectation_step()<EOL>self.__maximization_step()<EOL>current_iteration += <NUM_LIT:1><EOL>self.__extract_clusters()<EOL>self.__notify()<EOL>previous_likelihood = current_likelihood<EOL>current_likelihood = self.__log_likelihood()<EOL>self.__stop = self.__get_stop_condition()<EOL><DEDENT>self.__normalize_probabilities()<EOL>
!
        @brief Run clustering process of the algorithm.
        @details This method should be called before call 'get_clusters()'.