| @@ 199-223 (lines=25) @@ | ||
| 196 | for node in self.__tree.leafes: |
|
| 197 | if (self.__outlier_detector < node.feature.number_points): |
|
| 198 | self.__features.append(node.feature); |
|
| 199 | else: |
|
| 200 | self.__outlier_features.append(node.feature); |
|
| 201 | ||
| 202 | ||
| 203 | def __decode_data(self): |
|
| 204 | """! |
|
| 205 | @brief Decodes data from CF-tree features. |
|
| 206 | ||
| 207 | """ |
|
| 208 | ||
| 209 | self.__clusters = [ [] for _ in range(self.__number_clusters) ]; |
|
| 210 | self.__noise = []; |
|
| 211 | ||
| 212 | for index_point in range(0, len(self.__pointer_data)): |
|
| 213 | (cluster_distance, cluster_index) = self.__get_nearest_feature(self.__pointer_data[index_point], self.__features); |
|
| 214 | (outlier_distance, _) = self.__get_nearest_feature(self.__pointer_data[index_point], self.__outlier_features); |
|
| 215 | ||
| 216 | if (cluster_distance < outlier_distance): |
|
| 217 | self.__clusters[cluster_index].append(index_point); |
|
| 218 | else: |
|
| 219 | self.__noise.append(index_point); |
|
| 220 | ||
| 221 | ||
| 222 | def __insert_data(self): |
|
| 223 | """! |
|
| 224 | @brief Inserts input data to the tree. |
|
| 225 | ||
| 226 | @remark If number of maximum number of entries is exceeded than diameter is increased and tree is rebuilt. |
|
| @@ 570-596 (lines=27) @@ | ||
| 567 | farthest_node2 = None; |
|
| 568 | farthest_distance = 0; |
|
| 569 | ||
| 570 | for i in range(0, len(self.successors)): |
|
| 571 | candidate1 = self.successors[i]; |
|
| 572 | ||
| 573 | for j in range(i + 1, len(self.successors)): |
|
| 574 | candidate2 = self.successors[j]; |
|
| 575 | candidate_distance = candidate1.get_distance(candidate2, type_measurement); |
|
| 576 | ||
| 577 | if (candidate_distance > farthest_distance): |
|
| 578 | farthest_distance = candidate_distance; |
|
| 579 | farthest_node1 = candidate1; |
|
| 580 | farthest_node2 = candidate2; |
|
| 581 | ||
| 582 | return [farthest_node1, farthest_node2]; |
|
| 583 | ||
| 584 | ||
| 585 | def get_nearest_successors(self, type_measurement): |
|
| 586 | """! |
|
| 587 | @brief Find pair of nearest successors of the node in line with measurement type. |
|
| 588 | ||
| 589 | @param[in] type_measurement (measurement_type): Measurement type that is used for obtaining nearest successors. |
|
| 590 | ||
| 591 | @return (list) Pair of nearest successors represented by list. |
|
| 592 | ||
| 593 | """ |
|
| 594 | ||
| 595 | nearest_node1 = None; |
|
| 596 | nearest_node2 = None; |
|
| 597 | nearest_distance = float("Inf");
|
|
| 598 | ||
| 599 | for i in range(0, len(self.successors)): |
|