예제 #1
0
    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)
예제 #2
0
    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)