Класс просит меня отдать себя за Наивного Байеса Модель python - PullRequest
1 голос
/ 12 февраля 2020

Я пытаюсь использовать следующий код, но когда я пытаюсь использовать функцию fit с моими X_train и y_train, я получаю следующую ошибку

fit() missing 1 required positional argument: 'self'

Я не знаю много о классах но я знаю, что это не должно спрашивать меня о себе. Я нашел кое-что об инстанцировании, но не мог понять это.

class BernoulliNB(object):
    def __init__(self, alpha=1.0):
        self.alpha = alpha

    def fit(self, X, y):
        count_sample = X.shape[0]
        # group by class
        separated = [[x for x, t in zip(X, y) if t == c] for c in np.unique(y)]
        # class prior
        self.class_log_prior_ = [np.log(len(i) / count_sample) for i in separated]
        # count of each word
        count = np.array([np.array(i).sum(axis=0) for i in separated]) + self.alpha

        smoothing = 2 * self.alpha
        # number of documents in each class + smoothing
        n_doc = np.array([len(i) + smoothing for i in separated])
        print(n_doc)

    def predict(self, X):
        return np.argmax(self.predict_log_proba(X), axis=1)

когда я пытаюсь

b = BernoulliNB() 
b.fit(b, X_train,y_train) 

на этот раз я получаю

fit() takes 3 positional arguments but 4 were given

Затем я изменил его на

BernoulliNB().fit(X_train,y_train)

но это время возникновения этой ошибки

The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

1 Ответ

0 голосов
/ 12 февраля 2020

Вы звоните BernoulliNB.fit(...) вместо

b = BernoulliNB()
b.fit(...)

В приведенном выше примере кода b является экземпляром из BernoulliNB, и поэтому передаете себя как self.

Вы также можете использовать

b = BernoulliNB()
BernoulliNB.fit(b,...)

или (по предложению Гая)

BernoulliNB().fit(...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...