Алгоритм машинного обучения: 9 ключевых алгоритмов машинного обучения простым языком / Хабр

Содержание

9 ключевых алгоритмов машинного обучения простым языком / Хабр

Привет, Хабр! Представляю вашему вниманию перевод статьи «9 Key Machine Learning Algorithms Explained in Plain English» автора Nick McCullum.

Машинное обучение (МО) уже меняет мир. Google использует МО предлагая и показывая ответы на поисковые запросы пользователей. Netflix использует его, чтобы рекомендовать вам фильмы на вечер. А Facebook использует его, чтобы предложить вам новых друзей, которых вы можете знать.

Машинное обучение никогда еще не было настолько важным и, в тоже время, настолько трудным для изучения. Эта область полна жаргонов, а количество разных алгоритмов МО растет с каждым годом.

Эта статья познакомит вас с фундаментальными концепциями в области машинного обучения. А конкретнее, мы обсудим основные концепции 9ти самых важных алгоритмов МО на сегодняшний день.

Система рекомендаций(Recommendation system)


Для построения полноценной системы рекомендаций с 0, требуются глубокие знания в линейной алгебре. Из-за чего, если вы никогда не изучали эту дисциплину, вам может быть сложно понять некоторые концепции этого раздела.

Но не беспокойтесь — scikit-learn библиотека Python позволяет довольно просто построить СР. Так что вам не потребуется таких уж глубоких познаний в линейной алгебре, чтобы построить рабочую СР.

Как работает СР?

Существует 2 основных типа система рекомендаций:
  • Основанная на контенте(Content-based)
  • Коллаборативная фильтрация(Collaborative filtering)

Основанная на контенте система дает рекомендации, которые базируются на схожести элементов, уже использованных вами. Эти системы ведут себя абсолютно так, как вы ожидаете СР будет себя вести.

Коллаборативная фильтрация СР предоставляет рекоммендации, основанные на знаниях о том как пользователь взаимодействует с элементами(*примечание: за основу взяты взаимодействия с элементами других пользователей, схожих по поведению с данным пользователем). Другими словами, они используют «мудрость толпы»(отсюда и «коллаборативный» в названии метода).

В реальном мире коллаборативная фильтрация СР куда более распространена, нежели основанная на контенте система. Это обусловлено, преимущественно, потому что они обычно дают результат лучше. Некоторые специалист также находят коллаборативную систему более простой для понимания.

Коллаборативная фильтрация СР также обладает уникальной особенностью, которой нет в основанной на контенте ситстеме. А именно, у них есть способность обучаться фичам самостоятельно.

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

Существует 2 подкатегории коллаборативной фильтрации:

  • Основанная на модели
  • Основанная на соседстве

Хорошая новость: вам не обязательно знать разницу в этих двух типах коллаборативной фильтрации СР, чтобы быть успешным в МО. Достаточно просто знать, что существует несколько типов.
Подведем итог

Вот краткое резюме того, что мы узнали о системе рекомендаций в данной статье:
  • Примеры системы рекомендаций из реального мира
  • Разные типы системы рекомендаций и почему коллаборативная фильтрация используется чаще, чем основанная на контенте система
  • Связь между системой рекомендаций и линейной алгеброй

Линейная регрессия (Linear Regression)


Линейная регрессия используется для предсказаний некоторого значения y основываясь на некотором множестве значений x.
История линейной регрессии

Линейная регрессия(ЛР) была изобретена в 1800 году Френсисом Гальтоном. Гальтон был ученым, изучающим связь между родителями и детьми. А конкретнее, Гальтон исследовал связь между ростом отцов и ростом их сыновей. Первым открытием Гальтона стал тот факт, что рост сыновей, как правило, был приблизительно таким же как рост их отцов. Что не удивительно.

Позднее, Гальтон открыл нечто более интересное. Рост сына, как правило, был ближе к средне-общему росту всех людей, чем к росту его собственного отца.

Гальтон даль этому феномену название — регрессия. В частности, он сказал: » Рост сына имеет тенденцию к регрессии(или к смещению в направлении) среднего роста».

Это привело к целой области в статистике и машинном обучении под названием регрессия.

Математика линейной регрессии

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

Типичный пример такого подхода — «метод наименьших квадратов» линейной регрессии, с помощью которого рассчитывают близость линии в направлении верх-низ.

Пример для иллюстрации:

Когда вы создаете регрессионную модель, ваш конечный продукт — это уравнение, с помощью которого вы можете предсказать значения y для значения x без того чтобы знать значение y наперед.

Логистическая регрессия (Logistic Regression)


Логистическая регрессия схожа с линейной, за исключением того факта, что вместо вычисления значения у, она оценивает к какой категории принадлежит данная точка данных.
Что такое логистическая регрессия?

Логистическая регрессия — это модель машинного обучения, использующаяся для решения задач классификации.

Ниже представлено несколько примеров классификационных задач МО:

  • Спам электронной почты(спам или не спам?)
  • Претензия по страховке автомобиля (выплата компенсации или починка?)
  • Диагностика болезней

Каждая из этих задач имеет четко 2 категории, что делает их примерами задач двоичной классификации.

Логистическая регрессия хорошо подходит для решения задач двоичной классификации — мы просто назначаем разным категориям значения 0 и 1 соответственно.

Зачем нужна логистическая регрессия? Потому что вы не можете использовать линейную регрессию для прогнозов по двоичной классификации. Она просто не будет подходить, так как вы будете пытаться провести прямую линию через набор данных с двумя возможными значениями.

Это изображение может помочь понять почему линейная регрессия плохо подходит для двоичной классификации:

На этом изображении ось у представляет вероятность того, что опухоль является злокачественной. Значения 1-у представляет вероятность, что опухоль доброкачественная. Как вы можете видеть, модель линейной регрессии очень плохо срабатывает для предсказания вероятности для большинства наблюдений в наборе данных.

Вот почему логистическая регрессионная модель полезна. У нее есть изгиб к линии лучшего соответсвия, что делает ее(модель) гораздо более подходящей для предсказаний качественных(категорийных) данных.

Вот пример, который иллюстрирует сравнение линейной и логистической регрессионых моделей на одних и техже данных:

Сигмоида (The Sigmoid Function)

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

Для вас не обязательно досконально запоминать сигмоиду, чтобы преуспеть в МО. Но все-таки иметь некоторое представление об этой функции будет полезно.

Формула сигмоиды:

Главная характеристика сигмоиды, которая стоит того, чтобы с ней разобраться — не важно какое значение вы передадите этой функции, она всегда вернет значение в промежутке 0-1.

Использование логистической регрессионной модели для предсказаний

Чтобы использовать логистическую регрессию для предсказаний, вам, как правило, нужно точно определить точку отсечения. Эта точка отсечения обычно 0.5.

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

Использование матрицы ошибок для измерения эффективности логистической регрессии

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

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

В этой таблице TN означает «истинно отрицательно», FN — «ложно отрицательно», FP — «ложно положительно», TP — «истинно положительно».

Матрица ошибок полезна для оценки модели, есть ли в ней «слабые» квадранты в матрице ошибок. Как пример, она может иметь ненормально большое количество ложно положительных результатов.

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

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

Подведем итог

В этом разделе у вас было первое знакомство с моделью МО — логистической регрессией.
Вот краткое содержание того, что вы узнали о логистической регрессии:
  • Типы задач классификации, которые подходят для решения с помощью логистической регрессии
  • Логистическая функция (сигмоида) всегда дает значение от 0 до 1
  • Как использовать точки отсечения для предсказания с помощью модели логистической регрессии
  • Почему матрица ошибок полезна для измерения эффективности модели логистической регрессии

Алгоритм k-ближайших соседей (K-Nearest Neighbors)


Алгоритм k-ближайших соседей может помочь решить задачу классификации, в случае, когда категорий больше, чем 2.
Что из себя представляет алгоритм k-ближайших соседей?

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

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

Данное изображение демонстрирует этот принцип с параметром К = 3:

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

Как построить алгоритм К-ближайших соседей

Основные шаги для построения данного алгоритма:
  1. Соберите все данные
  2. Вычислите Евклидово расстояние от новой точки данных х до всех остальных точек в множестве данных
  3. Отсортируйте точки из множества данных в порядке возрастания расстояния до х
  4. Спрогнозируйте ответ, используя ту же категорию, что и большинство К-ближайших к х данных

Важность переменной К в алгоритме К-ближайших соседей

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

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

Представленная ниже иллюстрация отлично показывает этот эффект:

Плюсы и минусы алгоритма К-ближайших соседей

Чтобы подвести итог знакомства с этим алгоритмом, давайте коротко обсудим достоинства и недостатки его использования.

Плюсы:

  • Алгоритм прост и его легко понять
  • Тривиальное обучение модели на новых тренировочных данных
  • Работает с любым количеством категорий в задаче классификации
  • Легко добавить больше данных в множество данных
  • Модель принимает только 2 параметра: К и метрика расстояния, которой вы хотели бы воспользоваться (обычно это Евклидово расстояние)

Минусы:
  • Высокая стоимость вычисления, т.к. вам требуется обработать весь объем данных
  • Работает не так хорошо с категорическими параметрами

Подведем итог

Краткое содержание того, что вы только что узнали о алгоритме К-ближайших соседей:
  • Пример задачи на классификацию(футболисты или баскетболисты), которую может решить алгоритм
  • Как данный алгоритм использует Евклидово расстояние до соседних точек для прогнозирования к какой категории принадлежит новая точка данных
  • Почему значения параметра К важно для прогнозирования
  • Плюсы и минусы использования алгоритма К-ближайших соседей

Дерево решений и Случайный лес (Decision Trees and Random Forests)


Дерево решений и случайный лес — это 2 примера древовидного метода. Точнее, деревья решений — это модели МО, используемые для прогнозирования через циклический просмотр каждой функции в наборе данных один за одним. Случайный лес — это ансамбль (комитет) деревьев решения, которые используют случайные порядки объектов в наборе данных.
Что такое древовидный метод?

Перед тем, как мы нырнем в теоретические основы древовидного метода в МО, будет нелишним начать с примера.

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

Вы можете использовать эти данные для предсказания придет ли ваш друг сегодня или нет. Одна из техник, которой вы можете воспользоваться — это дерево решений. Вот как это выглядит:

У каждого дерева решений есть 2 типа элементов:

  • Узлы (Nodes): места, где дерево разделяется в зависимости от значения определенного параметра
  • Грани (Edges): результат разделения, ведущий к следующему узлу

Вы можете видеть, что на схеме есть узлы для прогноза (outlook), влажности (humidity) и ветра
(windy). И также грани для каждого потенциального значения каждого из этих параметров.

Вот еще парочка определений, которые вы должны понимать перед тем, как мы начнем:

  • Корень (Root) — узел, с которого начинается разделение дерева
  • Листья (Leaves) — заключительные узлы, которые предсказывают финальный результат

Теперь у вас есть базовое понимание что такое дерево решений. Мы рассмотрим как построить такое дерево с нуля в следующем разделе.
Как построить дерево решений с нуля

Построение дерева решений сложнее, чем может показаться. Это происходит потому что решение на какие разветвления (характеристики) делить ваши данные (что является темой из области энтропии и получения данных) — это математически сложная задача.

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

В общем случае, специалисты обычно выбирают размер случайного набора характеристик (обозначается m) так, чтобы он был квадратным корнем общего количества характеристик в наборе данных (обозначается р). Если коротко, то m — это квадратный корень из р и тогда конкретная характеристика случайным образом выбирается из m.

Выгоды использования случайного леса

Представьте, что вы работаете с множеством данных, у которого есть одна «сильная» характеристика. Иными словами, в этом множестве данных есть характеристика, которая намного более предсказуема в отношении конечного результата, чем остальные характеристики этого множества.

Если вы строите дерево решений вручную, то имеет смысл использовать эту характеристку для самого «верхнего» разделения в вашем дереве. Это значит, что у вас будет несколько деревьев, прогнозы которых сильно коррелируют.

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

Подведем итог

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

Метод опорных векторов(Support Vector Machines)


Метод опорных векторов это алгоритм классификации (хотя, технически говоря, они также могут быть использованы для решения регрессионных задач), который делит множество данных на категории в местах наибольших «разрывов» между категориями. Эта концепция станет более понятной, если разобрать следующий пример.
Что такое метод опорных векторов?

Метод опорных векторов (МОВ) — это модель МО с учителем, с соответствующими алгоритмами обучения, которые анализируют данные и распознают закономерности. МОВ может быть использован как для задач классификации, так и для регрессионного анализа. В этой статье мы посмотрим конкретно на использование метода опорных векторов для решения задач классификации.
Как МОВ работает?

Давайте капнем поглубже в то, как действительно работает МОВ.

Нам дан набор тренировочных примеров, какждый из которого промаркирован как принадлежащий к одной из 2х категорий, и с помощью этого набора МОВ строит модель. Эта модель распределяет новые примеры в одну из двух категорий. Это делает МОВ невероятностным двоичным линейным классификатором.

МОВ использует геометрию для составления прогнозов по категориям. Конкретнее модель метода опорных векторов сопоставляет точки данных как точки в пространстве и разделяет на отдельные категории так, что они разделяются настолько широким разрывом, насколько возможно. Прогноз принадлежности новых точек данных к определенной категории основывается на том, с какой стороны разрыва находится точка.

Вот пример визуализации, который поможет вам понять интуицию МОВ:

Как вы можете наблюдать, если новая точка данных падает на левую от зеленой линии сторону, то она будет отнесена к «красным», а если на правую — то к «синим». Эта зеленая линия называется гиперплоскостью, и является важным термином для работы с МОВ.

Давайте посмотрим следующее визуальное представление МОВ:

На этой диаграмме гиперплоскость обозначена как «оптимальная гиперплоскость» (optimal hyperplane). Теория метода опорных векторов дает такое определение оптимальной гиперплоскости — это гиперплоскость, которая максимизирует поле между двумя ближайшими точками данных из разных категорий.

Как вы видите, граница поля действительно затрагивает 3 точки данных — 2 из красной категории и 1 из синей. Эти точки, которые соприкасаются с границей поля, и называются опорными векторами — откуда и пошло название.

