2016-11-10 2 views
2

У меня есть набор данных, который включает 200000 обозначенных примеров обучения. Для каждого примера обучения у меня есть 10 функций, включая как непрерывные, так и дискретные. Я пытаюсь использовать пакет python sklearn, чтобы обучать модель и делать прогнозы, но у меня есть некоторые проблемы (и некоторые вопросы тоже).sklearn: классификатор Naive Bayes дает низкую точность

Прежде всего позвольте мне написать код, который я написал до сих пор:

from sklearn.naive_bayes import GaussianNB 
# data contains the 200 000 examples 
# targets contain the corresponding labels for each training example 
gnb = GaussianNB() 
gnb.fit(data, targets) 
predicted = gnb.predict(data) 

Проблема заключается в том, что я получаю очень низкую точность (слишком много неправильно классифицирован этикетки) - около 20%. Однако я не совсем уверен, есть ли проблема с данными (например, больше данных требуется или что-то еще) или с кодом.

Это правильный способ реализовать классификатор Naive Bayes с учетом набора данных с дискретными и непрерывными функциями?

Кроме того, в Machine Learning мы знаем, что набор данных должен быть разделен на обучающие и валидационные/испытательные наборы. Выполняется ли это автоматически sklearn или должна ли я fit модели с использованием набора учебных материалов, а затем позвонить predict с использованием набора валидации?

Любые мысли или предложения будут высоко оценены.

+2

Поезд/тестовые сплиты * не * сделаны автоматически, но есть много встроенных функций, позволяющих вам сделать это легко. –

+0

Посмотрите на функции slearn для [перекрестной проверки] (http://scikit-learn.org/stable/modules/cross_validation.html) – Jakub

+0

С другой стороны, вы подгоняете модель ко всем своим данным, поэтому один будет ожидать относительно высокую точность при прогнозировании по тем же данным.Возможно, вы захотите изучить настройки гиперпараметров вашей модели (см. Страницу '' sklearn' на настройке параметров] (http://scikit-learn.org/stable/modules/grid_search.html) – Jakub

ответ

4

Проблема в том, что я получаю очень низкую точность (слишком много ошибочных ярлыков) - около 20%. Однако я не совсем уверен, есть ли проблема с данными (например, больше данных требуется или что-то еще) или с кодом.

Это не большая ошибка для Naive Bayes, это чрезвычайно простой классификатор, и вы не должны ожидать, что он будет сильным, больше данных, вероятно, не поможет. Ваши гауссовые оценки, вероятно, уже очень хороши, просто проблемы с Наивными проблемами. Используйте более прочную модель. Вы можете начать с Random Forest, так как он очень прост в использовании даже неспециалистами в этой области.

Это правильный способ реализовать классификатор Naive Bayes с учетом набора данных с дискретными и непрерывными функциями?

Нет, это не так, вы должны использовать разные дистрибутивы в дискретных функциях, однако scikit-learn не поддерживает это, вам придется делать это вручную. Как уже говорилось, измените свою модель.

Кроме того, в Machine Learning мы знаем, что набор данных должен быть разделен на обучающие и валидационные/испытательные комплекты. Это автоматически выполняется с помощью sklearn или я должен соответствовать модели с использованием набора учебных данных, а затем вызывать прогнозирование с помощью набора проверки?

Ничего не делается автоматически таким образом, вам нужно сделать это самостоятельно (у scikit learn есть много инструментов для этого - см. Перекрестные проверки pacakges).

+0

Я хочу протестировать несколько моделей, чтобы сделать некоторые предсказания, используя различные алгоритмы, и подготовить отчет. 20%, о которых я упоминал выше, - это точность, а не прославленные предсказания. Кстати, вы упомянули, что мне нужны разные дистрибутивы в дискретных функциях. Не могли бы вы рассказать мне, как я могу это сделать (даже вручную). –

+0

Это возможно по-прежнему с Naive Bayes. Сколько классов у вас там? – lejlot

+0

У меня есть 4 класса –

Смежные вопросы