コード例 #1
0
    def __get_average_intra_cluster_distance(self, entry):
        """!
        @brief Calculates average intra cluster distance between current and specified clusters.

        @param[in] entry (cfentry): Clustering feature to which distance should be obtained.

        @return (double) Average intra cluster distance.

        """

        linear_part_first = list_math_addition(
            self.linear_sum, entry.linear_sum
        )
        linear_part_second = linear_part_first

        linear_part_distance = sum(
            list_math_multiplication(linear_part_first, linear_part_second)
        )

        general_part_distance = (
            2.0
            * (self.number_points + entry.number_points)
            * (self.square_sum + entry.square_sum)
            - 2.0 * linear_part_distance
        )

        return (
            general_part_distance
            / (
                (self.number_points + entry.number_points)
                * (self.number_points + entry.number_points - 1.0)
            )
        ) ** 0.5
コード例 #2
0
    def __get_variance_increase_distance(self, entry):
        """!
        @brief Calculates variance increase distance between current and specified clusters.
        
        @param[in] entry (cfentry): Clustering feature to which distance should be obtained.
        
        @return (double) Variance increase distance.
        
        """

        linear_part_12 = list_math_addition(self.linear_sum, entry.linear_sum)
        variance_part_first = (self.square_sum + entry.square_sum) - \
            2.0 * sum(list_math_multiplication(linear_part_12, linear_part_12)) / (self.number_points + entry.number_points) + \
            (self.number_points + entry.number_points) * sum(list_math_multiplication(linear_part_12, linear_part_12)) / (self.number_points + entry.number_points)**2.0

        linear_part_11 = sum(
            list_math_multiplication(self.linear_sum, self.linear_sum))
        variance_part_second = -(self.square_sum -
                                 (2.0 * linear_part_11 / self.number_points) +
                                 (linear_part_11 / self.number_points))

        linear_part_22 = sum(
            list_math_multiplication(entry.linear_sum, entry.linear_sum))
        variance_part_third = -(
            entry.square_sum - (2.0 / entry.number_points) * linear_part_22 +
            entry.number_points *
            (1.0 / entry.number_points**2.0) * linear_part_22)

        return (variance_part_first + variance_part_second +
                variance_part_third)
コード例 #3
0
 def __add__(self, entry):
     """!
     @brief Overloaded operator add. Performs addition of two clustering features.
     
     @param[in] entry (cfentry): Entry that is added to the current.
     
     @return (cfentry) Result of addition of two clustering features.
     
     """
     
     number_points = self.number_points + entry.number_points
     result_linear_sum = list_math_addition(self.linear_sum, entry.linear_sum)
     result_square_sum = self.square_sum + entry.square_sum
     
     return cfentry(number_points, result_linear_sum, result_square_sum)
コード例 #4
0
ファイル: cftree.py プロジェクト: RuhiSharma/pyclustering
 def __add__(self, entry):
     """!
     @brief Overloaded operator add. Performs addition of two clustering features.
     
     @param[in] entry (cfentry): Entry that is added to the current.
     
     @return (cfentry) Result of addition of two clustering features.
     
     """
     
     number_points = self.number_points + entry.number_points;
     linear_sum = list_math_addition(self.linear_sum, entry.linear_sum);        
     square_sum = self.square_sum + entry.square_sum;  
     
     return cfentry(number_points, linear_sum, square_sum);
コード例 #5
0
ファイル: cftree.py プロジェクト: RuhiSharma/pyclustering
 def __get_average_intra_cluster_distance(self, entry):
     """!
     @brief Calculates average intra cluster distance between current and specified clusters.
     
     @param[in] entry (cfentry): Clustering feature to which distance should be obtained.
     
     @return (double) Average intra cluster distance.
     
     """
     
     linear_part_first = list_math_addition(self.linear_sum, entry.linear_sum);
     linear_part_second = linear_part_first;
     
     linear_part_distance = sum(list_math_multiplication(linear_part_first, linear_part_second));
     
     general_part_distance = 2.0 * (self.number_points + entry.number_points) * (self.square_sum + entry.square_sum) - 2.0 * linear_part_distance;
     
     return (general_part_distance / ( (self.number_points + entry.number_points) * (self.number_points + entry.number_points - 1.0) )) ** 0.5;