Подведем итог

Вот краткий очерк того, что вы только что узнали о методе опорных векторов:
  • МОВ — это пример алгоритма МО с учителем
  • Опорный вектор может быть использован для решения как задач классификации, так и для регрессионного анализа.
  • Как МОВ категоризирует данные с помощью гиперплоскости, которая максимизирует поле между категориями в наборе данных
  • Что точки данных, которые затрагивают границы разделяющего поля, называются опорными векторами. От чего и пошло название метода.

Метод К-средних (K-Means Clustering)


Метод К-средних — это алгоритм машинного обучения без учителя. Это значит, что он принимает непомеченные данные и пытается сгруппировать кластеры подобных наблюдений ваших данных. Метод К-средних крайне полезен для решения реальных прикладных задач. Вот примеры нескольких задач, подходящих для этой модели:
  • Сегментация клиентов для маркетинговых групп
  • Классификация документов
  • Оптимизация маршрутов доставки для таких компаний, как Amazon, UPS или FedEx
  • Выявление и реагирование на криминальные локации в городе
  • Профессиональная спортивная аналитика
  • Прогнозирование и предотвращение киберпреступлений

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

Вот визуальное представление того, как это выглядит на практике:

Мы изучим математическую составляющую метода К-средних вследующем разделе этой статьи.

Как работает метод К-средних?

Первый шаг в работе метода К-средних — это выбор количества групп на которое вы хотите разделить ваши данные. Этим количеством и является значение К, отраженное в названии алгоритма. Выбор значения К в методе К-средних очень важен. Чуть позже мы обсудим как выбрать правильное значение К.

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

  • Вычисление центроида (центр тяжести) каждого кластера взяв средний вектор точек в этом кластере
  • Переотнести каждую точку данных к кластеру, центроид которого ближе всего к точке

Выбор подходящего значения К в методе К-средних

Строго говоря, выбор подходящего значения К — это довольно сложно. Не существует «правильного» ответа в выборе «лучшего» значения К. Один из методов, который специалисты по МО часто используют, называется «методом локтя».

Для использования этого метода, первое, что вам необходимо сделать, это вычислить сумму квадратов отклонений(sum of squared errors) — СКО для вашего алгоритма для группы значений К. СКО в методе К-средних определена как сумма квадратов расстояний между каждой точкой данных в кластере и центром тяжести этого кластера.

В качестве примера этого шага, вы можете вычислить СКО для значений К 2, 4, 6, 8 и 10. Далее вы захотите сгенерировать график СКО и этих значений К. Вы увидите, что отклонение уменьшается с увеличением значения К.

И это имеет смысл: чем больше категорий вы создадите на основе множества данных — тем более вероятно, что каждая точка данных окажется близко к центру кластера этой точки.
С учетом сказанного, основная идея метода локтя — это выбрать значение К при котором СКО резко замедлит темпы снижения. Это резкое снижение образует «локоть» на графике.

Как пример, вот график СКО относительно К. В этом случае, метод локтя предложит использовать значение К примерно равное 6.

Важно, что К=6 просто оценка приемлемого значения К. Не существует «лучшего» значения К в методе К-средних. Как и многие вещи в области МО, это очень зависящее от ситуации решение.

Подведем итог

Вот краткий очерк того, что вы только что узнали в этом разделе:
  • Примеры задач МО без учителя, которые возможно решить методом К-средних
  • Базовые принципы метода К-средних
  • Как работает метод К-средних
  • Как использовать метод локтя для выбора подходящего значения параметра К в данном алгоритме

Метод главных компонент (Principal Component Analysis)


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

Метод главных компонент (МГК) — это техника МО, которая используется для изучения взаимосвязей между наборами переменных. Другими словами, МГК изучает наборы переменных для того, чтобы определить базовую структуру этих переменных. МГК еще иногда называют факторным анализом.

На основании этого описания вы можете подумать, что МГК очень схож с линейной регрессией. Но это не так. На самом деле, эти 2 техники имеют несколько важных отличий.

Различия линейной регрессии и МГК

Линейная регрессия определяет линию наилучшего соответствия через набор данных. Метод главных компонентов определяет несколько ортогональных линий наилучшего соответствия для набора данных.

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

Взгляните на метки осей на этом изображении. Главный компонент оси х объясняет 73% дисперсии в этом наборе данных. Главный компонент оси у объясняет около 23% дисперсии набора данных.

Это означает, что 4% дисперсии остается необъясненными. Вы можете уменьшить это число добавляя больше главных компонент в ваш анализ.

Подведем итог

Краткое содержание того, что вы только что узнали о методе главных компонент:
  • МГК пытается найти ортогональные факторы, которые определяют изменчивость в наборе данных
  • Разницу между линейной регрессией и МГК
  • Как выглядит ортогональные главные компоненты, визуализированные в наборе данных
  • Что добавление дополнительных главных компонент может помочь объяснить дисперсию более точно в наборе данных

Must-have алгоритмы машинного обучения / Хабр

Хабр, привет.

Этот пост — краткий обзор общих алгоритмов машинного обучения. К каждому прилагается краткое описание, гайды и полезные ссылки.

Метод главных компонент (PCA)/SVD


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

image

SVD — это способ вычисления упорядоченных компонентов.

Полезные ссылки:


Вводный гайд:

Метод наименьших квадратов


Метод наименьших квадратов — математический метод, применяемый для решения различных задач, основанный на минимизации суммы квадратов отклонений некоторых функций от искомых переменных. Он может использоваться для «решения» переопределенных систем уравнений (когда количество уравнений превышает количество неизвестных), для поиска решения в случае обычных (не переопределенных) нелинейных систем уравнений, а также для аппроксимации точечных значений некоторой функции.

image

Используйте этот алгоритм, чтобы соответствовать простым кривым/регрессии.

Полезные ссылки:


Вводный гайд:

Ограниченная линейная регрессия


Метод наименьших квадратов может смутить выбросами, ложными полями и т. д. Нужны ограничения, чтобы уменьшить дисперсию линии, которую мы помещаем в набор данных. Правильное решение состоит в том, чтобы соответствовать модели линейной регрессии, которая гарантирует, что веса не будут вести себя “плохо”. Модели могут иметь норму L1 (LASSO) или L2 (Ridge Regression) или обе (elastic regression).

image

Используйте этот алгоритм для соответствия линиям регрессии с ограничениями, избегая переопределения.

Полезная ссылка:


Вводные гайды:

Метод k-средних


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

image

Полезная ссылка:


Вводные гайды:

Логистическая регрессия


Логистическая регрессия ограничена линейной регрессией с нелинейностью (в основном используется сигмоидальная функция или tanh) после применения весов, следовательно, ограничение выходов приближено к + / — классам (что равно 1 и 0 в случае сигмоида). Функции кросс-энтропийной потери оптимизированы с использованием метода градиентного спуска.

Примечание для начинающих: логистическая регрессия используется для классификации, а не регрессии. В целом, она схожа с однослойной нейронной сетью. Обучается с использованием методов оптимизации, таких как градиентный спуск или L-BFGS. NLP-разработчики часто используют её, называя “классификацией методом максимальной энтропии”.

image

Используйте LR для обучения простых, но очень “крепких” классификаторов.

Полезная ссылка:


Вводный гайд:

SVM (Метод опорных векторов)


SVM – линейная модель, такая как линейная/логистическая регрессия. Разница в том, что она имеет margin-based функцию потерь. Вы можете оптимизировать функцию потерь, используя методы оптимизации, например, L-BFGS или SGD.

image

Одна уникальная вещь, которую могут выполнять SVM – это изучение классификаторов классов.

SVM может использоваться для обучения классификаторов (даже регрессоров).

Полезная ссылка:


Вводные гайды:

Нейронные сети прямого распространения


В основном, это многоуровневые классификаторы логистической регрессии. Многие слои весов разделены нелинейностями (sigmoid, tanh, relu + softmax и cool new selu). Также они называются многослойными перцептронами. FFNN могут быть использованы для классификации и “обучения без учителя” в качестве автоэнкодеров.

image

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

Полезные ссылки:


Вводные гайды:

Свёрточные нейронные сети


Практически все современные достижения в области машинного обучения были достигнуты с помощью свёрточных нейронных сетей. Они используются для классификации изображений, обнаружения объектов или даже сегментации изображений. Изобретенные Яном Лекуном в начале 90-х годов, сети имеют сверточные слои, которые действуют как иерархические экстракторы объектов. Вы можете использовать их для работы с текстом (и даже для работы с графикой).

image

Полезные ссылки:


Вводные гайды:

Рекуррентные нейронные сети (RNNs)


RNNs моделируют последовательности, применяя один и тот же набор весов рекурсивно к состоянию агрегатора в момент времени t и вход в момент времени t. Чистые RNN редко используются сейчас, но его аналоги, например, LSTM и GRU являются самыми современными в большинстве задач моделирования последовательности. LSTM, который используется вместо простого плотного слоя в чистой RNN.

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

Полезные ссылки:


Вводные гайды:

Условные случайные поля (CRFs)


Они используются для моделирования последовательности, как RNN, и могут использоваться в сочетании с RNN. Они также могут быть использованы в других задачах структурированных прогнозирования, например, в сегментации изображения. CRF моделирует каждый элемент последовательности (допустим, предложение), таким образом, что соседи влияют на метку компонента в последовательности, а не на все метки, независимые друг от друга.

Используйте CRF для связки последовательностей (в тексте, изображении, временном ряду, ДНК и т. д.).

Полезная ссылка:


Вводные гайды:

Деревья принятия решений и случайные леса


Один из самых распространённых алгоритмов машинного обучения. Используется в статистике и анализе данных для прогнозных моделей. Структура представляет собой “листья” и “ветки”. На “ветках” дерева решения записаны атрибуты, от которых зависит целевая функция, в “листьях” записаны значения целевой функции, а в остальных узлах – атрибуты, по которым различаются случаи.

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

Полезные ссылки:


Вводные гайды:
Больше информации о машинном обучении и Data Science вы узнаете подписавшись на мой аккаунт на Хабре и Telegram-канал Нейрон. Не пропускайте будущих статей.

Всем знаний!

Машинное обучение — Википедия

Машинное обучение (англ. machine learning, ML) — класс методов искусственного интеллекта, характерной чертой которых является не прямое решение задачи, а обучение в процессе применения решений множества сходных задач. Для построения таких методов используются средства математической статистики, численных методов, математического анализа, методов оптимизации, теории вероятностей, теории графов, различные техники работы с данными в цифровой форме.

Различают два типа обучения:

  1. Обучение по прецедентам, или индуктивное обучение, основано на выявлении эмпирических закономерностей в данных.
  2. Дедуктивное обучение предполагает формализацию знаний экспертов и их перенос в компьютер в виде базы знаний.

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

Многие методы индуктивного обучения разрабатывались как альтернатива классическим статистическим подходам. Многие методы тесно связаны с извлечением информации (англ. information extraction, information retrieval), интеллектуальным анализом данных (data mining).

Общая постановка задачи обучения по прецедентамПравить

Имеется множество объектов (ситуаций) и множество возможных ответов (откликов, реакций). Существует некоторая зависимость между ответами и объектами, но она неизвестна. Известна только конечная совокупность прецедентов — пар «объект, ответ», называемая обучающей выборкой. На основе этих данных требуется восстановить неявную зависимость, то есть построить алгоритм, способный для любого возможного входного объекта выдать достаточно точный классифицирующий ответ. Эта зависимость не обязательно выражается аналитически, и здесь нейросети реализуют принцип эмпирически формируемого решения. Важной особенностью при этом является способность обучаемой системы к обобщению, то есть к адекватному отклику на данные, выходящие за пределы имеющейся обучающей выборки. Для измерения точности ответов вводится оценочный функционал качества.

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

Способы машинного обученияПравить

Раздел машинного обучения, с одной стороны, образовался в результате разделения науки о нейросетях на методы обучения сетей и виды топологий их архитектуры, с другой стороны — вобрал в себя методы математической статистики. Указанные ниже способы машинного обучения исходят из случая использования нейросетей, хотя существуют и другие методы, использующие понятие обучающей выборки — например, дискриминантный анализ, оперирующий обобщённой дисперсией и ковариацией наблюдаемой статистики, или байесовские классификаторы. Базовые виды нейросетей, такие как перцептрон и многослойный перцептрон (а также их модификации), могут обучаться как с учителем, так и без учителя, с подкреплением и самоорганизацией. Но некоторые нейросети и большинство статистических методов можно отнести только к одному из способов обучения. Поэтому, если нужно классифицировать методы машинного обучения в зависимости от способа обучения, будет некорректным относить нейросети к определенному виду, правильнее было бы типизировать алгоритмы обучения нейронных сетей.

  1. Искусственная нейронная сеть
    1. Глубокое обучение
  2. Метод коррекции ошибки
  3. Метод обратного распространения ошибки
  4. Метод опорных векторов
  • Обучение без учителя — для каждого прецедента задаётся только «ситуация», требуется сгруппировать объекты в кластеры, используя данные о попарном сходстве объектов, и/или понизить размерность данных:
  1. Альфа-система подкрепления
  2. Гамма-система подкрепления
  3. Метод ближайших соседей
  1. Генетический алгоритм.
  • Активное обучение — отличается тем, что обучаемый алгоритм имеет возможность самостоятельно назначать следующую исследуемую ситуацию, на которой станет известен верный ответ:
  • Обучение с частичным привлечением учителя (англ. semi-supervised learning) — для части прецедентов задается пара «ситуация, требуемое решение», а для части — только «ситуация»
  • Трансдуктивное обучение — обучение с частичным привлечением учителя, когда прогноз предполагается делать только для прецедентов из тестовой выборки
  • Многозадачное обучение (англ. multi-task learning) — одновременное обучение группе взаимосвязанных задач, для каждой из которых задаются свои пары «ситуация, требуемое решение»
  • Многовариантное обучение (англ. multiple-instance learning) — обучение, когда прецеденты могут быть объединены в группы, в каждой из которых для всех прецедентов имеется «ситуация», но только для одного из них (причем, неизвестно какого) имеется пара «ситуация, требуемое решение»
  • Бустинг (англ. boosting — улучшение) — это процедура последовательного построения композиции алгоритмов машинного обучения, когда каждый следующий алгоритм стремится компенсировать недостатки композиции всех предыдущих алгоритмов.
  • Байесовская сеть

