def predict(self, X): y_pred = [] X = np.array(X) m, n = self.X.shape k = m l = int(math.sqrt(n)) nb = MultinomialNB() nb.row_idxs = np.random.choice(m, k) nb.col_idxs = list(set(np.random.choice(n, l))) self.X = (X - min(X)) / (max(X) - min(X)) nb.fit(self.X, self.y) for xi in X: predictions = {} predicted = nb.predict(xi.reshape(1, -1))[0] predictions[predicted] = predictions.get(predicted, 0) + 1 sorted_votes = list(predictions.items()) sorted_votes.sort(key=operator.itemgetter(1)) y_pred.append(sorted_votes[-1][0]) return y_pred