コード例 #6
0
 def __update_centers(self):
     """!
     @brief Calculate centers of clusters in line with contained objects.
     
     @return (list) Updated centers as list of centers.
     
     """
      
     centers = [[] for i in range(len(self.__clusters))];
      
     for index in range(len(self.__clusters)):
         point_sum = [0] * len(self.__pointer_data[0]);
          
         for index_point in self.__clusters[index]:
             point_sum = list_math_addition(point_sum, self.__pointer_data[index_point]);
         
         centers[index] = list_math_division_number(point_sum, len(self.__clusters[index]));
          
     return centers;
コード例 #7
0
ファイル: kmeans.py プロジェクト: RuhiSharma/pyclustering
 def __update_centers(self):
     """!
     @brief Calculate centers of clusters in line with contained objects.
     
     @return (list) Updated centers as list of centers.
     
     """
      
     centers = [[] for i in range(len(self.__clusters))];
      
     for index in range(len(self.__clusters)):
         point_sum = [0] * len(self.__pointer_data[0]);
          
         for index_point in self.__clusters[index]:
             point_sum = list_math_addition(point_sum, self.__pointer_data[index_point]);
         
         centers[index] = list_math_division_number(point_sum, len(self.__clusters[index]));
          
     return centers;
コード例 #8
0
ファイル: modules.py プロジェクト: IlariaRaciti/MultiX
def __get_centers(data, clusters):
    """
@brief Centers of clusters in line with contained objects.
    @param[in] clusters (list): Clusters that contain indexes of objects from data.
    @return (list) Centers.

    """

    centers = [[] for i in range(len(clusters))]
    dimension = len(data[0])

    for index in range(len(clusters)):
        point_sum = [0.0] * dimension

        for index_point in clusters[index]:
            point_sum = list_math_addition(point_sum, data[index_point])

        centers[index] = list_math_division_number(point_sum,
                                                   len(clusters[index]))

    return centers
コード例 #9
0
ファイル: xmeans.py プロジェクト: Jeff-Tian/pyclustering
 def __update_centers(self, clusters):
     """!
     @brief Updates centers of clusters in line with contained objects.
     
     @param[in] clusters (list): Clusters that contain indexes of objects from data.
     
     @return (list) Updated centers.
     
     """
      
     centers = [[] for _ in range(len(clusters))];
     dimension = len(self.__pointer_data[0])
       
     for index in range(len(clusters)):
         point_sum = [0.0] * dimension;
           
         for index_point in clusters[index]:
             point_sum = list_math_addition(point_sum, self.__pointer_data[index_point]);
         
         centers[index] = list_math_division_number(point_sum, len(clusters[index]));
           
     return centers;
コード例 #10
0
ファイル: xmeans.py プロジェクト: terry07/pyclustering
 def __update_centers(self, clusters):
     """!
     @brief Updates centers of clusters in line with contained objects.
     
     @param[in] clusters (list): Clusters that contain indexes of objects from data.
     
     @return (list) Updated centers.
     
     """
      
     centers = [[] for i in range(len(clusters))];
     dimension = len(self.__pointer_data[0])
       
     for index in range(len(clusters)):
         point_sum = [0.0] * dimension;
           
         for index_point in clusters[index]:
             point_sum = list_math_addition(point_sum, self.__pointer_data[index_point]);
         
         centers[index] = list_math_division_number(point_sum, len(clusters[index]));
           
     return centers;
コード例 #11
0
ファイル: cftree.py プロジェクト: RuhiSharma/pyclustering
    def __get_variance_increase_distance(self, entry):
        """!
        @brief Calculates variance increase distance between current and specified clusters.
        
        @param[in] entry (cfentry): Clustering feature to which distance should be obtained.
        
        @return (double) Variance increase distance.
        
        """
                
        linear_part_12 = list_math_addition(self.linear_sum, entry.linear_sum);
        variance_part_first = (self.square_sum + entry.square_sum) - \
            2.0 * sum(list_math_multiplication(linear_part_12, linear_part_12)) / (self.number_points + entry.number_points) + \
            (self.number_points + entry.number_points) * sum(list_math_multiplication(linear_part_12, linear_part_12)) / (self.number_points + entry.number_points)**2.0;

        
        linear_part_11 = sum(list_math_multiplication(self.linear_sum, self.linear_sum));
        variance_part_second = -( self.square_sum - (2.0 * linear_part_11 / self.number_points) + (linear_part_11 / self.number_points) );
        
        linear_part_22 = sum(list_math_multiplication(entry.linear_sum, entry.linear_sum));
        variance_part_third = -( entry.square_sum - (2.0 / entry.number_points) * linear_part_22 + entry.number_points * (1.0 / entry.number_points ** 2.0) * linear_part_22 );

        return (variance_part_first + variance_part_second + variance_part_third);