Классические задачи, решаемые с помощью машинного обученияПравить

Типы входных данных при обученииПравить

  • Признаковое описание объектов или матрица объекты-признаки — наиболее распространённый случай. Каждый объект описывается набором признаков.
  • Матрица расстояний между объектами. Каждый объект описывается расстояниями до всех остальных объектов обучающей выборки, чаще всего отношениями попарного сходства.
  • Временной ряд или сигнал. Последовательность измерений во времени, которое может представляться числом, вектором, а в общем случае — признаковым описанием в данный момент времени.
  • Изображение или видеоряд.

Типы функционалов качестваПравить

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

Практические сферы примененияПравить

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

Машинное обучение имеет широкий спектр приложений[источник не указан 2566 дней]:

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

  • Айвазян С. А., Енюков И. С., Мешалкин Л. Д. Прикладная статистика: основы моделирования и первичная обработка данных. — М.: Финансы и статистика, 1983.
  • Айвазян С. А., Енюков И. С., Мешалкин Л. Д. Прикладная статистика: исследование зависимостей. — М.: Финансы и статистика, 1985.
  • Айвазян С. А., Бухштабер В. М., Енюков И. С., Мешалкин Л. Д. Прикладная статистика: классификация и снижение размерности. — М.: Финансы и статистика, 1989.
  • Вапник В. Н. Восстановление зависимостей по эмпирическим данным. — М.: Наука, 1979.
  • Журавлев Ю. И., Рязанов В. В., Сенько О. В. «Распознавание». Математические методы. Программная система. Практические применения. — М.: Фазис, 2006. ISBN 5-7036-0108-8.
  • Загоруйко Н. Г. Прикладные методы анализа данных и знаний. — Новосибирск: ИМ СО РАН, 1999. ISBN 5-86134-060-9.
  • Флах П. Машинное обучение. — М.: ДМК Пресс, 2015. — 400 с. — ISBN 978-5-97060-273-7.
  • Шлезингер М., Главач В. Десять лекций по статистическому и структурному распознаванию. — Киев: Наукова думка, 2004. ISBN 966-00-0341-2.
  • Hastie, T., Tibshirani R., Friedman J. The Elements of Statistical Learning: Data Mining, Inference, and Prediction. — 2nd ed. — Springer-Verlag, 2009. — 746 p. — ISBN 978-0-387-84857-0..
  • Mitchell T. Machine Learning. — McGraw-Hill Science/Engineering/Math, 1997. ISBN 0-07-042807-7.
  • Ryszard S. Michalski, Jaime G. Carbonell, Tom M. Mitchell (1983), Machine Learning: An Artificial Intelligence Approach, Tioga Publishing Company, ISBN 0-935382-05-4 (Machine Learning: An Artificial Intelligence Approach в «Книгах Google»).
  • Vapnik V. N. Statistical learning theory. — N.Y.: John Wiley & Sons, Inc., 1998. [1]
  • Bernhard Schölkopf, Alexander J. Smola Learning with Kernels. Support Vector Machines, Regularization, Optimization, and Beyond. — MIT Press, Cambridge, MA, 2002 ISBN 978-0-262-19475-4 [2]
  • I. H. Witten, E. Frank Data Mining: Practical Machine Learning Tools and Techniques (Second Edition). — Morgan Kaufmann, 2005 ISBN 0-12-088407-0 [3]

11 must-have алгоритмов машинного обучения для Data Scientist

Статья содержит в себе список одиннадцати алгоритмов машинного обучения. К каждому прилагается краткое описание, гайды и полезные ссылки.

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

SVD — это способ вычисления упорядоченных компонентов.

Полезные ссылки:

Вводный гайд:

Метод наименьших квадратов — математический метод, применяемый для решения различных задач, основанный на минимизации суммы квадратов отклонений некоторых функций от искомых переменных. Он может использоваться для «решения» переопределенных систем уравнений (когда количество уравнений превышает количество неизвестных), для поиска решения в случае обычных (не переопределенных) нелинейных систем уравнений, а также для аппроксимации точечных значений некоторой функции.

11 must-have алгоритмов машинного обучения для Data Scientist
Используйте этот алгоритм, чтобы соответствовать простым кривым/регрессии.

Полезные ссылки:

Вводный гайд:

Метод наименьших квадратов может смутить выбросами, ложными полями и т. д. Нужны ограничения, чтобы уменьшить дисперсию линии, которую мы помещаем в набор данных. Правильное решение состоит в том, чтобы соответствовать модели линейной регрессии, которая гарантирует, что веса не будут вести себя “плохо”.
Модели могут иметь норму L1 (LASSO) или L2 (Ridge Regression) или обе (elastic regression).

 

Используйте этот алгоритм для соответствия линиям регрессии с ограничениями, избегая переопределения.

Полезная ссылка:

Вводные гайды:

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

Полезная ссылка:

Вводные гайды:

Логистическая регрессия ограничена линейной регрессией с нелинейностью (в основном используется сигмоидальная функция или tanh) после применения весов, следовательно, ограничение выходов приближено к + / — классам (что равно 1 и 0 в случае сигмоида). Функции кросс-энтропийной потери оптимизированы с использованием метода градиентного спуска.

Примечание для начинающих: логистическая регрессия используется для классификации, а не регрессии. В целом, она схожа с однослойной нейронной сетью. Обучается с использованием методов оптимизации, таких как градиентный спуск или L-BFGS. NLP-разработчики часто используют её, называя “классификацией методом максимальной энтропии”.

Вот так выглядит сигмоид:

 

11 must-have алгоритмов машинного обучения для Data Scientist

Используйте LR для обучения простых, но очень “крепких” классификаторов.

Полезная ссылка:

Вводный гайд:

SVM – линейная модель, такая как линейная/логистическая регрессия. Разница в том, что она имеет margin-based функцию потерь. Вы можете оптимизировать функцию потерь, используя методы оптимизации, например, L-BFGS или SGD.

11 must-have алгоритмов машинного обучения для Data Scientist

Одна уникальная вещь, которую могут выполнять SVM – это изучение классификаторов классов.

SVM может использоваться для обучения классификаторов (даже регрессоров).

Полезная ссылка:

Вводные гайды:

В основном, это многоуровневые классификаторы логистической регрессии. Многие слои весов разделены нелинейностями (sigmoid, tanh, relu + softmax и cool new selu). Также они называются многослойными перцептронами. FFNN могут быть использованы для классификации и “обучения без учителя” в качестве автоэнкодеров.

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

Полезные ссылки:

Вводные гайды:

Практически все современные достижения в области машинного обучения были достигнуты с помощью свёрточных нейронных сетей. Они используются для классификации изображений, обнаружения объектов или даже сегментации изображений. Изобретенные Яном Лекуном в начале 90-х годов, сети имеют сверточные слои, которые действуют как иерархические экстракторы объектов. Вы можете использовать их для работы с текстом (и даже для работы с графикой).

Полезные ссылки:

Вводные гайды:

RNNs моделируют последовательности, применяя один и тот же набор весов рекурсивно к состоянию агрегатора в момент времени t и вход в момент времени t. Чистые RNN редко используются сейчас, но его аналоги, например, LSTM и GRU являются самыми современными в большинстве задач моделирования последовательности.

LSTM, который используется вместо простого плотного слоя в чистой RNN.

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

Полезные ссылки:

Вводные гайды:

Они используются для моделирования последовательности, как RNN, и могут использоваться в сочетании с RNN. Они также могут быть использованы в других задачах структурированных прогнозирования, например, в сегментации изображения. CRF моделирует каждый элемент последовательности (допустим, предложение), таким образом, что соседи влияют на метку компонента в последовательности, а не на все метки, независимые друг от друга.

Используйте CRF для связки последовательностей (в тексте, изображении, временном ряду, ДНК и т. д.).

Полезная ссылка:

Вводные гайды:

Один из самых распространённых алгоритмов машинного обучения. Используется в статистике и анализе данных для прогнозных моделей. Структура представляет собой “листья” и “ветки”. На “ветках” дерева решения записаны атрибуты, от которых зависит целевая функция, в “листьях” записаны значения целевой функции, а в остальных узлах – атрибуты, по которым различаются случаи.

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

Полезные ссылки:

Вводные гайды:

Оригинал

Машинное обучение для самых маленьких

Если вы пытались разобраться самостоятельно, что же такое машинное обучение, но безрезультатно, это руководство — для вас.

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

Машинное обучение состоит в том, что исходные алгоритмы могут сами рассказать кое-что интересное о предоставленных данных, и вам не придётся писать для этого отдельный код. Вместо написания кода вы скармливаете данные исходному алгоритму, и он сам выстраивает логику на основании этих данных.

Возьмём, к примеру, алгоритм классификации. Он может разбивать данные на различные группы. Такой же алгоритм классификации, который используется для распознавания рукописных символов, может быть полезен для разделения электронных сообщений по группам «спам» и «не спам». И для этого не нужно менять ни одну строчку кода. Алгоритм один и тот же, но его обучают разными данными, и поэтому он выстраивает разную логику классификации.

Машинное обучение — это универсальный термин, который относится к огромному количеству исходных алгоритмов.

Два вида алгоритмов машинного обучения

В широком смысле все алгоритмы машинного обучения можно разбить на две большие группы:
алгоритмы обучения с учителем и алгоритмы обучения без учителя.

Обучение с учителем

Представьте, что вы агент по недвижимости. Ваш бизнес растёт, и вы нанимаете себе в подмогу новых агентов-стажёров. Но вот беда: вы-то можете с одного взгляда определить стоимость недвижимости, а вашим стажёрам опыта не хватает.

Чтобы помочь стажёрам и обеспечить себе хоть немного отдыха, вы решаете написать небольшое приложение, которое оценивает стоимость квартиры в вашем городе на основе её площади, расположения и стоимости подобных проданных квартир.

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


Так выглядят данные для нашего алгоритма

Используя эти данные, мы можем создать программу, которая спрогнозирует стоимость любой квартиры в вашем городе:

Это и называется обучением с учителем. Вы уже знаете, сколько стоила каждая проданная квартира; другими словами, вы знаете решение проблемы и вам остаётся только выстроить логику.

При создании приложения вы заносите полученные данные о каждой квартире в алгоритм машинного обучения. Задача алгоритма — выяснить, какое математическое действие нужно произвести над этими данными.

То, с чем работает алгоритм, выглядит как попытка восстановить информацию в этом примере:

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

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

Обучение без учителя

Вы снова тот самый предприимчивый агент по недвижимости. Что делать, если вы не знаете цену каждой квартиры? Хорошие новости: даже если вы знаете только площадь, количество комнат и расположение квартиры, вы уже можете совершить крутой анализ. Это и называется алгоритмом обучения без учителя.

Даже если вы не пытаетесь предсказать значение неизвестной переменной (например, цены), алгоритмы машинного обучения всё равно способны на кое-что интересное.

Представьте, что вам дают список чисел и говорят: «Понятия не имею, что эти числа означают, но если у тебя получится найти в них закономерность — ты молодец». Поиском этих закономерностей и занимается алгоритм обучения без учителя.

Итак, что можно сделать с имеющимися данными? Для начала можно создать алгоритм, который автоматически будет определять различные рыночные сегменты в ваших данных. Может быть, вы обнаружите, что покупатели квартир рядом с местным институтом предпочитают небольшие квартиры с большим количеством комнат, а покупатели загородных домов выбирают большую площадь. В дальнейшем продвижении ваших услуг знание о возможных предпочтениях клиентов сослужит вам неплохую службу.

Что ещё? Алгоритм может автоматически определить отдельные дома, которые не вписываются ни в одну из категорий. Может быть, эти дома окажутся шикарными особняками, и на них можно сконцентрировать продажи, чтобы получить большие комиссионные.

В нашем руководстве мы уделим внимание алгоритмам обучения с учителем. Вовсе не потому что алгоритмы обучения без учителя менее интересны или полезны. На самом деле даже наоборот — обучение без учителя становится всё более важным для изучения, поскольку такие алгоритмы могут использоваться без привязки данных к правильному ответу.

Неужели возможность спрогнозировать цену квартиры уже может считаться машинным обучением?

Человеческий мозг способен анализировать любую ситуацию и обучаться без каких-либо внешних указаний. Если вы, к примеру, долгое время занимаетесь продажей недвижимости, у вас разовьётся некое инстинктивное чувство на правильную цену для конкретной квартиры; нюх на клиентов и на выгодные сделки. Целью «сильного искусственного интеллекта» является как раз воссоздание такой способности человеческого мозга с вычислительными мощностями компьютера.

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

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

Если вы читаете эту статью лет через 50 после её публикации, она уже вам ничем не может быть полезна. Закрой её и попроси своего робота приготовить тебе сэндвич, человек будущего!

Может, у вас есть уже какие-то прикидки насчёт того, как бы вы написали программу, оценивающую стоимость квартиры на основе предоставляемых данных? Подумайте пару минут прежде, чем читать дальше.

Подумали? Приступим.

Если бы вы ничего не знали о машинном обучении, вы бы, скорее всего, попытались написать несколько простых правил, оценивающих стоимость дома:

# !/usr/bin/python
#  -*- coding: utf-8 -*-
def estimate_house_sales_price(num_of_bedrooms, sqm, neighborhood):
    price = 0
    #  Средняя цена квартиры в моем районе – 200$ за кв.м
    price_per_sqm = 200
    if neighborhood == "Арбат":
        #  В некоторых районах квартиры стоят дороже
        price_per_sqm = 400
    elif neighborhood == "Южное Бутово":
        #  В других районах квартиры стоят дешевле
        price_per_sqm = 100
    #  начнём с базовой оценки стоимости на основе общей площади квартиры
    price = price_per_sqm * sqm
    #  теперь уточним нашу оценку, указав количество комнат
    if num_of_bedrooms == 0:
        #  квартиры-студии стоят дешевле
        price = price — 20000
    else:
        #  квартиры с большим количеством комнат
        #  стоят дороже
        price = price + (num_of_bedrooms * 1000)
    return price

