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

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

Когда начать?

Python может быть немного пугающим, если у вас нет опыта. Блокноты Jupyter значительно упрощают все это, потому что вы можете видеть вывод каждого сегмента вашего кода отдельно. Это упрощает отладку кода. (после установки на терминале Mac введите jupyter notebook, чтобы начать)

Концепции:

  • вероятность и подсчет
  • перестановки и комбинации
  • условная вероятность (для изучения Байеса)
  • Правило или теорема Байеса (и наивный алгоритм Байеса), которые можно использовать в качестве простого классификатора

Изучение основ:

  • набор тестов по сравнению с набором поездов

Применение:

Одно из применений Наивного Байеса - для двоичных классификаторов. Например, на основе вероятности набора слов в спаме и не-спамовых электронных письмах (обучающий набор) мы можем иметь наивный байесовский алгоритм для классификации новых писем (тестовый набор). Однако наивный Байес имеет ключевое предположение о независимости («наивность»). Под независимостью мы подразумеваем, что статистически мы предполагаем, что любые два слова в нашем наборе слов встречаются независимо друг от друга, что не совсем верно на практике. Тем не менее, алгоритм по-прежнему работает относительно хорошо, поскольку нас не интересуют точные значения вероятности, а мы устанавливаем порог (например, 0,9) и говорим, что выше этого значения считается спамом, а ниже - как не-спам.

Основываясь на том, что я узнал в классе, я написал простой код, который классифицирует спам и не спам.

Смотрите мою записную книжку здесь

Данные получены отсюда. Связанное сообщение в блоге находится здесь.

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

Исходные данные из:

Https://medium.com/analytics-vidhya/building-a-spam-filter-from-scratch-using-machine-learning-fc58b178ea56

Https://github.com/Gago993/SpamFilterMachineLearning