def predict(self, data): """ a method used to predict label for give data :param data: data to predict :return: predicted label """ res = [] if len(self.predictors) == 0: logging.debug('The Model has not been fitted!') if len(data.shape) == 1: data = np.reshape(data, [1, -1]) for i in data: # find k neighbors from train data knn_model = neighbors.KNeighborsClassifier(algorithm='ball_tree', n_neighbors=3).fit( self.train_data, self.train_label) knn_pre_label = knn_model.predict([i]) predicted_vector = self._use_predictors(i) # one row index = {l: i for i, l in enumerate(np.unique(self.train_label))} knn_pre_index = index[knn_pre_label[0]] # make it 0 when the knn predicted class is 0 for j in range(len(self.matrix[0])): if self.matrix[knn_pre_index][j] == 0: predicted_vector[j] = 0 self.predicted_vector.append(list(predicted_vector)) value = MT.closet_vector(predicted_vector, self.matrix, self.distance_measure) res.append(MT.get_key(self.index, value)) return np.array(res)
def predict(self, data): res = [] if len(self.predictors) == 0: logging.debug('The Model has not been fitted!') if len(data.shape) == 1: data = np.reshape(data, [1, -1]) for i in data: predict_res = self._use_predictors(i) if self.predicted_vector == []: self.predicted_vector = copy.deepcopy(predict_res) else: self.predicted_vector = np.row_stack( (self.predicted_vector, predict_res)) value = MT.closet_vector(predict_res, self.matrix, y_euclidean_distance, np.array(self.predictor_weights)) res.append(MT.get_key(self.index, value)) vector = [] for i in range(self.matrix.shape[1]): vector.append(list(self.predicted_vector[:, i])) self.predicted_vector = copy.deepcopy(vector) return np.array(res)