Если вы ещё несколько часов посидите над кодом (и если очень повезёт), вся эта мутотень заработает. При этом полученное решение будет далеко от идеала и будет постоянно нуждаться в доработке, ведь цены постоянно меняются.

А давайте обучим компьютер

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

# !/usr/bin/python
#  -*- coding: utf-8 -*-
def estimate_house_sales_price(num_of_bedrooms, sqm, neighborhood):
    price = <компьютер, сделай всё за меня>
    return price

Нужно подойти к решению совершенно иначе. Представим, что цена — это борщ, который нам нужно приготовить. Его ингредиенты — это количество комнат, общая площадь и расположение. Если вы сможете вычислить, какое количество каждого ингредиента влияет на общие вкусовые свойства борща (цены, вы помните, да?), вы сможете рассчитать и пропорции ингредиентов, которые образуют финальный результат (снова цену).

Это упростит ваш начальный код (со всеми этими безумными if и else), превратив его во что-то вроде:

# !/usr/bin/python
#  -*- coding: utf-8 -*-
def estimate_house_sales_price(num_of_bedrooms, sqm, neighborhood):
   price = 0
   #  добавим щепотку вот этого
   price += num_of_bedrooms * .841231951398213
   #  затем горсть вот этого
   price += sqm * 1231.1231231
   #  ещё ложечку вот этого
   price += neighborhood * 2.3242341421
   #  и немного пряностей
   price += 201.23432095
   return price

Обратите внимание на волшебные числа: .841231951398213, 1231.1231231,2.3242341421 и 201.23432095. Это наши коэффициенты. Если мы вычислим идеальные коэффициенты, которые будут работать для каждой квартиры, наша функция сама будет оценивать её стоимость!

Самый грубый способ рассчитать коэффициенты может выглядеть вот так:

Шаг 1:

Установим значения всех коэффициентов на 1.0:

# !/usr/bin/python
#  -*- coding: utf-8 -*-
def estimate_house_sales_price(num_of_bedrooms, sqm, neighborhood):
    price = 0
    #  добавим щепотку вот этого
    price += num_of_bedrooms * 1.0
    #  затем горсть вот этого
    price += sqm * 1.0
    #  ещё ложечку вот этого
    price += neighborhood * 1.0
    #  и немного пряностей
    price += 1.0
    return price

Шаг 2:

Теперь мы прогоним все известные нам выставленные на продажу квартиры через эту функцию и выясним, насколько правильно функция угадывает цену для каждой квартиры:

К примеру, если первую квартиру на самом деле купили за 250 000$, а ваша функция оценила её в 178 000 долларов, где-то по пути вы потеряли 72 000 долларов.

Теперь вычислите общую сумму потерь функции с каждой квартиры в вашей базе данных. Допустим, в вашей базе данных 500 лотов, и общая сумма составила 86 123 373$. Это степень ошибочности вашей функции.

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

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

Шаг 3:

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

Как просто, да? Всего-то нужно взять данные, провести их через три простых этапа и прийти в итоге к функции, которая выдаёт предположительную стоимость каждой квартиры в городе. У = Успех.

Но рано радоваться, юные друзья. Вот несколько фактов, которые убьют все надежды на светлое будущее нашего решения:

  1. За последние 40 лет исследования в сфере лингвистики/перевода доказали, что исходные обучающиеся алгоритмы оказываются значительно эффективнее, чем правила, созданные настоящими людьми. Машинное обучение в таких случаях побеждает человеческий подход.
  2. Функция, которую вы тут наизобретали, ничегошеньки не знает. Она не знает, что такое «квадратные метры» или «комнаты». Всё, что она умеет — это тасовать числа, чтобы получить нужное значение.
  3. Вы сами понятия не имеете, почему работает именно такая комбинация коэффициентов. Вы написали функцию, которую сами не понимаете, но которая работает.
  4. А теперь представьте, что вместо обработки параметров «квадратные метры» и «количество комнат» ваша предиктивная функция способна обработать массив чисел. Давайте представим, что каждое число представляет собой яркость одного пикселя в изображении, сделанном камерой, расположенной на крыше вашей машины. Представьте, что вместо «цены» ваша функция выводит значение «на сколько градусов нужно повернуть руль автомобиля». Стойте-стойте… Да это же функция, которая позволит создать самоуправляемый автомобиль!

А что насчёт «Пробуй все варианты, пока не сдохнешь» из шага 3?

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

Математики знают много изящных способов быстро найти годные значения без помощи бесконечного тупого перебора. Давайте поступим так:

  • Для начала напишем простое уравнение, которое заменяет собой действия в шаге 2 (нахождение погрешности):

  • Теперь немного видоизменим это уравнение, используя лексикон машинного обучения (пока не обращайте на это внимания):

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


График нашей функции выглядит как чаша. По вертикальной оси — значения погрешности

В этом графике нижней точкой (синей) является минимальная погрешность — именно здесь наша функция работает наиболее правильно. В верхних точках функция наиболее сурово ошибается. Так что, если мы найдём коэффициенты, приводящие нас к нижней точке графика, мы найдём решение!

Как будем искать минимальную погрешность?

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

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

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


Всё вышенаписанное — это достаточно грубое обобщение способа нахождения коэффициентов для функции, которое называется градиентным спуском.

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

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

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

К счастью, существует ещё тонна подходов, чтобы справиться с этим. Есть множество алгоритмов машинного обучения, которые работают с нелинейными данными (например, нейросети или метод опорных векторов). Даже ту же самую линейную регрессию можно использовать более мудро для более сложных линейных моделей. В любом случае, везде действует один и тот же принцип: найти лучшие коэффициенты для данной функции.

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

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

Как только вы увидите, как машинное обучение применяется к действительно сложным задачам (например, распознавание рукописного текста), у вас тут же возникнет обманчивое впечатление о том, что алгоритмы машинного обучения можно применять абсолютно во всех случаях, где у вас есть база данных. Просто даём алгоритму данные, а компьютер сам всё сделает!

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

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

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

Машинное обучение за год

Основы машинного обучения за неделю

Огромное спасибо Adam Geitgey за прекрасный пост на Medium

Перевод: Люся Ширшова.

Как работают искусственный интеллект, машинное и глубокое обучение :: РБК Тренды

Фото:Frank Augstein / AP

Фото: Frank Augstein / AP

Что значат эти понятия, в чем разница между ними, и в каких случаях уместно применять каждое?

Об авторе: Андрей Беляев, технический директор (CTO) исследовательской компании Neurodata Lab.

Умные дома, самоуправляемые автомобили, роботы-помощники… Нас окружают инновационные технологии, в основе которых лежат алгоритмы, по своей специфике напоминающие работу человеческого мозга. Их называют по-разному: алгоритмы с использованием машинного обучения, глубокого обучения, а иногда и вовсе искусственный интеллект (ИИ).

В чем разница между этими названиями?

Все задачи, которые может решать человек или компьютер, можно условно разделить на две категории: рутинные и нерутинные.

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

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

Получается, что машинное обучение — это обучение ИИ

Искусственный интеллект — это название не какого-то отдельного алгоритма, но скорее группы методов, которыми пользуются для решения различного рода задач. Алгоритмы, которые используют подходы с обучением, являются лишь одной из подгрупп всего того множества алгоритмов, что принято называть искусственным интеллектом.

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

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

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

Такие алгоритмы можно научить решать задачи любой сложности?

В теории — да. Но на практике мы сталкиваемся с большим количеством проблем, начиная от недостаточного количества данных для обучения, заканчивая невозможностью интерпретировать действия человека при решении такой же задачи. Получается, что невозможно построить алгоритм, который эти действия бы совершал. Хороший пример — автопилотируемый автомобиль. Научить машину держать полосу, входить в повороты и автоматически перестраивать маршрут, если на дороге ремонт, сравнительно несложно, потому что есть понимание, как вел бы себя человек (а значит, как должна вести себя машина) в таких ситуациях.

Как ездят беспилотники и так ли они надежны, как говорят Фото:Михаил Почуев / ТАСС

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

А что насчет глубокого обучения? Чем оно отличается от машинного?

Как машинное обучение является подвидом искусственного интеллекта, так и глубокое обучение является подвидом машинного (см. картинку в начале статьи). В глубоком обучении используются те же подходы: алгоритму дают много данных и «ругают» его за ошибки. Разница здесь в том, что сами алгоритмы глубокого обучения устроены гораздо сложнее и часто используют более серьезные математические модели. Сейчас под алгоритмами глубокого обучения практически всегда подразумевают нейронные сети.

Нейронные сети? Как те, что в мозгу у человека?

Такое сравнение действительно часто используется. Нейронная сеть — это последовательность слоев, каждый из которых, в свою очередь, состоит из нейронов, и каждый выполняет свою роль. Есть нейроны (или структуры нейронов), которые учатся выделять важные элементы на изображениях, например шерсть у кошки или собаки; есть те, которые учатся делать выводы, исходя из выделенных элементов — например, если у животного длинные лапы, то, скорее всего, это собака. Эти нейроны объединяются в группы (слои), а они превращаются в единую искусственную нейронную сеть.

Илон Маск придумал, как вживлять гаджеты в мозг. Подробности о Neuralink Фото:Aleksandra Sova / Shutterstock

И все же можно как-то сравнить процессы внутри нейросети с деятельностью мозга?

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

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

Богатое воображение: математики объяснили секреты человеческого зрения Фото:Michael Dziedzic / Unsplash

А как происходит процесс обучения?

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

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

Что значит «поощрять» и «штрафовать» нейросеть?

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

График зависимости между длительностью обучения (горизонтальная ось) и конечной ошибкой (вертикальная ось). Чем дольше мы учим нейросеть, тем меньше ошибка.

График зависимости между длительностью обучения (горизонтальная ось) и конечной ошибкой (вертикальная ось). Чем дольше мы учим нейросеть, тем меньше ошибка.

Во всех примерах вы рассказываете про конкретные задачи. А можно ли нейросеть научить думать, как человек?

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

Подписывайтесь и читайте нас в Яндекс.Дзене — технологии, инновации, эко-номика, образование и шеринг в одном канале.

алгоритмов машинного обучения | Знайте 8 лучших алгоритмов машинного обучения

Machine Learning Algorithms

Machine Learning Algorithms

Введение в алгоритмы машинного обучения

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

Categories-of-Machine-Learning

Categories-of-Machine-Learning

Категории алгоритмов машинного обучения

Область алгоритмов машинного обучения можно разделить на —

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

Отдел алгоритмов машинного обучения

