В процессе обучения и улучшения навыков кодирования мне поручили сделать немыслимое… создать алгоритм прогнозного моделирования, имитирующий наивный байесовский классификатор.

Формула байесовской вероятности не сложна, она требует только 3 значения.

Я не буду вдаваться в подробности, но каждый раз, когда вы видите большую букву «П», это вероятность. Вероятность, которую вы хотите, находится слева от знака равенства, а все остальное — это то, что вам нужно, чтобы предоставить формулу. Чтобы сделать прогноз с помощью этого, требуется, чтобы все данные, которые вы принимаете, были обработаны с помощью этой формулы.

Настройка

Получение вероятности каждого уникального значения является задачей при составлении планов, но в конечном итоге разрабатывается простой метод путем подсчета встречающихся случаев и их деления на общий объем данных для каждого раздела или категории. К счастью, это делает компьютер, поскольку большую часть времени данные, используемые для этих прогнозов, представляют собой массивный фрейм данных, который необходимо разбить на отдельные массивы как категории информации.

По-настоящему сложной частью является попытка получить значение, показанное в формуле как «P(B|A)», которое переводится как вероятность истинности A при условии, что B истинно. Это превращается в попытку запустить вычисление вероятности для каждого уникального значения цели прогноза в сравнении с каждым уникальным значением данных, используемых для вашего прогноза.

Организация

Чтобы сэкономить время, я использовал словари для ссылок с различными уникальными значениями в качестве ключей и сохранял их для каждой категории данных, используемых для прогнозов. Это позволило мне просмотреть каждый словарь и выполнить это уравнение вероятности на основе сохраненных значений, а затем сохранить наивысшую вероятность в качестве прогнозируемого целевого значения для каждого уникального значения в прогнозных данных. Это работает, говоря, что если я пытаюсь предсказать цвет автомобиля, а 60% автомобилей — синие, а 70% грузовиков — красные, я просто выберу красный, если транспортное средство — грузовик, потому что это лучший вариант. исходя из вероятности.

Здесь я настроил все основные переменные. «self.target» — это массив данных, который мы используем в качестве примера для обучения модели, чтобы мы могли делать прогнозы. «self.features» — это двумерный массив со многими типами данных, которые являются соответствующими фрагментами данных, которые модель подключает к примеру «self.target». Переменная «self.targetUS» — это пустое значение, которое будет заполнено набором уникальных значений из «self.target». «self.target_data» — это словарь, который заполнен уникальными значениями набора «self.targetUS» в качестве ключей, связанных со значениями вероятности каждого из этих уникальных значений. Несколько более запутанные «self.TSGFWP» и «self.probGtarget» — это словари, которые я буду заполнять вероятностями целевого набора заданной функции с вероятностью, что означает вероятность целевых значений при заданном значении функции, и вероятность заданной цели, которая вероятность того, что значение признака будет задано соответствующим целевым значением. Оба они являются последними заполненными значениями, так как они требуют запуска большинства функций.

Это не точно, но я также использую наиболее часто прогнозируемое значение во всей строке данных, включая каждую категорию данных, так что это более демократичная система прогнозирования, основанная на вероятности. Затем алгоритм возвращает список прогнозируемых значений (final_prediction на основе наиболее часто прогнозируемого значения для каждой строки значений данных.

Проблемы

Есть несколько вероятных проблем с этой упрощенной версией.

  1. Модель использует ответ с наивысшей вероятностью, поэтому любое значение данных будет давать только один ответ каждый раз независимо от других значений данных. Это связано с характером названия «Наивный», что означает, что каждое из значений рассматривается индивидуально, а не с учетом других значений данных. Но в предыдущем примере это означает, что каждый раз, когда он видит, что транспортное средство является грузовиком, он всегда будет говорить, что цвет красный, несмотря ни на что, что может привести к ответам с плохой корреляцией.
  2. Чтобы использовать эту самодельную модель, вам потребуются очень значимые данные для обучения, иначе она будет делать неверные прогнозы на основе неважной информации. Эта модель, однако, не требует преобразования данных в числа и будет работать независимо от типа данных, за исключением типа None.
  3. У вас также должны быть чистые данные, поскольку, к сожалению, модель не работает с NAN или пустыми значениями. Если ваши данные не являются чистыми, вам следует использовать кодировщик, который преобразует пустое значение в число.

Вывод

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

Некоторые из моих функций в классе наивного байесовского категориального классификатора