def _predict_proba_for_estimator( self, X, X_p, X_d, classifier, intervals, dims, atts ): c22 = Catch22(outlier_norm=True) if isinstance(self._base_estimator, ContinuousIntervalTree): return classifier._predict_proba_drcif( X, X_p, X_d, c22, self._n_intervals, intervals, dims, atts ) else: T = [X, X_p, X_d] transformed_x = np.empty( shape=(self._att_subsample_size * self.total_intervals, X.shape[0]), dtype=np.float32, ) p = 0 j = 0 for r in range(0, len(T)): for _ in range(0, self._n_intervals[r]): for a in range(0, self._att_subsample_size): transformed_x[p] = _drcif_feature( T[r], intervals[j], dims[j], atts[a], c22 ) p += 1 j += 1 transformed_x = transformed_x.T transformed_x.round(8) np.nan_to_num(transformed_x, False, 0, 0, 0) return classifier.predict_proba(transformed_x)
def _predict_proba_for_estimator(self, X, classifier, intervals, dims, atts): c22 = Catch22(outlier_norm=True) if isinstance(self._base_estimator, ContinuousIntervalTree): return classifier._predict_proba_cif(X, c22, intervals, dims, atts) else: transformed_x = np.empty( shape=(self._att_subsample_size * self._n_intervals, X.shape[0]), dtype=np.float32, ) for j in range(0, self._n_intervals): for a in range(0, self._att_subsample_size): transformed_x[self._att_subsample_size * j + a] = _drcif_feature(X, intervals[j], dims[j], atts[a], c22, case_id=j) transformed_x = transformed_x.T transformed_x.round(8) np.nan_to_num(transformed_x, False, 0, 0, 0) return classifier.predict_proba(transformed_x)
def _fit_estimator(self, X, X_p, X_d, y, idx): c22 = Catch22(outlier_norm=True) T = [X, X_p, X_d] rs = 255 if self.random_state == 0 else self.random_state rs = None if self.random_state is None else rs * 37 * (idx + 1) rng = check_random_state(rs) transformed_x = np.empty( shape=(self._att_subsample_size * self.total_intervals, self.n_instances), dtype=np.float32, ) atts = rng.choice(29, self._att_subsample_size, replace=False) dims = rng.choice(self.n_dims, self.total_intervals, replace=True) intervals = np.zeros((self.total_intervals, 2), dtype=int) p = 0 j = 0 for r in range(0, len(T)): transform_length = T[r].shape[2] # Find the random intervals for classifier i, transformation r # and concatenate features for _ in range(0, self._n_intervals[r]): if rng.random() < 0.5: intervals[j][0] = rng.randint( 0, transform_length - self._min_interval[r] ) len_range = min( transform_length - intervals[j][0], self._max_interval[r], ) length = ( rng.randint(0, len_range - self._min_interval[r]) + self._min_interval[r] ) intervals[j][1] = intervals[j][0] + length else: intervals[j][1] = ( rng.randint(0, transform_length - self._min_interval[r]) + self._min_interval[r] ) len_range = min(intervals[j][1], self._max_interval[r]) length = ( rng.randint(0, len_range - self._min_interval[r]) + self._min_interval[r] if len_range - self._min_interval[r] > 0 else self._min_interval[r] ) intervals[j][0] = intervals[j][1] - length for a in range(0, self._att_subsample_size): transformed_x[p] = _drcif_feature( T[r], intervals[j], dims[j], atts[a], c22 ) p += 1 j += 1 tree = _clone_estimator(self._base_estimator, random_state=rs) transformed_x = transformed_x.T transformed_x = transformed_x.round(8) transformed_x = np.nan_to_num(transformed_x, False, 0, 0, 0) tree.fit(transformed_x, y) return [ tree, intervals, dims, atts, transformed_x if self.save_transformed_data else None, ]
def _fit_estimator(self, X, y, idx): c22 = Catch22(outlier_norm=True) rs = 255 if self.random_state == 0 else self.random_state rs = (None if self.random_state is None else (rs * 37 * (idx + 1)) % np.iinfo(np.int32).max) rng = check_random_state(rs) transformed_x = np.empty( shape=(self._att_subsample_size * self._n_intervals, self.n_instances_), dtype=np.float32, ) atts = rng.choice(25, self._att_subsample_size, replace=False) dims = rng.choice(self.n_dims_, self._n_intervals, replace=True) intervals = np.zeros((self._n_intervals, 2), dtype=int) # Find the random intervals for classifier i and concatenate # features for j in range(0, self._n_intervals): if rng.random() < 0.5: intervals[j][0] = rng.randint( 0, self.series_length_ - self._min_interval) len_range = min( self.series_length_ - intervals[j][0], self._max_interval, ) length = (rng.randint(0, len_range - self._min_interval) + self._min_interval if len_range - self._min_interval > 0 else self._min_interval) intervals[j][1] = intervals[j][0] + length else: intervals[j][1] = ( rng.randint(0, self.series_length_ - self._min_interval) + self._min_interval) len_range = min(intervals[j][1], self._max_interval) length = (rng.randint(0, len_range - self._min_interval) + self._min_interval if len_range - self._min_interval > 0 else self._min_interval) intervals[j][0] = intervals[j][1] - length for a in range(0, self._att_subsample_size): transformed_x[self._att_subsample_size * j + a] = _drcif_feature(X, intervals[j], dims[j], atts[a], c22, case_id=j) tree = _clone_estimator(self._base_estimator, random_state=rs) transformed_x = transformed_x.T transformed_x = transformed_x.round(8) if self.base_estimator == "CIT": transformed_x = np.nan_to_num(transformed_x, False, posinf=np.nan, neginf=np.nan) else: transformed_x = np.nan_to_num(transformed_x, False, 0, 0, 0) tree.fit(transformed_x, y) return [tree, intervals, dims, atts]