Проблемы алгоритмов машинного обучения можно разделить на —

  • Регрессия — Между зависимыми и независимыми переменными существует непрерывная связь.Целевая переменная имеет числовой характер, тогда как независимые переменные могут быть числовыми или категориальными.
  • Классификация — Наиболее распространенная постановка проблемы, которую вы можете встретить в реальном мире, — это классификация точки данных на некоторый двоичный, полиномиальный или порядковый класс. В задаче двоичной классификации целевая переменная имеет только два результата (Да / Нет, 0/1, Истина / Ложь). В задаче полиномиальной классификации в целевой переменной есть несколько классов (Apple / Orange / Mango и т. Д.).В задаче порядковой классификации целевая переменная упорядочена (например,

10 лучших алгоритмов машинного обучения, которые необходимо знать в 2020 году

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

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

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

Вы энтузиаст ИИ и машинного обучения? Если да, то программа последипломного образования по искусственному интеллекту и машинному обучению идеально подходит для вашего карьерного роста.

Как изучение этих жизненно важных алгоритмов может улучшить ваши навыки машинного обучения

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

Существует три типа методов машинного обучения: обучение с учителем, обучение без учителя и обучение с подкреплением. Все три метода используются в этом списке из 10 распространенных алгоритмов машинного обучения:

Алгоритмы машинного обучения

1. Линейная регрессия

Чтобы понять, как работает этот алгоритм, представьте, как вы расположили бы случайные бревна в порядке возрастания их веса. Есть загвоздка; однако — вы не можете взвесить каждое бревно.Вам нужно угадать его вес, просто взглянув на высоту и обхват бревна (визуальный анализ), и расположить их, используя комбинацию этих видимых параметров. Вот на что похожа линейная регрессия.

В этом процессе устанавливается связь между независимыми и зависимыми переменными путем подгонки их к строке. Эта линия известна как линия регрессии и представлена ​​линейным уравнением Y = a * X + b.

В этом уравнении:

  • Y — зависимая переменная
  • a — Уклон
  • X — Независимая переменная
  • b — Перехват

Коэффициенты a и b получаются путем минимизации суммы квадратов разности расстояний между точками данных и линией регрессии.

2. Логистическая регрессия

Логистическая регрессия используется для оценки дискретных значений (обычно двоичных значений, таких как 0/1) из набора независимых переменных. Это помогает предсказать вероятность события, подгоняя данные к логит-функции. Это также называется логит-регрессией.

Эти методы, перечисленные ниже, часто используются для улучшения моделей логистической регрессии:

  • включить условия взаимодействия
  • исключить особенности
  • упорядочить методы
  • использовать нелинейную модель

3.Дерево решений

Это один из самых популярных алгоритмов машинного обучения, используемых сегодня; это контролируемый алгоритм обучения, который используется для классификации проблем. Он хорошо работает при классификации как категориальных, так и непрерывных зависимых переменных. В этом алгоритме мы разделяем совокупность на два или более однородных набора на основе наиболее значимых атрибутов / независимых переменных.

4. SVM (машина опорных векторов)

SVM — это метод классификации, при котором необработанные данные отображаются в виде точек в n-мерном пространстве (где n — количество имеющихся у вас функций).Затем значение каждой функции привязывается к определенной координате, что упрощает классификацию данных. Линии, называемые классификаторами, можно использовать для разделения данных и нанесения их на график.

5. Наивный байесовский

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

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

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

Сертификационный курс по машинному обучению
Чтобы стать инженером по машинному обучениюИзучите курс Machine Learning Certification Course

6. KNN (K- Ближайшие соседи)

Этот алгоритм может применяться как к задачам классификации, так и к задачам регрессии. Судя по всему, в отрасли Data Science он более широко используется для решения задач классификации.Это простой алгоритм, который хранит все доступные обращения и классифицирует любые новые обращения, принимая большинство голосов своих k соседей. Затем дело относится к тому классу, с которым у него больше всего общего. Это измерение выполняет функция расстояния.

KNN можно легко понять, сравнив его с реальной жизнью. Например, если вам нужна информация о человеке, имеет смысл поговорить с его или ее друзьями и коллегами!

На что следует обратить внимание перед выбором KNN:

  • KNN требует больших вычислительных ресурсов
  • Переменные должны быть нормализованы, иначе переменные более высокого диапазона могут повлиять на алгоритм
  • Данные все еще нуждаются в предварительной обработке.

7. К-средние

Это неконтролируемый алгоритм, который решает проблемы кластеризации. Наборы данных классифицируются на определенное количество кластеров (назовем это число K) таким образом, что все точки данных в кластере однородны и разнородны по сравнению с данными в других кластерах.

Как K-means формирует кластеры:

  • Алгоритм K-средних выбирает k точек, называемых центроидами, для каждого кластера.
  • Каждая точка данных образует кластер с ближайшими центроидами, т.е.е., K кластеров.
  • Теперь он создает новые центроиды на основе существующих членов кластера.
  • С помощью этих новых центроидов определяется ближайшее расстояние для каждой точки данных. Этот процесс повторяется до тех пор, пока центроиды не изменятся.

8. Случайный лес

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

Каждое дерево высаживают и выращивают следующим образом:

  • Если количество наблюдений в обучающем наборе равно N, то выборка из N случаев выбирается случайным образом. Этот образец будет обучающим набором для выращивания дерева.
  • Если имеется M входных переменных, указывается число m << M, так что в каждом узле m переменных выбираются случайным образом из M, и для разделения узла используется наилучшее разбиение по этому m. В течение этого процесса значение m остается постоянным.
  • Каждое дерево выращено в максимально возможной степени.Обрезки нет.

9. Алгоритмы уменьшения размерности

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

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

10. Повышение градиента и AdaBoost

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

Короче говоря, он объединяет несколько слабых или средних предикторов для построения сильного предиктора. Эти алгоритмы повышения всегда хорошо работают на соревнованиях по науке о данных, таких как Kaggle, AV Hackathon, CrowdAnalytix.На сегодняшний день это наиболее предпочтительные алгоритмы машинного обучения. Используйте их вместе с кодами Python и R для достижения точных результатов.

Карьерное руководство по машинному обучению
Подробное руководство, чтобы стать инженером по машинному обучениюЗагрузить сейчас Machine Learning Career Guide

Заключение

Если вы хотите построить карьеру в области машинного обучения, начните прямо сейчас. Область расширяется, и чем раньше вы поймете возможности инструментов машинного обучения, тем скорее вы сможете найти решения сложных рабочих проблем.Однако, если у вас есть опыт работы в этой области и вы хотите повысить свою карьеру, вы можете принять участие в программе последипломного образования в области искусственного интеллекта и машинного обучения в партнерстве с Университетом Пердью, сотрудничающим с IBM. Эта программа дает вам глубокие знания в области Python, глубокого обучения с использованием тензорного потока, обработки естественного языка, распознавания речи, компьютерного зрения и обучения с подкреплением.

Посмотрите видеоролик Simplilearn по «Алгоритму машинного обучения».

Учись бесплатно! Подпишитесь на наш канал YouTube и станьте частью сообщества более 400 тысяч счастливых учащихся.

”Get

Классификация машинного обучения — 8 алгоритмов для кандидатов в науку о данных

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

Подождите! Я рекомендую вам сначала изучить Типы алгоритмов машинного обучения

Алгоритмы классификации машинного обучения

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

Machine Learning Classification Algorithms

1. Алгоритм логистической регрессии

Мы используем логистическую регрессию для двоичной классификации точек данных. Мы выполняем категориальную классификацию так, чтобы результат принадлежал одному из двух классов (1 или 0). Например — мы можем предсказать, пойдет ли сегодня дождь или нет, исходя из текущих погодных условий.

Двумя важными частями логистической регрессии являются гипотеза и сигмовидная кривая . С помощью этой гипотезы мы можем определить вероятность события. Данные, полученные на основе этой гипотезы, могут соответствовать логарифмической функции, которая создает S-образную кривую, известную как «сигмоид». Используя эту функцию журнала, мы можем дополнительно предсказать категорию класса.

Сигмоид можно представить следующим образом:

logistic regression algorithm graph - Machine Learning Classification

График получен с помощью логистической функции:

1 / (1 + e ^ -x)

Буква «e» в приведенном выше уравнении представляет собой S-образную кривую, которая имеет значения от 0 до 1.(b0 + b1 * x))

В приведенном выше уравнении b0 и b1 — два коэффициента входа x. Мы оцениваем эти два коэффициента, используя «оценку максимального правдоподобия».

Научитесь реализовывать логистическую регрессию с помощью класса sklearn с алгоритмами машинного обучения на Python

2. Наивный байесовский алгоритм

Наивный байесовский алгоритм — один из мощных алгоритмов машинного обучения, который используется для классификации. Это расширение теоремы Байеса, в котором каждая функция предполагает независимость.Он используется для множества задач, таких как фильтрация спама и другие области классификации текста.

Наивный алгоритм Байеса полезен для:

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

Наивный байесовский метод, однако, имеет следующие недостатки:

  • Если категориальная переменная принадлежит к категории, которая не отслеживалась в обучающем наборе, то модель даст ей вероятность 0, что помешает ей делать какие-либо прогнозы.
  • Наивный Байес предполагает независимость между своими особенностями. В реальной жизни сложно собрать данные, включающие полностью независимые функции.

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

3.Алгоритм дерева решений

Алгоритмы

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

Предположим, вам нужно пойти на рынок, чтобы купить какой-то товар. Сначала вы оцените, действительно ли вам нужен товар. Предположим, вы купите шампунь, только если он у вас закончится.Если у вас нет шампуня, вы оцените погоду на улице и посмотрите, идет ли дождь или нет. Если не будет дождя, вы поедете, иначе — нет. Мы можем визуализировать это в виде дерева решений следующим образом:

Decision Trees Example - Machine Learning Classification Algorithms

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

Овладейте концепцией дерева принятия решений R с его созданием

4. Алгоритм K-ближайших соседей

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

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

5. Машинный алгоритм опорных векторов

Support Vector Machines — это тип контролируемого алгоритма машинного обучения, который обеспечивает анализ данных для классификации и регрессионного анализа. Хотя их можно использовать для регрессии, SVM в основном используется для классификации. Строим изображения в n-мерном пространстве.Значение каждого объекта также является значением указанной координаты. Затем мы находим идеальную гиперплоскость, которая различает эти два класса.

Эти опорные векторы являются координатными представлениями индивидуального наблюдения. Это пограничный метод разделения двух классов.

Support Vector Machine (SVM) Frontier Method - machine learning classification algorithms

Пора стать экспертом в реализации SVM на Python

6. Алгоритм случайного леса

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

Ниже перечислены некоторые преимущества и недостатки случайных классификаторов лесов:

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

Недостатки — Случайные леса показывают предсказание в реальном времени, но это медленный характер. Они также сложны в реализации и имеют сложный алгоритм.

Вы должны научиться разрабатывать случайный лес в программировании на R

7. Алгоритм стохастического градиентного спуска

Стохастический градиентный спуск (SGD) — это класс алгоритмов машинного обучения, который подходит для крупномасштабного обучения. Это эффективный подход к дискриминативному обучению линейных классификаторов с использованием выпуклой функции потерь, которая является линейной (SVM) и логистической регрессией.5 функций.

Ниже приведены преимущества стохастического градиентного спуска:

  • Эти алгоритмы эффективны.
  • Мы можем довольно легко реализовать эти алгоритмы.

Однако стохастический градиентный спуск (SGD) страдает следующими недостатками:

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

8. Алгоритм аппроксимации ядра

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

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

Сводка

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

Хотите знать, что дальше? Не волнуйтесь, вот лучшие инструменты машинного обучения для повышения квалификации

Как была статья о классификации машинного обучения? Если вам понравилось, поделитесь им в социальных сетях с друзьями.

Изучите типы алгоритмов машинного обучения с оптимальными вариантами использования

В этой статье мы изучим различные типы алгоритмов машинного обучения и варианты их использования. Мы изучим, как Baidu использует распознавание лиц на основе контролируемого обучения для интеллектуальной регистрации в аэропорту и как Google использует обучение с подкреплением для разработки интеллектуальной платформы, которая ответит на ваши запросы.

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

machine learning algorithms

Что такое машинное обучение?

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

Machine learning tutorial

Подождите! Вы проверили практическое применение машинного обучения?

Типы машинного обучения

В этом руководстве мы обсудим три важных типа алгоритмов машинного обучения —

  • Обучение с учителем
  • Обучение без учителя
  • Обучение с подкреплением

Обучение с учителем

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

supervised learning - Ml algorithm

Результат Алгоритмы обучения с учителем ориентированы на выполнение задач. По мере того, как мы предоставляем ему все больше и больше примеров, он может лучше учиться, чтобы он мог выполнять задачу и давать нам более точные результаты.Вот некоторые из алгоритмов, которые подпадают под контролируемое обучение:

Линейная регрессия

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

Случайный лес

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

Повышение градиента

Gradient Boosting — это метод ансамблевого обучения, который представляет собой набор нескольких слабых деревьев решений, в результате чего получается мощный классификатор.

Машина опорных векторов
SVM

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

Логистическая регрессия

Он использует колоколообразную S-кривую, которая генерируется с помощью функции логита для категоризации данных по соответствующим классам.

Искусственные нейронные сети

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

Детально изучить все эти алгоритмы можно бесплатно. Ознакомьтесь с библиотекой учебников по машинному обучению DataFlair и начните осваивать концепции на реальных примерах БЕСПЛАТНО

Пример использования контролируемого обучения

Распознавание лиц — одно из самых популярных приложений контролируемого обучения, а точнее — искусственных нейронных сетей.Сверточные нейронные сети (CNN) — это тип ANN, используемый для идентификации лиц людей. Эти модели могут извлекать элементы из изображения с помощью различных фильтров. Наконец, если имеется высокий показатель сходства между входным изображением и изображением в базе данных, обеспечивается положительное совпадение.

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

Подождите! Разве вы не читали наш ведущий блог о сверточных нейронных сетях?

Обучение без учителя

В случае алгоритма обучения без учителя данные явно не помечаются по различным классам, то есть метки отсутствуют.Модель способна учиться на данных, находя неявные шаблоны. Алгоритмы неконтролируемого обучения идентифицируют данные на основе их плотности, структуры, аналогичных сегментов и других аналогичных характеристик. Алгоритмы неконтролируемого обучения основаны на изучении Hebbian. Кластерный анализ — один из наиболее широко используемых методов обучения с учителем. Давайте посмотрим на некоторые из важных алгоритмов, которые входят в неконтролируемое обучение.

unsupervised learning - Ml Algorithm

Кластеризация

Кластеризация , также известная как кластерный анализ, представляет собой метод группировки похожих наборов объектов в одну группу, которая отличается от объектов в другой группе.Вот некоторые из основных методов кластеризации —

а. К-средства

Цель алгоритма кластеризации k-средних состоит в том, чтобы разделить n наблюдений в данных на k кластеров так, чтобы каждое наблюдение принадлежало кластеру с ближайшим средним. Это служит прототипом кластера.

г. DBSCAN

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

г. Иерархическая кластеризация

В этой форме кластеризации строится иерархия кластеров.

Обнаружение аномалий

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

Автоэнкодеры

Автоэнкодеры — это тип нейронных сетей, которые используются в неконтролируемом обучении для обучения представлениям.Они используются для шумоподавления и уменьшения размерности.

Сеть глубокого убеждения

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

Анализ главных компонентов

Это класс парадигм обучения без учителя, который используется для уменьшения размеров данных.

Пример использования обучения без учителя

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

Одна из таких компаний, которая выполняет маркетинговую аналитику бренда с использованием машинного обучения , является израильским стартапом Optimove.Цель этой компании — получать и обрабатывать данные о клиентах, чтобы сделать их доступными для маркетологов. Они делают еще один шаг вперед, предоставляя маркетинговую команду умным идеям, позволяя им получать максимальную прибыль от маркетинга своей продукции.

machine algorithm - Unsupervised learning

Обучение с подкреплением

reinforcement learning in ML

Обучение с подкреплением охватывает большую часть из Искусственный интеллект , который позволяет машинам взаимодействовать со своей динамической средой для достижения своих целей.Благодаря этому машины и программные агенты могут оценить идеальное поведение в конкретном контексте. С помощью этой обратной связи с вознаграждением агенты могут изучить поведение и улучшить его в долгосрочной перспективе. Эта простая обратная связь известна как сигнал подкрепления.

agent environment reinforcement learning

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

Пример использования обучения с подкреплением

Система Google Active Query Answering (AQA) использует обучение с подкреплением. Система Google AQA переформулирует вопросы, задаваемые пользователем. Например, если вы зададите боту AQA вопрос — «Какова дата рождения Николы Теслы?», То бот переформулирует его в другие вопросы, такие как «Какой год рождения Николы Тесла», «Когда родился Тесла?» и «Когда день рождения Теслы».В этом процессе переформулирования использовалась традиционная модель последовательность-последовательность, но Google интегрировал обучение с подкреплением в свою систему, чтобы лучше взаимодействовать с системой среды на основе запросов.

Это отклонение от традиционной модели seq2seq, в котором все задачи выполняются с использованием методов обучения с подкреплением и методов градиента политики. То есть на данный вопрос q0 мы хотим получить наилучший ответ a *. Цель состоит в том, чтобы максимизировать вознаграждение a * = argmaxa R (ajq0).

Сводка

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

Надеюсь, статья вам понравилась. Если есть что-то, что вы хотите узнать о типах алгоритмов машинного обучения, спросите в разделе комментариев.

После изучения различных типов алгоритмов машинного обучения я рекомендую вам изучить различные инструменты обучения M и инструменты обучения .

