наивный байесовский классификатор Dynami c обучение - PullRequest
1 голос
/ 26 мая 2020

Можно ли (и как если бы) динамически обучать sklearn MultinomialNB Classifier? Я хотел бы обучать (обновлять) свой классификатор спама каждый раз, когда я загружаю в него электронное письмо.

Я хочу, чтобы это (не работает):

x_train, x_test, y_train, y_test = tts(features, labels, test_size=0.2)
clf = MultinomialNB()
for i in range(len(x_train)):
    clf.fit([x_train[i]], [y_train[i]])
preds = clf.predict(x_test)

, чтобы получить аналогичный результат (работает нормально):

x_train, x_test, y_train, y_test = tts(features, labels, test_size=0.2)
clf = MultinomialNB()
clf.fit(x_train, y_train)
preds = clf.predict(x_test)

1 Ответ

2 голосов
/ 26 мая 2020

Scikit-learn поддерживает инкрементное обучение для нескольких алгоритмов, включая MultinomialNB. Проверьте документы здесь

Вам нужно будет использовать метод partial_fit() вместо fit(), поэтому ваш пример кода будет выглядеть так:

x_train, x_test, y_train, y_test = tts(features, labels, test_size=0.2)
clf = MultinomialNB()
for i in range(len(x_train)):
    if i == 0:
        clf.partial_fit([x_train[i]], [y_train[I]], classes=numpy.unique(y_train))
    else:
        clf.partial_fit([x_train[i]], [y_train[I]])
preds = clf.predict(x_test)

Изменить: добавлен аргумент classes в partial_fit, как было предложено @ BobWazowski

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