Алгоритмы машинного обучения для бизнес-приложений — Полное руководство

Deep Learning Applications in Medical Imaging 8

С развитием бесплатных инструментов машинного обучения и искусственного интеллекта с открытым исходным кодом, таких как Google TensorFlow и sci-kit Learn, а также продуктов «ML-as-a-service» Подобно API-интерфейсу Google Cloud Prediction и платформе машинного обучения Microsoft Azure, компаниям любого размера никогда не было так просто использовать всю мощь данных.Но машинное обучение — такая обширная и сложная область. С чего вы начнете учиться использовать это в своем бизнесе?

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

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

Классификация

Цель: Цель алгоритмов классификации состоит в том, чтобы поместить элементы в определенные категории и ответить на такие вопросы, как: Является ли эта опухоль злокачественной? Это спам по электронной почте? Будет ли этот соискатель кредита не дефолт? Что это за категория статьи? К какой демографии относится этот онлайн-клиент?

Байесовский классификатор

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

Хотя байесовские классификаторы можно использовать для любой задачи классификации, они особенно полезны при классификации документов, особенно с фильтрами спама. Например, компьютерный ученый и знаменитый стартап-инвестор Пол Грэм разработал простой байесовский спам-фильтр, который уловил более 99.5 процентов его спама без ложных срабатываний (электронные письма, не относящиеся к спаму, ошибочно помечены как спам). Функции, которые использовал Грэм, включали слова в электронных письмах, заголовки электронных писем и наличие встроенного HTML и JavaScript.

Грэм дает хорошую иллюстрацию того, как работает спам-фильтр, извлекая 15 наиболее интересных функций или 15 функций, которые были либо наиболее сильными индикаторами спама (вес, близким к 1,0), либо самыми слабыми индикаторами спама (вес близко к 0.0).

В следующей таблице представлены интересные особенности одного из спам-писем Грэма:

9066 9032 очень ценный
Характеристика Значение Интерпретация
мадам 0,99 мадам 0,99 0,99 Спам
республика 0,99 Спам
самый короткий 0.05 Not-Spammy
обязательный 0,05 Not-Spammy
стандартизация 0,07 Not-Spammy
Spam 0,09 Не-спам
люди 0,09 Не-спам
введите 0,91 Спам
качество 0.89 Спам
организация 0,12 Не спам
инвестиции 0,86 Спам
очень6 0,156 0,15 Спам

Объединение этих вероятностей с помощью правила Байеса дает вероятность 0,90, что означает, что письмо, скорее всего, является спамом.

Байесовские классификаторы эффективны даже для сложных задач классификации документов.Стэнфордское исследование показало, что наивный байесовский классификатор («наивный» происходит от классификатора, предполагающего, что каждое слово не зависит от появления любого другого слова) был на 85% точен при анализе тональности твитов. Другое исследование MIT показало, что наивный байесовский классификатор может точно классифицировать статьи в студенческой газете MIT в 77% случаев. Другие возможные применения включают определение авторства и даже прогнозирование рецидива или прогрессирования опухоли мозга после лечения.

Плюсы:

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

Минусы:

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

Классификатор дерева решений

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

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

Напиток горячий или холодный?

Холодно.

Это кофеин или без кофеина?

С кофеином.

Это газированная («газированная»)?

Не газированный.

Это было сделано из бобов или листьев?

Изготовлен из листьев.

Окончательная классификация: холодный чай

Ключом к эффективному дереву решений является наличие утверждений, которые хорошо разделяют набор данных, то есть чем более однородны данные после каждого деления, тем лучше это деление. Существует несколько показателей, которые можно использовать для определения того, как разделить дерево решений. Двумя наиболее распространенными являются энтропия и примесь Джини. Используя алгоритм под названием CART (Деревья классификации и регрессии), каждый уровень дерева разделяется с помощью атрибута, который вызывает наибольшее сокращение выбранной метрики.Этот процесс повторяется до тех пор, пока дальнейшие разбиения не перестанут уменьшать эту метрику, и дерево не будет завершено!

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

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

Другие примеры приложений: BP использовала дерево решений для разделения нефти и газа и «заменила созданную вручную систему правил… [дерево решений] превзошло человеческих экспертов и сэкономило BP миллионы.В исследовании Массачусетского технологического института изучалось, как можно использовать деревья решений, чтобы предсказать, получит ли заявитель ссуду и не выполнит ли он свой долг.

Плюсы:

  • Очень легко интерпретировать и объяснять. Деревья решений отражают процесс принятия решений человеком через свой стиль блок-схемы «если-то», в котором данные разделяются на части до тех пор, пока данные не будут распределены по категориям.
  • Может отображаться графически. Дерево решений, по сути, представляет собой схему ветвления (только та, которая алгоритмически настроена для оптимального разделения), а меньшие деревья решений, отображаемые графически, могут быть легко интерпретированы даже нетехническими людьми.
  • Может легко использовать как категориальные, так и числовые данные; например, эта машина красного цвета работает так же хорошо, как «Диаметр шины автомобиля составляет от шести до восьми дюймов»? В других классификаторах вам нужно будет создать «фиктивную» переменную, чтобы обойти это.
  • Может иметь дело с взаимодействиями переменных. В примере с «интернет-аптекой», который поставил в тупик байесовский классификатор выше, дерево решений могло бы разделить набор данных о том, содержит ли он мир «онлайн», и разделить результат по тому, содержит ли он «аптеку», гарантируя, что «интернет-аптека» »= Спам, а« в сети »и« аптека »= не спам.

Минусы:

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

Машины опорных векторов

Машины опорных векторов (SVM) — это сложный, но мощный метод классификации. Работая с числовыми данными, SVM классифицирует, находя разделительную линию (формально называемую гиперплоскостью с максимальным запасом), которая разделяет данные наиболее четко. Это не всегда очевидно по своей сути, поэтому иногда полиномиальное преобразование (преобразование данных по разным осям — например, вместо построения графика GPA vs.Оценка SAT для прогнозирования поступления студента в определенный университет, вы можете преобразовать данных, построив квадрат среднего балла по сравнению с квадратом оценки SAT) используется для преобразования данных в другое пространство, где разделительная линия будет более четкой .

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

Пример: SVM часто используются с очень сложными данными для таких приложений, как распознавание почерка, классификация выражений лица и классификация изображений. Например, SVM может распознавать цифры, написанные арабским / персидским шрифтом, с точностью 94%. В этом случае было 10 классов (0, 1, 2, 3… 9), и SVM оперировала цифрой за цифрой, чтобы классифицировать каждую рукописную цифру в один из этих классов. В этом случае SVM была более точной, чем нейронная сеть.

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

Плюсы:

  • Очень быстро при классификации новых данных. Нет необходимости просматривать данные обучения для новых классификаций.
  • Может работать со смесью категориальных и числовых данных.
  • SVM являются «устойчивыми к высокой размерности», что означает, что они могут хорошо работать даже с большим количеством функций.
  • Высокая точность.

Минусы:

  • Техника черного ящика. В отличие от байесовских классификаторов и деревьев решений, SVM не предлагают легко усваиваемые данные «изнутри».SVM может быть очень эффективным классификатором, но вы не сможете понять , почему он делает эти классификации.
  • Обычно требуется очень большой набор данных. Другие методы, такие как деревья решений, по-прежнему могут давать интересные результаты для небольших наборов данных; это может быть не в случае с SVM.
  • SVM не находятся в сети . Их нужно будет обновлять каждый раз, когда будут добавлены новые данные обучения.

Нейронные сети

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

В человеческом мозге нейроны передают информацию, образуя связи с другими нейронами и передавая электрохимические сигналы через эти нейронные сети. Искусственные нейронные сети (также более просто нейронные сети или нейронные сети)

Существует много разных типов нейронных сетей, поэтому для простоты мы рассмотрим только одну, называемую многослойной перцептронной нейронной сетью (MLP NN). MLP NN содержит как минимум три (но часто и больше) слоев нейронов: входной слой, один или несколько скрытых слоев и выходной слой.Входной слой состоит из данных, которые вы используете для создания прогноза. Скрытые слои, названные потому, что они не взаимодействуют напрямую ни с вводом, ни с окончательным выводом, работают с данными, переданными им предыдущими слоями, а выходной слой является окончательным прогнозом, созданным алгоритмом.

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

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

Веса синапсов могут быть изначально назначены случайным образом, а затем обучены с помощью метода, известного как обратного распространения .MLP NN получает данные, для которых известен правильный результат, например изображение тигра и классификацию «тигр». Если MLP NN неправильно классифицирует изображение, вес синапсов, которые привели бы к классификации «тигра», немного увеличится, в то время как вес синапсов, которые приводят к другим классификациям, немного уменьшится. При достаточном количестве обучающих данных веса синапсов в конечном итоге сходятся к своим оптимальным значениям, и (в идеале) MLP NN теперь классифицирует изображения тигров с высоким уровнем точности.

Несмотря на то, что нейронные сети, несомненно, являются наиболее сложным из обсуждаемых здесь алгоритмов машинного обучения, они также являются наиболее захватывающей и активной областью исследований в области машинного обучения сегодня. Благодаря значительному увеличению наборов данных и вычислительной мощности, доступной сегодня, Deep Learning , который включает нейронные сети со многими уровнями, может быть применен ко многим сложным наборам данных, таким как аудио и изображения.

В приложениях для нейронных сетей нет недостатка, и некоторые из крупнейших игроков отрасли применяют их для создания передовых решений: Amazon использует нейронные сети для выработки рекомендаций по продуктам; Госпиталь Массачусетса использует глубокое обучение для улучшения диагностики и лечения пациентов; Facebook использует глубокие нейронные сети для распознавания лиц; Google поддерживает Google Translate с нейронными сетями.

Плюсы:

  • Высокая масштабируемость. С массивными наборами данных другие алгоритмы могут (в конечном итоге) выйти на плато в производительности (см. Это изображение из слайд-шоу, представленного доктором Эндрю Нг, главным научным сотрудником Baidu), в то время как производительность нейронной сети может продолжать улучшаться.
  • онлайн метод . Нейронные сети можно постепенно обучать с использованием новых данных.
  • Эффективное использование пространства. Как и байесовские классификаторы, они представлены списком чисел (для байесовских классификаторов этот список представляет вероятности признаков; для нейронных сетей они представляют веса синапсов)

Минусы:

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

Логистическая регрессия

Логистическая регрессия — это алгоритм классификации, который использует свойства логистической функции (иногда также называемой сигмовидной функцией), кривой S-образной формы, которая типична плато на обоих краях функция и быстрый рост в середине.Веса присваиваются характеристикам, а затем передаются логистической функции, которая выводит число от 0 до 1. Граница решения определяет классификацию. Например, если вы используете логистическую регрессию для прогнозирования мошеннических транзакций по кредитным картам, вы можете определить, что результат ниже 0,5 является законной транзакцией, а результат выше 0,5 — мошеннической. Граница вашего решения — 0,5.

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

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

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

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

Плюсы:

  • Легко интерпретировать. Логистическая регрессия выводит число от 0 до 1, которое можно примерно интерпретировать как вероятность (0,312 можно интерпретировать как 31,2% вероятность того, что транзакция по кредитной карте будет мошеннической). Веса признаков легко указывают, какие признаки более важны при определении классификации, чем другие.

Минусы:

  • Склонен к переобучению . Для логистической регрессии может потребоваться довольно большой обучающий набор, прежде чем он сможет делать точные прогнозы вне обучающего набора.
  • Не онлайн техника. Включение новых данных требует повторного запуска градиентного спуска.
  • Есть компромиссы с градиентным спуском. Чем быстрее градиентный спуск определяет окончательные веса признаков, тем больше вероятность пропуска оптимальных весов.Иногда бывает сложно найти компромисс между оптимальной скоростью и точностью, а метод проб и ошибок может занять много времени.
  • Фиктивные переменные, необходимые для категориальных данных. Поскольку логистическая регрессия дает только результат с действительным знаком, категориальные данные должны быть преобразованы в реальные значения с помощью фиктивной переменной (например, преобразование «красный или не красный» в «1 или 0», где красный = 1, а не красный = 0).

Линейная регрессия

Линейная регрессия — это знакомый алгоритм, который пытается создать линию, наиболее подходящую для набора данных, и использовать эту линию для создания новых прогнозов.Именно линейная функция (представьте, что y = mx + b из школьной алгебры, где x — характеристика, а m — вес функции), которая минимизирует ошибку, определяемую функцией стоимости (обычно функцией суммы квадратов ошибок). Простая линейная регрессия использует только одну переменную и, таким образом, ограничена в своем объеме, но многопараметрическая линейная регрессия позволяет справиться с гораздо более сложными проблемами. Как и логистическая регрессия, градиентный спуск часто используется для определения оптимальных весов признаков.

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

Плюсы:

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

Минусы:

  • Компромисс градиентного спуска.Как и в случае с логистической регрессией, градиентный спуск требует компромисса между скоростью и точностью, и для его правильного выполнения может потребоваться много итераций методом проб и ошибок.
  • Не онлайн техника. Включение новых данных требует повторного запуска градиентного спуска.
  • Фиктивные переменные, необходимые для категориальных данных. Поскольку линейная регрессия дает только результат с действительным знаком, категориальные данные должны быть преобразованы в реальные значения с помощью фиктивной переменной (например, преобразование «красный или не красный» в «1 или 0», где красный = 1, а не красный = 0).

K-ближайших соседей

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

По сути, так работают K-ближайшие соседи. Он сравнивает новый фрагмент данных с данными с аналогичными значениями, а затем усредняет «соседние» элементы, чтобы предсказать значение новых данных. «Расстояние» между точками данных определяется такими показателями, как Евклидово расстояние или корреляция Пирсона.

«K» в K-ближайших соседях — это значение-заполнитель для количества ближайших значений, усредненных для прогнозирования. Алгоритм также может использовать средневзвешенные значения, когда близкие значения имеют больший вес при определении среднего. Переменные могут нуждаться в масштабировании — например, при прогнозировании цен на жилье с использованием количества спален и квадратных футов вы можете использовать квадратные метры и количество спален, умноженные на 1000, чтобы сохранить две переменные в одном масштабе.

K-ближайших соседей можно использовать для прогнозирования цен на жилье (как показано в упрощенном примере выше), цен на товары на рынках (как в примере с бейсбольной карточкой выше), а также для составления рекомендаций по продуктам.

Плюсы:

  • Онлайн техника. Подобно наивному байесовскому классификатору, K-ближайших соседей поддерживает инкрементное обучение.
  • Может обрабатывать сложные числовые функции, при этом их легко интерпретировать.Вы можете точно видеть, какие соседи используются для окончательных прогнозов.
  • Полезно, если сбор данных сложно / дорого. Процесс масштабирования может выявить, какие переменные не важны для прогнозирования и, следовательно, могут быть исключены.

Минусы:

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

Заключение

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

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

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

  1. TensorFlow, ИИ-фреймворк Google с открытым исходным кодом
  2. scikit-learn, библиотека машинного обучения Python с открытым исходным кодом
  3. Google Cloud Prediction API, часть облачной платформы Google
  4. Машинное обучение Azure, часть облачных предложений Microsoft
  5. Cloudera, платформа для обработки больших данных со встроенными возможностями управления и обработки данных

Важно отметить, что из-за ограничений объема / объема существует несколько алгоритмов и тем машинного обучения, которые мы здесь не рассмотрели:

Хотите узнать больше о том, как применить машинное обучение в своем бизнесе или отрасли? Следующие руководства и статьи по Emerj — хорошее место для начала:

  1. Искусственный интеллект и безопасность: текущие приложения и возможности будущего
  2. Как применить машинное обучение к бизнес-задачам
  3. Машинное обучение и финансы — настоящие и будущие приложения
  4. Машинное Learning Healthcare Applications — 2016 и последующие годы
  5. Индустрия машинного обучения Прогнозы: консенсус экспертов
  6. Машинное обучение в робототехнике — 5 современных приложений
  7. Прогностическая аналитика и маркетинг — Что возможно и как это работает
  8. Состояние машинного обучения и прогнозной аналитики для Малый бизнес

Изображение предоставлено: Стратегическое преобразование обучения

Основы машинного обучения: алгоритм карманного обучения и разработка базовых функций

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

Предыдущая статья также показывает, что, по крайней мере, лишайник и вирджиника не разделимы линейно. (См. Рисунок ниже)

(Исходный код можно найти на iris_example.py)

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

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

(Исходный код можно найти на iris_example.py)

На рисунке видно, что тренд количества ошибочных классификаций скачкообразный.

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

Короче говоря, когда мы используем линейную модель, такую ​​как алгоритм обучения персептрона, на нераздельном наборе данных, могут произойти следующие вещи:

  • Функция обновления никогда не останавливается
  • Окончательный результат не гарантирует оптимальную ошибку в выборке

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

Идея проста: этот алгоритм сохраняет лучший результат, когда-либо замеченный, в своем кармане (поэтому он называется Pocket Learning Algorithm). Наилучший результат означает, что количество ошибок в классификации минимально. Если новые грузы приводят к меньшему количеству ошибок в классификации, чем грузы в кармане, тогда замените грузы в кармане новыми грузами; если новые гири не лучше, чем в кармане, оставьте гири в кармане и выбросьте новые гири.В конце итерации обучения алгоритм возвращает решение в кармане, а не последнее решение.

Шаги обучения

  1. Инициализируйте вектор веса кармана, Image 3, 0 или небольшими случайными числами и используйте этот вектор веса в качестве инициализированного вектора веса алгоритма обучения персептрона.
  2. Для каждой итерации обучения выполните следующие подэтапы:
    1. Выполните этап обучения алгоритма обучения персептрона, чтобы получить обновленный вектор весов, Image 5, где Image 6 указывает текущую итерацию.
    2. Оцените Image 7, сравнив количество ошибок классификации по всему набору выборок с количеством ошибок классификации, выполненных Image 8.
    3. Если Image 9 лучше, чем Image 10, замените Image 11 на Image 12.
  3. Вернуть Image 13 по завершении итерации обучения.

Карманный алгоритм обучения может быть реализован просто путем расширения алгоритма обучения персептрона.

 импортировать numpy как np
импортировать панд как pd

класс Pocket:
    Класс Pocket сохраняет лучшие веса, которые когда-либо были такими толстыми в процессе обучения.Параметры
    ----------
    number_of_attributes: int
    Количество атрибутов набора данных.

    Атрибуты
    ----------
    best_weights: список с плавающей запятой
    Список лучших весов, просмотренных на данный момент.

    misclassify_count: int
    Количество ошибок классификации, соответствующих лучшим весам.
    '' '
    def __init __ (self, number_of_attributes):
        self.best_weights = np.zeros (количество_атрибутов + 1)
        self.misclassify_count = -1 # -1 означает, что класс инициализирован, но не имеет допустимого значения

класс PocketClassifier:
    '' Карманный двоичный классификатор использует модифицированный алгоритм обучения персептрона, называемый
       Карманный алгоритм обучения для классификации данных двух классов.Параметры
    ----------
    number_of_attributes: int
    Количество атрибутов набора данных.

    class_labels: кортеж меток классов
    Ярлыки класса могут быть любыми, если у него есть только два типа ярлыков.

    Атрибуты
    ----------
    карман: карман
    В кармане находится лучший результат тренировок до сих пор и
    номер ошибочно классифицированного образца по результату в кармане.

    веса: список с плавающей запятой
    Список весов соответствующих входных атрибутов.misclassify_record: список int
    Количество ошибок классификации для каждой обучающей выборки.
    '' '
    def __init __ (self, number_of_attributes: int, class_labels: ()):
        # Инициализировать класс Pocket
        self.pocket = Карман (количество_атрибутов)
        # Инициализировать веса до нуля
        # Размер - это количество атрибутов плюс смещение, т.е. x_0 * w_0
        self.weights = np.zeros (число_атрибутов + 1)

        # Запись количества ошибок классификации для каждой обучающей выборки
        я.misclassify_record = []

        # Создайте карту надписей, чтобы сопоставить исходные надписи с числовыми метками
        # Например, ['a', 'b'] -> {0: 'a', 1: 'b'}
        self._label_map = {1: метки_класса [0], -1: метки_класса [1]}
        self._reversed_label_map = {class_labels [0]: 1, class_labels [1]: -1}

    def _linear_combination (self, sample):
        '' 'линейная комбинация образца и гирь' ''
        return np.inner (образец, self.weights [1:])

    def train (self, samples, labels, max_iterator = 10):
        '' Обучите модель

        Параметры
        ----------
        образцы: список двух измерений
            Набор данных для обучения
        метки: список меток
            Метки классов обучающих данных
        max_iterator: число
            Максимальный итератор для остановки процесса обучения.'' '
        # Перенести метки в числовые метки
        transfer_labels = [self._reversed_label_map [index] для индекса в ярлыках]

        для _ в диапазоне (max_iterator):
            ошибочно классифицирует = 0
            для образца, цель в zip (образцы, переданные_ метки):
                linear_combination = self._linear_combination (образец)
                update = target - np.where (linear_combination> = 0.0, 1, -1)

                # используйте numpy.multiply для поэлементного умножения
                я.веса [1:] + = np.multiply (обновить, образец)
                self.weights [0] + = обновить

                # записываем количество ошибок классификации
                ошибочно классифицирует + = int (обновление! = 0.0)

            # Обновить карман - результат лучше, чем в кармане
            если (self.pocket.misclassify_count == -1) или \
                (self.pocket.misclassify_count> неверно классифицирует) или (неверно классифицирует == 0):

                self.pocket.best_weights = self.weights
                я.pocket.misclassify_count = неправильно классифицирует

            если неправильно классифицирует == 0:
                перемена

            self.misclassify_record.append (self.pocket.misclassify_count)

    def classify (self, new_data):
        '' Классифицируйте выборку на основе обученных весов

        Параметры
        ----------
        new_data: двухмерный список
            Новые данные для классификации

        Возвращение
        ------
        Список int
            Список прогнозируемых меток классов.
        '' '
        предсказанный_результат = нп.где ((self._linear_combination (new_data) + self.weights [0])> = 0.0, 1, -1)
        return [self._label_map [item] для элемента в predicted_result] 

(Полный исходный код можно найти на pocket_classifier.py)

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

Идею всегда легко проиллюстрировать примером. В этом разделе используется набор данных из репозитория машинного обучения Калифорнийского университета в Ирвине.(Lichman, M. (2013). Репозиторий машинного обучения UCI [http://archive.ics.uci.edu/ml]. Ирвин, Калифорния: Калифорнийский университет, Школа информации и компьютерных наук.) Этот набор данных, японский Набор данных кредитного скрининга содержит всего 125 образцов и два класса, положительные и отрицательные, людей, которым были и не были предоставлены кредиты. Каждый образец имеет 15 функций; некоторые функции могут быть упущены на некоторых примерах. Кроме того, тип признаков включает категориальный, вещественный и целочисленный типы. В этом примере показано, как использовать электронный набор данных японского кредитного скрининга для обучения алгоритма карманного обучения, чтобы можно было использовать модель обучения для определения того, будет ли кандидат утвержден на основе невидимых данных в будущем.

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

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

Наборы для обучения и тестирования

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

В примере, который демонстрируется в статье, Основы машинного обучения и алгоритм обучения персептрона, мы вручную разделяем набор данных радужной оболочки на обучающий набор и тестовый набор, беря первые 10 образцов из каждого класса и объединяя их вместе в тестовый набор. ; остальные образцы являются обучающей выборкой. Фактически, это не то, что мы обычно делаем (и не то, что мы должны делать) в отношении разделенного набора данных.Если набор данных был затронут на любом этапе процесса обучения, его производительность для доступа к результату была скомпрометирована. Эта проблема называется отслеживанием данных. Манипулируя набором данных вручную, это может привести к смещению отслеживания данных. (Предвзятость отслеживания данных не рассматривается в этой статье и будет обсуждаться в следующих статьях.)

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

  • Как обучающий, так и тестовый наборы должны отражать исходное распределение.
  • Исходный набор данных должен быть перемешан в случайном порядке.

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

 импортных панд
импортировать urllib.request
из perceptron_classifier import PerceptronClassifier

# http: // scikit-learn.org / стабильный / модули / сгенерированный / sklearn.model_selection.train_test_split.html
из sklearn.model_selection import train_test_split

# Загрузите набор данных Iris с http://archive.ics.uci.edu/ml/datasets/Iris
url = 'http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'
urllib.request.urlretrieve (url, 'iris.data')
IRIS_DATA = pandas.read_csv ('iris.data', заголовок = Нет)

# Попробуйте только разноцветную и вирджинику
LABELS = IRIS_DATA.iloc [50: 150, 4]. Значения
DATA = IRIS_DATA.iloc [50: 150, [0, 2]]. Значения

# Используйте функцию train_test_split scikit-learn для разделения набора данных Iris
# для обучающего подмножества (75% данных) и тестового подмножества (25% данных)
DATA_TRAIN, DATA_TEST, LABELS_TRAIN, LABELS_TEST = train_test_split (DATA, LABELS, test_size = 0.25, random_state = 1000)

perceptron_classifier = PerceptronClassifier (2, ('Ирис-разноцветный', 'Ирис-девственный'))
perceptron_classifier.train (DATA_TRAIN, LABELS_TRAIN, 100)
результат = perceptron_classifier.classify (DATA_TEST) 

(Полный пример можно найти на iris_training_and_test_example.py)

Категориальные данные

Опять же, большинство алгоритмов машинного обучения принимают только числовые данные. Чтобы обучить образец, содержащий категориальные данные, нам нужен процесс для кодирования категориальных данных в числовые данные.Кодирование категориальных данных в числовые данные можно разделить на порядковые и номинальные. Порядковый номер — это номер, который можно отсортировать или упорядочить. Другими словами, порядковые номера указывают ранг и должность. Например, уровень образования может быть порядковым: аспирантура, колледж, старшая школа, которые могут быть ранжированы по следующим критериям: аспирантура> колледж> средняя школа. Напротив, номинальный номер — это цифровые символы только для маркировки. Значения цифр не подразумевают какого-либо порядка, количества или каких-либо других измерений.Например, семейное положение: холост, женат, разведен, вдова. Нет смысла утверждать, что одинокий выше или больше (или другое измерение), чем женатый.

Кодирование порядковых данных

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

Возьмем, к примеру, уровень образования; отображение может быть следующим: аспирантура = колледж + 1 = средняя школа + 2.

Кодирование номинальных данных

Одна из распространенных ошибок при работе с категориальными данными состоит в том, что номинальные данные рассматриваются как порядковые. Возьмем, к примеру, семейное положение; если мы создадим соответствие 1: 1 между семейным положением и соответствующим числовым номером, сопоставление может выглядеть следующим образом:

  • Холост -> 0
  • Женат -> 1
  • Разведен -> 2
  • Вдовец -> 3

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

  • Холост -> (1, 0, 0, 0)
  • Женат -> (0, 1, 0,0)
  • В разводе -> (0, 0, 1, 0)
  • Вдовец -> (0, 0, 0, 1)

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

В следующем примере показано, как кодировать категориальные данные.

 из предварительной обработки импорта sklearn
импортировать numpy как np
импортировать панд как pd
импортировать urllib.request

def one_hot_encoder (data = []):
    '' 'Перенос категориальных данных в числовые на основе одного подхода горячего кодирования.

    Параметры
    ----------
    данные: одномерный список

    Возвращение
    ------
    Список закодированных данных на основе одного подхода горячего кодирования
    '' '
    # Поскольку OneHotEncoder scikit-learn принимает только числовые данные, используйте LabelEncoder для передачи
    # категориальные данные в числовые с использованием простого подхода к кодированию.# Например, t -> 0; f -> 1
    # http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html
    LABEL_ENCODER = предварительная обработка.LabelEncoder ()
    числовые_данные = LABEL_ENCODER.fit_transform (данные)
    two_d_array = [[элемент] для элемента в числовых_данных]

    # Используйте scikit-learn OneHotEncoder для кодирования функции A9
    # http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html
    encoder = предварительная обработка.OneHotEncoder ()
    кодировщик.подходит (two_d_array)
    вернуть кодировщик.transform (two_d_array) .toarray ()

если __name__ == '__main__':
    # Загрузите набор японских кредитных данных с http://archive.ics.uci.edu/ml/datasets/Japanese+Credit+Screening
    URL = 'http://archive.ics.uci.edu/ml/machine-learning-databases/credit-screening/crx.data'
    urllib.request.urlretrieve (URL, 'crx.data')

    # Используйте однократное кодирование для передачи атрибута A9 японского набора кредитных данных
    # A9: т, ф.
    # Закодированный вывод может выглядеть как
    # t -> [0, 1]
    # f -> [1, 0]

    crx_data = pd.read_csv ('crx.data', заголовок = Нет)
    A9 = crx_data.iloc [:, 8] .values
    A9_encoded = one_hot_encoder (A9) 

(Полный пример можно найти на one_hot_encode_example.py)

Отсутствующие функции

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

Снимите их

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

Предсказать недостающие значения

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

Заполните пропущенные значения на основе известных значений

Первые два варианта либо слишком сложно реализовать, либо вообще не практичны. Один разумный и рациональный подход — ввести недостающие данные в соответствии с другими известными значениями. Эта стратегия заменяет отсутствующие значения чем-то, что может быть получено из существующих значений, таких как среднее значение, медиана и частота. В следующем примере показано, как ввести отсутствующее значение по частоте и среднему значению.

 из предварительной обработки импорта sklearn
импортировать numpy как np
импортировать панд как pd
импортировать urllib.запрос
из коллекций счетчик импорта

def imputer_by_most_frequent (missing_values ​​= np.nan, data = []):
    '' 'Введите недостающее значение по частоте, т. Е. Значение, которое встречается чаще всего.

    Параметры
    ----------
    missing_values:
        Отсутствующее значение может быть np.nan, '?' Или любым другим символом, который указывает на отсутствующее значение.

    данные: одномерный список

    Возвращение
    ------
    Список закодированных данных на основе одного подхода горячего кодирования
    '' '
    # Найдите наиболее часто появляющееся значение с помощью счетчика.most = Counter (данные) .most_common (1) [0] [0]
    complete_list = []
    для элемента в данных:
        если элемент отсутствует_values:
            item = большинство
        complete_list.append (элемент)
    вернуть complete_list

если __name__ == '__main__':
    # Загрузите японский набор кредитных данных с http://archive.ics.uci.edu/ml/datasets/Japanese+Credit+Screening
    URL = 'http://archive.ics.uci.edu/ml/machine-learning-databases/credit-screening/crx.data'
    urllib.request.urlretrieve (URL, 'crx.data')

    # Используйте наиболее частый ввод для ввода отсутствующих значений в A1
    # A1: b, a
    #
    # Используйте метод ввода среднего числа для ввода недостающих значений в A2
    # A2: непрерывный

    crx_data = pd.read_csv ('crx.data', заголовок = Нет)
    # Поскольку в японском наборе кредитных данных используется символ '?' для обозначения отсутствия замените его на np.nan.
    Imputer # scikit-learn принимает только np.nan или целое число, поэтому конвертируйте '?' к нп.нан.
    # Это преобразование предназначено для A2, который использует Imputer scikit-learn.
    # Для A1, который использует imputer_by_most_frequent (), это преобразование не требуется.
    crx_data.replace ('?', np.nan, inplace = True)

    A1_no_missing = imputer_by_most_frequent (np.nan, crx_data.iloc [:, 0].ценности)

    # Используйте scikit-learn Imputer для ввода пропущенных значений в виде среднего числа.
    # http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.Imputer.html
    imputer = предварительная обработка.Imputer (missing_values ​​= np.nan, strategy = 'mean', axis = 0)
    # Преобразовать в двухмерный список, поскольку Imputer принимает только двухмерный список.
    A2_two_d = np.array ([[item] для элемента в crx_data.iloc [:, 1] .values])
    A2_no_missing = imputer.fit_transform (A2_two_d) 

(Полный пример можно найти на input_missing_example.ру)

Масштабирование функций

Большинство алгоритмов машинного обучения принимают любые числовые данные. Однако большинство алгоритмов машинного обучения дают лучший результат, если функции имеют одинаковый масштаб. Алгоритм машинного обучения, естественно, не имеет смысла в различных масштабах каждой функции. Нетрудно понять важность масштабирования функций. Например, предположим, что у нас есть набор данных с двумя функциями: первая функция находится в диапазоне от 1 до 10, а объем второй функции — от 1 до 1000.Когда мы применяем алгоритм обучения перцептрона к этому набору данных, интуитивно понятно, что на функцию обновления сильно влияет вторая функция. Следовательно, это может привести к смещению выхода.

Как правило, есть два подхода к приведению функций в один масштаб: нормализация и стандартизация.

Нормализация

Нормализация означает приведение значений, измеренных в разных шкалах, к общей шкале. Чаще всего нормализация также относится к изменению масштаба функций до диапазона [0, 1].Фактически, он может быть ограничен любой границей, какой захотим. Нормализация может быть достигнута по следующей формуле, масштабирование мин-макс:

, где — образец, является наименьшим значением в столбце функций и наибольшим значением.

Хотя нормализация полезна, когда нам нужны значения в ограниченном интервале, у нее есть недостаток: если в наборе данных есть выбросы (что нормально), на уравнение нормализации могут сильно влиять выбросы, т. Е. Могут быть огромными и может быть крошечным.Обычно нормальные данные могут быть нормализованы до очень небольшого интервала.

Стандартизация

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

, где — выборочное среднее для столбца с конкретными характеристиками, а — соответствующее стандартное отклонение.

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

Теперь у нас достаточно инструментов, чтобы продемонстрировать алгоритм карманного обучения на японском наборе данных кредитной проверки.

 # pandas - это библиотека с открытым исходным кодом, обеспечивающая высокую производительность,
# простые в использовании структуры данных и инструменты анализа данных. http://pandas.pydata.org/
импортировать панд как pd

# NumPy - это фундаментальный пакет для научных вычислений с Python.
# http: //www.numpy.org /
импортировать numpy как np

# Seaborn - это библиотека визуализации Python, основанная на matplotlib.
# http://seaborn.pydata.org/index.html#
импортировать seaborn как sns

# matplotlib - это библиотека 2D-построения на Python, обеспечивающая качество публикации
# рисунки в различных форматах печатных копий и в интерактивных средах на разных платформах.
# http://matplotlib.org/2.0.0/index.html
из matplotlib import pyplot

из pocket_classifier импортировать PocketClassifier
из perceptron_classifier import PerceptronClassifier
из коллекций счетчик импорта
из запроса на импорт urllib
из предварительной обработки импорта sklearn
из sklearn import model_selection

# Установите эстетические параметры за один шаг.sns.set ()

def imputer_by_most_frequent (missing_values ​​= np.nan, data = []):
    '' 'Введите недостающее значение по частоте, т. Е. Значение, которое встречается чаще всего.

    Параметры
    ----------
    missing_values:
        Отсутствующее значение может быть np.nan, '?' Или любым другим символом, который указывает на отсутствующее значение.

    данные: одномерный список

    Возвращение
    ------
    Список закодированных данных на основе одного подхода горячего кодирования
    '' '
    # Найдите наиболее часто появляющееся значение с помощью счетчика.
    most = Счетчик (данные).most_common (1) [0] [0]
    complete_list = []
    для элемента в данных:
        если элемент отсутствует_values:
            item = большинство
        complete_list.append (элемент)
    вернуть complete_list

def one_hot_encoder (data = []):
    '' 'Перенос категориальных данных в числовые на основе одного подхода горячего кодирования.

    Параметры
    ----------
    данные: одномерный список

    Возвращение
    ------
    Список закодированных данных на основе одного подхода горячего кодирования
    '' '
    # Поскольку OneHotEncoder scikit-learn принимает только числовые данные, используйте LabelEncoder для передачи
    # категориальные данные в числовые с использованием простого подхода к кодированию.# Например, t - & gt; 0; е - & gt; 1
    # http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html
    LABEL_ENCODER = предварительная обработка.LabelEncoder ()
    числовые_данные = LABEL_ENCODER.fit_transform (данные)
    two_d_array = [[элемент] для элемента в числовых_данных]

    # Используйте scikit-learn OneHotEncoder для кодирования функции A9
    # http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html
    encoder = предварительная обработка.OneHotEncoder ()
    кодировщик.подходит (two_d_array)
    вернуть кодировщик.transform (two_d_array) .toarray ()

если __name__ == '__main__':
    # Загрузите японский набор кредитных данных с http://archive.ics.uci.edu/ml/datasets/Japanese+Credit+Screening
    URL = 'http://archive.ics.uci.edu/ml/machine-learning-databases/credit-screening/crx.data'
    request.urlretrieve (URL, 'crx.data')
    # Используйте модуль pandas.read_csv для загрузки набора данных для взрослых
    # http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html
    crx_data = pd.read_csv ('crx.data ', header = None)
    crx_data.replace ('?', np.nan, inplace = True)

    # Перенести данные категории в числовые данные и ввести недостающие данные:
    # A1: б, а. (отсутствует)
    # A2: непрерывно. (отсутствует) означает
    № A3: непрерывный.
    # A4: u, y, l, t. (отсутствует) частота
    # A5: g, p, gg. (отсутствует) частота
    # A6: c, d, cc, i, j, k, m, r, q, w, x, e, aa, ff. (отсутствует) частота
    # A7: v, h, bb, j, n, z, dd, ff, o. (отсутствует) частота
    # A8: непрерывно.
    # A9: т, ф.# A10: т, ф.
    # A11: непрерывно.
    # A12: т, ф.
    # A13: г, п, с.
    # A14: непрерывно. (отсутствует) означает
    # A15: непрерывно.
    # A16: +, - (метка класса)

    A1_no_missing = imputer_by_most_frequent (np.nan, crx_data.iloc [:, 0] .values)
    A1_encoded = one_hot_encoder (A1_no_missing)

    imputer = предварительная обработка.Imputer (missing_values ​​= np.nan, strategy = 'mean', axis = 0)
    A2_two_d = np.array ([[item] для элемента в crx_data.iloc [:, 1] .values])
    A2_no_missing = imputer.fit_transform (A2_two_d)

    A3 = crx_data.iloc [:, 2] .values

    A4_no_missing = imputer_by_most_frequent (np.nan, crx_data.iloc [:, 3] .values)
    A4_encoded = one_hot_encoder (A4_no_missing)

    A5_no_missing = imputer_by_most_frequent (np.nan, crx_data.iloc [:, 4] .values)
    A5_encoded = one_hot_encoder (A5_no_missing)

    A6_no_missing = imputer_by_most_frequent (np.nan, crx_data.iloc [:, 5] .values)
    A6_encoded = one_hot_encoder (A6_no_missing)

    A7_no_missing = imputer_by_most_frequent (np.nan, crx_data.iloc [:, 6] .values)
    A7_encoded = one_hot_encoder (A7_no_missing)

    A8 = crx_data.iloc [:, 7] .values

    A9_encoded = one_hot_encoder (crx_data.iloc [:, 8] .values)

    A10_encoded = one_hot_encoder (crx_data.iloc [:, 9] .values)

    A11 = crx_data.iloc [:, 10] .values

    A12_encoded = one_hot_encoder (crx_data.iloc [:, 11] .values)

    A13_encoded = one_hot_encoder (crx_data.iloc [:, 12] .values)

    A14_two_d = np.array ([[item] для элемента в crx_data.iloc [:, 13] .values])
    A14_no_missing = imputer.fit_transform (A14_two_d)

    A15 = crx_data.iloc [:, 14] .values

    # Объединить все закодированные данные в двухмерный набор
    данные = список ()
    метка = список ()
    для индекса в диапазоне (690):
        темп = np.append (A1_encoded [индекс], A2_no_missing [индекс])
        temp = np.append (temp, A3 [индекс])
        temp = np.append (temp, A4_encoded [индекс])
        temp = np.append (temp, A5_encoded [индекс])
        temp = np.append (temp, A6_encoded [индекс])
        temp = np.append (temp, A7_encoded [индекс])
        temp = np.append (temp, A8 [индекс])
        temp = np.append (temp, A9_encoded [индекс])
        temp = np.append (temp, A10_encoded [индекс])
        temp = np.append (temp, A11 [индекс])
        temp = np.append (temp, A12_encoded [индекс])
        темп = np.append (temp, A14_no_missing [индекс])
        temp = np.append (temp, A15 [индекс])
        data.append (temp.tolist ())
        label.append (crx_data [15] [индекс])

    # Используйте MinMaxScaler от scikit-learn для масштабирования набора обучающих данных.
    # http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MinMaxScaler.html
    min_max_scaler = предварительная обработка.MinMaxScaler ()
    data_minmax = min_max_scaler.fit_transform (данные)

    features = len (данные [0])

    # Используйте функцию train_test_split scikit-learn для разделения набора данных Iris
    # для обучающего подмножества (75% данных) и тестового подмножества (25% данных)
    DATA_TRAIN, DATA_TEST, LABELS_TRAIN, LABELS_TEST = выбор_модели.train_test_split (data_minmax, label, test_size = 0,25, random_state = 1000)

    pocket_classifier = PocketClassifier (функции, ('+', '-'))
    pocket_classifier.train (DATA_TRAIN, LABELS_TRAIN, 100)

    результат = pocket_classifier.classify (ДАННЫЕ_ТЕСТ)

    misclassify = 0
    для прогноза ответ в формате zip (результат, LABELS_TEST):
        если предсказать! = ответ:
            ошибочная классификация + = 1
    print ("Уровень точности:% 2.2f"% (100 * (len (результат) - ошибочная классификация) / len (результат)) + '%') 

(Исходный код можно найти в pocket_learning_algorithm_example.ру)

Обратите внимание, что цель этого примера — продемонстрировать алгоритм карманного обучения и идею разработки функций. Следовательно, этот пример может быть не самым эффективным с точки зрения разработки функций и программирования на Python; результат (точность около 85%) также можно улучшить.

.

Post A Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *