Обзор методов классификации в машинном обучении с помощью Scikit-Learn


Оглавление (нажмите, чтобы открыть):

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

Различия и особенности десяти популярных алгоритмов машинного обучения.

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

Эти алгоритмы можно разделить на три основные категории.

  1. Контролируемые алгоритмы: набор обучающих данных имеет входные данные, а также желаемый результат. Во время обучения модель будет корректировать свои переменные для сопоставления входных данных с соответствующим выходом.
  2. Неконтролируемые алгоритмы: в этой категории нет желаемого результата. Алгоритмы будут группировать набор данных на разные группы.
  3. Алгоритмы с подкреплением: эти алгоритмы обучаются на готовых решениях. На основе этих решений алгоритм будет обучаться на основе успеха/ошибки результата. В конечном счете алгоритм сможет давать хорошие прогнозы.

Следующие алгоритмы будут описываться в этой статье.

  • Линейная регрессия
  • SVM (метод опорных векторов)
  • KNN (метод k-ближайших соседей)
  • Логистическая регрессия
  • Дерево решений
  • Метод k-средних
  • Random Forest
  • Наивный байесовский классификатор
  • Алгоритмы сокращения размеров
  • Алгоритмы усиления градиента

1. Линейная регрессия (linear regression)

Алгоритм линейной регрессии будет использовать точки данных для поиска оптимальной линии для создания модели. Линию можно представить уравнением y = m*x + c, где y – зависимая переменная, а x – независимая переменная. Базовые теории исчисления применяются для определения значений для m и c с использованием заданного набора данных.

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

scikit-learn — это простой и эффективный инструмент для машинного обучения на Python. Ниже представлена реализация линейной регрессии при помощи scikit-learn.

2. Метод опорных векторов (SVM — Support Vector Machine)

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

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

3. Метод k-ближайших соседей (KNN — K-nearest neighbors)

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

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

4. Логистическая регрессия (logistic regression)

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

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

y = e^(b0 + b1*x) / (1 + e^(b0 + b1*x))

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

5. Дерево решений (decision tree)

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

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

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

6. Метод k-средних (k-means)

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

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

7. Случайный лес (Random Forest)

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

8. Наивный байесовский классификатор (Naive Bayes)

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

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

9. Алгоритмы сокращения размеров (dimensional reduction algorithms)

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

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

10. Алгоритмы усиления градиента (gradient boosting algorithms)

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

Существует несколько алгоритмов усиления градиента:

  • XGBoost — использует линейные алгоритмы и дерево решений
  • LightGBM — использует только алгоритмы, основанные на деревьях

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

Data Science — 8 главных библиотек для Python программиста

Data science, или наука о данных, набирает все большую популярность среди самых востребованных профессий современного рынка. Специалист в этой области должен обладать глубокими разносторонними знаниями, как теоретическими, так и практическими. К услугам начинающих аналитиков данных предлагаются инструменты автоматизированного характера с уже заложенным функционалом, как, например, мощное программное обеспечение Weka. Однако, многие data scientist-ы, предпочитая широту и манёвренность действий, создают собственные инструменты и пайплайны. Язык программирования Python как нельзя лучше подходит для этих целей. Возможности Python позволяют написать программу для задач машинного обучения как с чистого листа, так и с использованием различных библиотек и инструментов. О последних мы и поговорим.

Обработка больших данных с помощью библиотек Pandas, CSV и OpenPyXL

Чаще всего в задачах для бизнеса исходные данные предоставляются в формате .xlsx или .xlsm, однако многие предпочитают формат .csv (файлы, в которых каждая строка представлена полями, разделенными каким-либо знаком — обычно запятой или точкой с запятой).

Библиотека Pandas — один из самых популярных инструментов Python для работы с данными, она поддерживает различные текстовые, бинарные и sql форматы файлов, в том числе .xlsx , .xls и .csv . Для работы с файлами Excel Pandas использует модули xlrd и xlwt.

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

OpenPyXL — это библиотека для работы исключительно с Excel-файлами, такими как .xlsx, .xlsm, .xltx, .xltm для версий Excel от 2010 года и новее. OpenPyXL содержит инструменты для чтения, записи и обработки данных указанных форматов, а также для построения графиков.

Разберем на примерах базовые возможности этих инструментов. Мы будем использовать данные с портала Kaggle об участниках Олимпийских игр за 120 лет.

Машинное обучение Python. Data Science Machine Learning Tutorial

Опубликовано Шамаев Иван в 30.10.2020 30.10.2020

Машинное обучение с Python Tutorial

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

Аудитория

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

Предпосылки

Читатель должен иметь базовые знания об искусственном интеллекте. Он / она также должен знать Python, NumPy, Scikit-learn, Scipy, Matplotlib. Если вы новичок в какой-либо из этих концепций, мы рекомендуем вам изучить учебники по этим темам, прежде чем углубляться в этот учебник.

Машинное обучение с Python — Основы

Мы живем в «век данных», который обогащен лучшими вычислительными возможностями и большим объемом ресурсов хранения. Эти данные или информация растут день ото дня, но реальная задача состоит в том, чтобы разобраться во всех данных. Предприятия и организации пытаются справиться с этим путем создания интеллектуальных систем с использованием концепций и методологий из Data Science, Data Mining и Machine learning. Среди них машинное обучение — самая захватывающая область информатики. Это не было бы неправильно, если бы мы называли машинное обучение приложением и наукой об алгоритмах, которые дают смысл данным.

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

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

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

Потребность в машинном обучении

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

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

Зачем и когда учить машины?

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

Недостаток человеческого опыта

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

Динамические сценарии

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

Трудность в переводе экспертизы в вычислительные задачи

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

Модель машинного обучения

Прежде чем обсуждать модель машинного обучения, мы должны понять следующее формальное определение ML, данное профессором Митчеллом:

«Говорят, что компьютерная программа извлекает уроки из опыта E в отношении некоторого класса задач T и показателя P производительности, если ее производительность в задачах T, измеряемая P, улучшается с опытом E.»

Приведенное выше определение в основном сфокусировано на трех параметрах, а также на основных компонентах любого алгоритма обучения, а именно Задача (T), Производительность (P) и Опыт (E). В этом контексте мы можем упростить это определение как —

ML — это область ИИ, состоящая из алгоритмов обучения, которые —

  • Улучшить их производительность (P)
  • При выполнении некоторого задания (T)
  • Со временем с опытом (E)

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

Давайте обсудим их более подробно

Задача (Т)

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

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

Опыт (E)

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

Производительность (P)

Алгоритм ML должен выполнять задачу и получать опыт с течением времени. Мера, которая показывает, выполняет ли алгоритм ML согласно ожиданиям или нет, это его производительность (P). P — это в основном количественная метрика, которая показывает, как модель выполняет задачу, T, используя свой опыт, E. Есть много метрик, которые помогают понять производительность ML, таких как оценка точности, оценка F1, матрица путаницы, точность, отзыв чувствительность и т. д.

Проблемы в машинном обучении

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

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

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

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

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

Проблема переоснащения и недостаточного оснащения — если модель переоснащена или недостаточно оснащена, она не может быть хорошо представлена ​​для данной проблемы.

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

Сложность в развертывании — Сложность модели ML делает его довольно сложным для развертывания в реальной жизни.

Применение машин обучения

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

  • Эмоциональный анализ
  • Анализ настроений
  • Обнаружение и предотвращение ошибок
  • Прогнозирование погоды и прогнозирование
  • Анализ и прогнозирование фондового рынка
  • Синтез речи
  • Распознавание речи
  • Сегментация клиентов
  • Распознавание объектов
  • Обнаружение мошенничества
  • Предотвращение мошенничества
  • Рекомендация товара покупателю в интернет-магазине

Машинное обучение с Python — Экосистема

Введение в Python

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

Python был разработан Гвидо ван Россумом в Stichting Mathematisch Centrum в Нидерландах.

Он был написан как преемник языка программирования под названием «ABC».

Его первая версия была выпущена в 1991 году.

Название Python было выбрано Гвидо ван Россумом из телешоу «Летающий цирк Монти Пайтона».

Это язык программирования с открытым исходным кодом, что означает, что мы можем свободно скачать его и использовать для разработки программ. Его можно скачать с www.python.org. ,

Язык программирования Python обладает функциями как Java, так и Си. Он имеет элегантный код C, а с другой стороны, имеет классы и объекты, такие как Java, для объектно-ориентированного программирования.

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

Сильные и слабые стороны Python

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

Сильные стороны

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

Легко учиться и понимать — синтаксис Python проще; следовательно, даже для начинающих относительно легко выучить и понять язык.

Многоцелевой язык — Python является многоцелевым языком программирования, потому что он поддерживает структурированное программирование, объектно-ориентированное программирование, а также функциональное программирование.

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

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

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

Слабое место

Хотя Python является популярным и мощным языком программирования, у него есть слабое место — низкая скорость выполнения.

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

Установка Python


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

  • Установка Python индивидуально
  • Использование готового дистрибутива Python: Anaconda

Давайте обсудим это каждый в деталях.

Установка Python индивидуально

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

Ниже приведен краткий обзор установки Python на вышеупомянутых платформах.

На платформе Unix и Linux

С помощью следующих шагов мы можем установить Python на платформу Unix и Linux —

Затем нажмите на ссылку, чтобы скачать сжатый исходный код, доступный для Unix / Linux.

Теперь загрузите и распакуйте файлы.

Затем мы можем отредактировать файл Modules / Setup, если мы хотим настроить некоторые параметры.

  • Далее напишите команду run ./configure script
  • сделать
  • сделать установку

На платформе Windows

С помощью следующих шагов мы можем установить Python на платформу Windows —

Далее нажмите на ссылку для установщика Windows, файл python-XYZ.msi. Здесь XYZ — версия, которую мы хотим установить.

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

На платформе Macintosh

Для Mac OS X, Homebrew, отличный и простой в использовании установщик пакетов рекомендуется установить Python 3. Если у вас нет Homebrew, вы можете установить его с помощью следующей команды —

Его можно обновить с помощью команды ниже —

Теперь, чтобы установить Python3 в вашей системе, нам нужно выполнить следующую команду —

Использование предварительно упакованного дистрибутива Python: Anaconda

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

Шаг 1 — Во-первых, нам нужно скачать необходимый установочный пакет из дистрибутива Anaconda. Ссылка для того же — www.anaconda.com/distribution/. Вы можете выбрать ОС Windows, Mac и Linux в соответствии с вашими требованиями.

Шаг 2 — Затем выберите версию Python, которую вы хотите установить на свой компьютер. Последняя версия Python — 3.7. Там вы получите опции для 64-битного и 32-битного графического инсталлятора.

Мастер Йода рекомендует:  Реализация препроцессора для C на Python

Шаг 3 — После выбора версии ОС и Python он загрузит установщик Anaconda на ваш компьютер. Теперь дважды щелкните файл, и установщик установит пакет Anaconda.

Шаг 4 — Чтобы проверить, установлен он или нет, откройте командную строку и введите Python следующим образом

Почему Python для Data Science?

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

Обширный набор пакетов

Python имеет обширный и мощный набор пакетов, которые готовы к использованию в различных областях. Он также имеет пакеты, такие как numpy, scipy, pandas, scikit-learn и т. Д. , Которые необходимы для машинного обучения и науки о данных.

Простое прототипирование

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

Функция совместной работы

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

Один язык для многих доменов

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

Компоненты экосистемы Python ML

В этом разделе давайте обсудим некоторые основные библиотеки Data Science, которые образуют компоненты экосистемы обучения Python Machine. Эти полезные компоненты делают Python важным языком для Data Science. Хотя таких компонентов много, давайте обсудим некоторые важные компоненты экосистемы Python здесь:

Блокнот Jupyter — Блокноты Jupyter в основном предоставляют интерактивную вычислительную среду для разработки приложений Data Science на основе Python.

Машинное обучение с Python — Методы

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

Различные типы методов

Ниже приведены различные методы ML, основанные на некоторых широких категориях:

На основании человеческого контроля

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

Обучение под наблюдением

Задачи, подходящие для машинного обучения

Следующая диаграмма показывает, какой тип задачи подходит для различных задач ML

На основании способности к обучению

В процессе обучения ниже приведены некоторые методы, основанные на способности к обучению.

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

Шаг 1 — Во-первых, нам нужно собрать все данные обучения для начала обучения модели.

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

Шаг 3 — Затем прекратите процесс обучения / тренировки, как только вы получите удовлетворительные результаты / результаты.

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

Онлайн обучение

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

Шаг 1 — Во-первых, нам нужно собрать все данные обучения для начала обучения модели.

Шаг 2 — Теперь начните обучение модели, предоставив алгоритму мини-пакет обучающих данных.

Шаг 3 — Далее нам нужно предоставить мини-пакеты обучающих данных с несколькими приращениями к алгоритму.

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

Шаг 5 — Наконец, он продолжит обучение в течение определенного периода времени на основе новых образцов данных.

Основан на обобщающем подходе

В процессе обучения ниже приведены некоторые методы, основанные на обобщающих подходах:

Обучение на основе экземпляров

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

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

Модель на основе обучения

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

Загрузка данных для проектов ML

Предположим, что если вы хотите начать проект ML, то, что вам понадобится в первую очередь? Это данные, которые нам нужно загрузить для запуска любого проекта ML. Что касается данных, наиболее распространенным форматом данных для проектов ОД является CSV (значения, разделенные запятыми).

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

Рассмотрение при загрузке данных CSV

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

Заголовок файла

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

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

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

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

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

Комментарии

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

Разделитель

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

Котировки

В файлах данных CSV знак двойной кавычки («») является символом кавычки по умолчанию. Важно учитывать роль кавычек при загрузке файла CSV в проекты ML, потому что мы также можем использовать другой символ кавычки, кроме двойной кавычки. Но в случае использования символа кавычки, отличного от стандартного, мы должны указать его явно.

Методы для загрузки файла данных CSV

При работе с проектами ML наиболее важной задачей является правильная загрузка данных в него. Наиболее распространенным форматом данных для проектов ML является CSV, и он имеет различные разновидности и разные трудности для анализа. В этом разделе мы собираемся обсудить три распространенных подхода в Python для загрузки файла данных CSV —

Загрузите CSV со стандартной библиотекой Python

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

пример

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

массив и использовать его для проектов ML. Ниже приведен скрипт Python для загрузки файла данных CSV —

Во-первых, нам нужно импортировать модуль csv, предоставляемый стандартной библиотекой Python, следующим образом:

Далее нам нужно импортировать модуль Numpy для преобразования загруженных данных в массив NumPy.

Теперь укажите полный путь к файлу, хранящемуся в нашем локальном каталоге, с файлом данных CSV —

Затем используйте функцию csv.reader () для чтения данных из файла CSV —

Мы можем напечатать имена заголовков с помощью следующей строки скрипта —

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

Следующая строка скрипта даст первые три строки файла данных —

Выход

Загрузите CSV с NumPy

Другой подход к загрузке файла данных CSV — это функции NumPy и numpy.loadtxt () . Ниже приведен пример загрузки файла данных CSV с его помощью —

пример

В этом примере мы используем набор данных индейцев Pima, содержащий данные пациентов с диабетом. Этот набор данных является числовым набором данных без заголовка. Его также можно загрузить в наш локальный каталог. После загрузки файла данных мы можем преобразовать его в массив NumPy и использовать его для проектов ML. Ниже приведен скрипт Python для загрузки файла данных CSV —

Выход

Загрузите CSV с пандами

Другой подход к загрузке файла данных CSV — использование функций Pandas и pandas.read_csv () . Это очень гибкая функция, которая возвращает pandas.DataFrame, которую можно сразу использовать для построения графиков. Ниже приведен пример загрузки файла данных CSV с его помощью —

пример

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

Ниже приведен скрипт Python для загрузки файла данных CSV с использованием набора данных Pandas на Iris —

Выход

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

Выход

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

ML — Понимание данных со статистикой

Введение

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

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

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

Глядя на необработанные данные

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

Ниже приведен сценарий Python, реализованный с использованием функции head () Pandas DataFrame в наборе данных диабета индейцев Пима для просмотра первых 50 строк, чтобы лучше понять его.

пример


Выход

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

Проверка размеров данных

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

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

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

Ниже приведен скрипт Python, реализованный путем печати свойства shape в Pandas Data Frame. Мы собираемся реализовать его на наборе данных радужной оболочки для получения общего количества строк и столбцов в нем.

пример

Выход

Из результатов мы можем легко заметить, что набор данных iris, который мы будем использовать, имеет 150 строк и 4 столбца.

Получение типа данных каждого атрибута

Еще одна полезная практика — знать тип данных каждого атрибута. Причина в том, что согласно требованию иногда нам может потребоваться преобразовать один тип данных в другой. Например, нам может потребоваться преобразовать строку в число с плавающей запятой или int для представления категориальных или порядковых значений. Мы можем получить представление о типе данных атрибута, посмотрев на необработанные данные, но другой способ — использовать свойство dtypes в Pandas DataFrame. С помощью свойства dtypes мы можем классифицировать каждый тип данных атрибутов. Это можно понять с помощью следующего скрипта Python —

пример

Выход

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

Статистическая сводка данных

Мы обсудили рецепт Python, чтобы получить форму, то есть количество строк и столбцов данных, но много раз нам нужно было просматривать сводки по этой форме данных. Это можно сделать с помощью функции description () Pandas DataFrame, которая дополнительно предоставляет следующие 8 статистических свойств каждого атрибута данных —

  • подсчитывать
  • Значит
  • Среднеквадратичное отклонение
  • Минимальное значение
  • Максимальное значение
  • 25%
  • Медиана то есть 50%
  • 75%

пример

Выход

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

Просмотр распределения классов

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

пример

Выход

Из вышеприведенного вывода ясно видно, что количество наблюдений с классом 0 почти вдвое превышает количество наблюдений с классом 1.

Проверка корреляции между атрибутами

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

Значение коэффициента = 1 — представляет полную положительную корреляцию между переменными.

Значение коэффициента = -1 — представляет полную отрицательную корреляцию между переменными.

Значение коэффициента = 0не представляет никакой корреляции между переменными.

Для нас всегда полезно проанализировать попарные корреляции атрибутов в нашем наборе данных, прежде чем использовать его в проекте ML, потому что некоторые алгоритмы машинного обучения, такие как линейная регрессия и логистическая регрессия, будут работать плохо, если у нас будут сильно коррелированные атрибуты. В Python мы можем легко рассчитать корреляционную матрицу атрибутов набора данных с помощью функции corr () в Pandas DataFrame.

пример

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

Обзор перекоса распределения атрибутов

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

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

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

В Python мы можем легко рассчитать перекос каждого атрибута с помощью функции skew () в DataFrame Pandas.

пример

Выход

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

ML — понимание данных с помощью визуализации

Введение

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

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

Одномерные графики: независимое понимание атрибутов

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

Sr.No Одномерные графики и описание
1 Гистограммы

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

Еще одним быстрым и простым способом получения распределения каждого атрибута является график плотности.

Графики Бокса и Вискера, которые также называются боксплотами, являются еще одним полезным методом для анализа распределения распределения каждого атрибута.

Многомерные графики: взаимодействие между несколькими переменными

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

Sr.No Многовариантные участки и описание
1 Матрица корреляции

Корреляция является показателем изменений между двумя переменными.

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

Машинное обучение — подготовка данных

Введение

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

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

Почему предварительная обработка данных?

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

Методы предварительной обработки данных

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

пересчет

Скорее всего, наш набор данных состоит из атрибутов с различным масштабом, но мы не можем предоставить такие данные алгоритму ML, поэтому он требует масштабирования. Масштабирование данных гарантирует, что атрибуты имеют одинаковый масштаб. Обычно атрибуты масштабируются в диапазоне от 0 до 1. Алгоритмы ML, такие как градиентный спуск и k-ближайших соседей, требуют масштабированных данных. Мы можем масштабировать данные с помощью MinMaxScaler класса scikit учиться библиотеки Python.

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

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

Теперь мы можем использовать класс MinMaxScaler для изменения масштаба данных в диапазоне от 0 до 1.

Мы также можем суммировать данные для вывода по нашему выбору. Здесь мы устанавливаем точность в 1 и показываем первые 10 строк в выводе.

Из вышеприведенного вывода все данные были перераспределены в диапазоне от 0 до 1.

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

Еще один полезный метод предварительной обработки данных — нормализация. Это используется для изменения масштаба каждой строки данных, чтобы иметь длину 1. Это в основном полезно в наборе разреженных данных, где у нас много нулей. Мы можем изменить масштаб данных с помощью класса Normalizer библиотеки Python scikit-learn .

Типы нормализации

В машинном обучении существует два типа методов предварительной обработки нормализации:

бинаризации

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

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

Мы можем бинаризацию данных с помощью Binarizer класса scikit учиться библиотеки Python

В этом примере мы будем масштабировать данные набора данных диабета индейцев Пима, которые мы использовали ранее. Сначала будут загружены данные CSV, а затем с помощью класса Binarizer они будут преобразованы в двоичные значения, то есть 0 и 1, в зависимости от порогового значения. Мы берем 0,5 в качестве порогового значения.

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

Теперь мы можем использовать класс Binarize для преобразования данных в двоичные значения.

Здесь мы показываем первые 5 строк в выводе.

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

Еще один полезный метод предварительной обработки данных, который в основном используется для преобразования атрибутов данных с гауссовым распределением. Он отличается от среднего значения и стандартного отклонения (SD) до стандартного гауссовского распределения со средним значением 0 и стандартным отклонением 1. Этот метод полезен в алгоритмах ML, таких как линейная регрессия, логистическая регрессия, которая предполагает гауссовское распределение во входном наборе данных и производит лучше. результаты с измененными данными. Мы можем стандартизировать данные (среднее = 0 и SD = 1) с помощью StandardScaler класса библиотеки Python scikit-learn .

В этом примере мы будем масштабировать данные набора данных диабета индейцев Пима, которые мы использовали ранее. Сначала будут загружены данные CSV, а затем с помощью класса StandardScaler они будут преобразованы в гауссово распределение со средним значением = 0 и SD = 1.

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

Теперь мы можем использовать класс StandardScaler для изменения масштаба данных.

Мы также можем суммировать данные для вывода по нашему выбору. Здесь мы устанавливаем точность до 2 и показываем первые 5 строк в выводе.

Маркировка данных

Мы обсудили важность хороших данных для алгоритмов ML, а также некоторые методы предварительной обработки данных перед их отправкой в ​​алгоритмы ML. Еще один аспект в этом отношении — маркировка данных. Также очень важно отправлять данные в алгоритмы ML с надлежащей маркировкой. Например, в случае проблем с классификацией в данных имеется множество меток в виде слов, цифр и т. Д.

Что такое кодирование меток?

Большинство функций sklearn ожидают, что данные с числовыми метками, а не надписями слов. Следовательно, нам необходимо преобразовать такие метки в числовые метки. Этот процесс называется кодированием меток. Мы можем выполнять кодирование метки данных с помощью LabelEncoder () функций scikit учиться библиотеки Python.

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

Сначала импортируйте необходимые библиотеки Python следующим образом:

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

Следующая строка кода создаст кодировщик меток и обучит его.

Следующие строки скрипта будут проверять производительность путем кодирования случайного упорядоченного списка —

Мы можем получить список закодированных значений с помощью следующего скрипта Python —

Машинное обучение — выбор характеристик данных

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

Важность выбора функции данных

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

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

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

Выполнение выбора функции перед моделированием данных уменьшит перенастройку.

Выбор функции перед моделированием данных повысит точность модели ML.

Выбор функций перед моделированием данных сократит время обучения

Методы выбора функций

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

Одномерный выбор

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

В этом примере мы будем использовать набор данных Pima Indians Diabetes, чтобы выбрать 4 из атрибутов, имеющих лучшие характеристики, с помощью статистического критерия хи-квадрат.

Далее мы разделим массив на компоненты ввода и вывода —

Следующие строки кода выберут лучшие функции из набора данных —

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

Удаление рекурсивных функций

Как следует из названия, метод выбора функций RFE (рекурсивное исключение объектов) рекурсивно удаляет атрибуты и строит модель с оставшимися атрибутами. Мы можем реализовать метод выбора функций RFE с помощью класса RFE библиотеки Python scikit-learn .

пример

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

Далее мы разделим массив на входные и выходные компоненты —

Следующие строки кода выберут лучшие функции из набора данных —

Выход

В приведенном выше выводе видно, что RFE выбирает preg, mass и pedi в качестве первых 3 лучших функций. Они отмечены как 1 на выходе.

Анализ основных компонентов (PCA)

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


пример

В этом примере мы будем использовать PCA, чтобы выбрать 3 лучших компонента из набора данных диабета индейцев Pima.

Далее мы разделим массив на компоненты ввода и вывода —

Следующие строки кода извлекут функции из набора данных —

Выход

Из вышеприведенного вывода мы можем наблюдать, что 3 главных компонента мало похожи на исходные данные.

Важность функции

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

пример

В этом примере мы будем использовать ExtraTreeClassifier для выбора функций из набора данных диабета индейцев Pima.

Далее мы разделим массив на компоненты ввода и вывода —

Следующие строки кода извлекут функции из набора данных —

Выход

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

Алгоритмы классификации — Введение

Введение в классификацию

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

Математически классификация — это задача приближения функции отображения (f) от входных переменных (X) к выходным переменным (Y). Это в основном относится к контролируемому машинному обучению, в котором цели также предоставляются вместе с набором входных данных.

Примером проблемы классификации может быть обнаружение спама в электронных письмах. Может быть только две категории вывода: «спам» и «нет спама»; следовательно, это двоичная классификация типов.

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

Типы учащихся в классификации

У нас есть два типа учащихся в соответствии с проблемами классификации —

Ленивые ученики

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

Нетерпеливые ученики

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

Создание классификатора в Python

Scikit-learn, библиотека Python для машинного обучения может использоваться для построения классификатора в Python. Шаги для создания классификатора в Python следующие:

Шаг 1: Импорт необходимого пакета Python

Для построения классификатора с помощью scikit-learn нам нужно его импортировать. Мы можем импортировать его, используя следующий скрипт —

Шаг 2: Импорт набора данных

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

Следующий скрипт загрузит набор данных;

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

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

Результатом вышеприведенной команды являются имена меток —

Эти метки отображаются в двоичные значения 0 и 1. Злокачественный рак представлен 0, а доброкачественный рак представлен 1.

Имена и значения функций этих меток можно увидеть с помощью следующих команд:

Результатом вышеприведенной команды являются имена признаков для метки 0, т.е. злокачественный рак —

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

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

Мы можем распечатать функции для этих этикеток с помощью следующей команды —

Это даст следующий вывод —

Мы можем распечатать функции для этих этикеток с помощью следующей команды —

Это даст следующий вывод —

Шаг 3: Организация данных в наборы для обучения и тестирования

Поскольку нам нужно протестировать нашу модель на невидимых данных, мы разделим наш набор данных на две части: обучающий набор и тестовый набор. Мы можем использовать train_test_split () функцию sklearn пакета питона , чтобы разделить данные в наборы. Следующая команда импортирует функцию —

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

Шаг 4: Оценка модели

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

Теперь, инициализируйте модель следующим образом —

Далее с помощью следующей команды мы можем обучить модель —

Теперь для целей оценки нам нужно сделать прогнозы. Это можно сделать с помощью функции предиката () следующим образом:

Это даст следующий вывод —

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

Шаг 5: Нахождение точности

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

Приведенные выше результаты показывают, что классификатор NaïveBayes имеет точность 95,17%.

Метрики оценки классификации

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

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

Матрица путаницы

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

Различные алгоритмы классификации ML

Ниже приведены некоторые важные алгоритмы классификации ML —

  • Логистическая регрессия
  • Машина опорных векторов (SVM)
  • Древо решений
  • Наивный Байес
  • Случайный Лес

Мы будем подробно обсуждать все эти алгоритмы классификации в следующих главах.

Приложения

Некоторые из наиболее важных приложений алгоритмов классификации следующие:

  • Распознавание речи
  • Распознавание почерка
  • Биометрическая идентификация
  • Классификация документов

«Поехали!»¶

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

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

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

Если ответ количественный, то задача называется задачей восстановления регрессии. Если ответ категориальный, то задача называется задачей классификации.

Здесь мы будем предполагать, что читатель знаком с python. Для решения задачи анализа данных воспользуемся библиотеками numpy, pandas и scikit-learn. Библиотека numpy содержит реализации многомерных массивов и алгоритмов линейной алгебры. Библиотека pandas предоставляет широкий спектр функций по обработке табличных данных. Библиотека scikit-learn реализует множество алгоритмов машинного обучения. Кроме того, нам понадобится библиотека matplotlib для научной визуализации.

Наиболее простой способ получить все требуемые библиотеки в python – установить дистрибутив anaconda. Приведенный ниже код тестировался на дистрибутиве anaconda 2.2.0 (с python версии 2.7). Далее будем предполагать, что все требующееся программное обеспечение установлено.

Вначале подключим библиотеки:

Загружаем данные¶

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

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

Таким образом, речь идет о задаче классификации: требуется определить, какому классу: положительному (кредит будет возвращен) или отрицательному (кредит не будет возвращен) – принадлежит клиент.

Данные имеют формат csv и их можно скачать по указанному ниже адресу:

Параметр header = None означает, что таблица не содержит заголовка (т.е. не содержит названий столбцов), а na_values = ‘?’ означает, что данные содержат пропущенные значения, обозначенные символом ? .

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

Итак, мы загрузили данные в таблицу data . Объект data имеет тип DataFrame – это основной тип данных в библиотеке pandas, предназначенный для представления табличных данных.

Анализируем данные¶

Данные загружены. Попытаемся вначале их качественно проанализировать.

Узнаем размеры таблицы:

Итак, таблица содержит 690 строк (объектов) и 16 столбцов (признаков), включая выходной (целевой) признак.

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
b 30.83 0.000 u g w v 1.25 t t 1 f g 202 +
1 a 58.67 4.460 u g q h 3.04 t t 6 f g 43 560 +
2 a 24.50 0.500 u g q h 1.50 t f f g 280 824 +
3 b 27.83 1.540 u g w v 3.75 t t 5 t g 100 3 +
4 b 20.17 5.625 u g w v 1.71 t f f s 120 +
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
685 b 21.08 10.085 y p e h 1.25 f f f g 260
686 a 22.67 0.750 u g c v 2.00 f t 2 t g 200 394
687 a 25.25 13.500 y p ff ff 2.00 f t 1 t g 200 1
688 b 17.92 0.205 u g aa v 0.04 f f f g 280 750
689 b 35.00 3.375 u g c h 8.29 f f t g

Строки таблицы пронумерованы числами от 0 до 689. Столбцы не имеют каких-либо осмысленных имен и тоже просто пронумерованы.

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

Для удобства зададим столбцам имена:

A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15 class
b 30.83 0.000 u g w v 1.25 t t 1 f g 202 +
1 a 58.67 4.460 u g q h 3.04 t t 6 f g 43 560 +
2 a 24.50 0.500 u g q h 1.50 t f f g 280 824 +
3 b 27.83 1.540 u g w v 3.75 t t 5 t g 100 3 +
4 b 20.17 5.625 u g w v 1.71 t f f s 120 +

К элементам таблицы можно обращаться, например, так:

Обратите внимание на порядок следования имен (или номеров) строк и столбцов: вначале в квадратных сокбках указывается имя столбца, а затем – строки. Дело в том, что data[‘A5’] – это весь столбец A5 , поэтому data[‘A5’][687] – 687-й (при нумерации начиная с 0) элемент этого столбца.

Можно обращаться и по-другому:

С помощью метода describe() получим некоторую сводную информацию по всей таблице. По умолчанию будет выдана информация только для количественных признаков. Это общее их количество ( count ), среднее значение ( mean ), стандартное отклонение ( std ), минимальное ( min ), макcимальное ( max ) значения, медиана ( 50% ) и значения нижнего ( 25% ) и верхнего ( 75% ) квартилей:

A2 A3 A8 A11 A14 A15
count 678.000000 690.000000 690.000000 690.00000 677.000000 690.000000
mean 31.568171 4.758725 2.223406 2.40000 184.014771 1017.385507
std 11.957862 4.978163 3.346513 4.86294 173.806768 5210.102598
min 13.750000 0.000000 0.000000 0.00000 0.000000 0.000000
25% 22.602500 1.000000 0.165000 0.00000 75.000000 0.000000
50% 28.460000 2.750000 1.000000 0.00000 160.000000 5.000000
75% 38.230000 7.207500 2.625000 3.00000 276.000000 395.500000
max 80.250000 28.000000 28.500000 67.00000 2000.000000 100000.000000

Заметим, что количество элементов в столбцах A2 , A14 меньше общего количества объектов (690), что говорит о том, что эти столбцы содержат пропущенные значения.

Выделим числовые и категориальные признаки:

Теперь мы можем получить некоторую общую информацию по категориальным признакам:

A1 A4 A5 A6 A7 A9 A10 A12 A13 class
count 678 684 684 681 681 690 690 690 690 690
unique 2 3 3 14 9 2 2 2 3 2
top b u g c v t f f g
freq 468 519 519 137 399 361 395 374 625 383

В таблице для каждого категориального признака приведено общее число заполненных ячеек ( count ), количество значений, которые принимает данный признак ( unique ), самое популярное (часто встречающееся) значение этого признака ( top ) и количество объектов, в которых встречается самое частое значение данного признака ( freq ).

Вот немного другой способ получить ту же информацию:

A1 A4 A5 A6 A7 A9 A10 A12 A13 class
count 678 684 684 681 681 690 690 690 690 690
unique 2 3 3 14 9 2 2 2 3 2
top b u g c v t f f g
freq 468 519 519 137 399 361 395 374 625 383

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

Здесь nan означают пропущенные значения.

Функция scatter_matrix из модуля pandas.tools.plotting позволяет построить для каждой количественной переменной гистограмму, а для каждой пары таких переменных – диаграмму рассеяния:

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

A2 A3 A8 A11 A14 A15
A2 1.000000 0.202317 0.395751 0.185912 -0.079812 0.018553
A3 0.202317 1.000000 0.298902 0.271207 -0.224242 0.123121
A8 0.395751 0.298902 1.000000 0.322330 -0.077163 0.051345
A11 0.185912 0.271207 0.322330 1.000000 -0.120096 0.063692
A14 -0.079812 -0.224242 -0.077163 -0.120096 1.000000 0.066853
A15 0.018553 0.123121 0.051345 0.063692 0.066853 1.000000

Можно выбрать любую пару признаков и нарисовать диаграмму рассеяния для этой пары признаков, изображая точки, соответствующие объектам из разных классов разным цветом: + – красный, — – синий. Например, для пары признаков A2 , A11 получаем следующую диаграмму:

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

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

К анализу значимости признаков (в том числе категориальных) мы еще вернемся.

Готовим данные¶

Алгоритмы машинного обучения из библиотеки scikit-learn не работают напрямую с категориальными признаками и данными, в которых имеются пропущенные значения. Поэтому вначале подготовим наши данные.

Пропущенные значения¶

Узнать количество заполненных (непропущенных) элементов можно с помощью метода count . Параметр axis = 0 указывает, что мы двигаемся по размерности 0 (сверху вниз), а не размерности 1 (слева направо), т.е. нас интересует количество заполненных элементов в каждом столбце, а не строке:

Если данные содержат пропущенные значения, то имеется две простые альтернативы:

  • удалить столбцы с такими значениями ( data = data.dropna(axis=1) ),
  • удалить строки с такими значениями ( data = data.dropna(axis=0) ).

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


Количественные признаки¶

Заполнить пропущенные значения можно с помощью метода fillna . Заполним, например, медианными значениями.

axis=0 по-прежнему указывает, что мы двигаемся сверху вниз:

Проверим, что теперь все столбцы, соответствующие количественным признакам, заполнены.

Категориальные признаки¶

Теперь рассмотрим пропущенные значения в столбцах, соответствующих категориальным признакам. Простая стратегия – заполнение пропущенных значений самым популярным в столбце. Начнем с A1 :

В столбце A1 имеются пропущенные значения. Наиболее частым (встречается 468 раз) является b . Заполняем все пропуски этим значением:

Теперь все элементы таблицы заполнены:

A1 A4 A5 A6 A7 A9 A10 A12 A13 class
count 690 690 690 690 690 690 690 690 690 690
unique 2 3 3 14 9 2 2 2 3 2
top b u g c v t f f g
freq 480 525 525 146 408 361 395 374 625 383
A2 A3 A8 A11 A14 A15
count 690.000000 690.000000 690.000000 690.00000 690.000000 690.000000
mean 31.514116 4.758725 2.223406 2.40000 183.562319 1017.385507
std 11.860245 4.978163 3.346513 4.86294 172.190278 5210.102598
min 13.750000 0.000000 0.000000 0.00000 0.000000 0.000000
25% 22.670000 1.000000 0.165000 0.00000 80.000000 0.000000
50% 28.460000 2.750000 1.000000 0.00000 160.000000 5.000000
75% 37.707500 7.207500 2.625000 3.00000 272.000000 395.500000
max 80.250000 28.000000 28.500000 67.00000 2000.000000 100000.000000

Векторизация¶

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

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

Вначале выделим бинарные и небинарные признаки:

Бинарные признаки¶

Значения бинарных признаков просто заменим на 0 и 1. Начнем с признака A1 :

A1 A4 A5 A6 A7 A9 A10 A12 A13 class
count 690 690 690 690 690 690 690 690 690 690
unique 2 3 3 14 9 2 2 2 3 2
top u g c v t f f g
freq 480 525 525 146 408 361 395 374 625 383

Посмотрим на результат:

A1 A9 A10 A12 class
count 690 690 690 690 690
unique 2 2 2 2 2
top
freq 480 361 395 374 383

Небинарные признаки¶

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

Признак j , принимающий s значений, заменим на s признаков, принимащих значения 0 или 1, в зависимости от того, чему равно значение исходного признака j .

Например, в нашей задаче признак A4 принимает 3 различных значения:

Заменим признак A4 тремя признаками: A4_u , A4_y , A4_l .

  • Если признак A4 принимает значение u , то признак A4_u равен 1 , A4_y равен 0 , A4_l равен 0 .
  • Если признак A4 принимает значение y , то признак A4_y равен 0 , A4_y равен 1 , A4_l равен 0 .
  • Если признак A4 принимает значение l , то признак A4_l равен 0 , A4_y равен 0 , A4_l равен 1 .

Такую векторизацию осуществляет в pandas метод get_dummies :

Нормализация количественных признаков¶

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

В этом случае количественные признаки полезно нормализовать. Это можно делать разными способами. Например, каждый количественный признак приведем к нулевому среднему и единичному среднеквадратичному отклонению:

A2 A3 A8 A11 A14 A15
count 6.900000e+02 6.900000e+02 6.900000e+02 6.900000e+02 6.900000e+02 690.000000
mean -2.486900e-15 2.059544e-16 4.736952e-16 1.029772e-17 4.891417e-17 0.000000
std 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000
min -1.497787e+00 -9.559198e-01 -6.643947e-01 -4.935286e-01 -1.066043e+00 -0.195272
25% -7.456942e-01 -7.550425e-01 -6.150897e-01 -4.935286e-01 -6.014412e-01 -0.195272
50% -2.575087e-01 -4.035072e-01 -3.655762e-01 -4.935286e-01 -1.368388e-01 -0.194312
75% 5.221970e-01 4.919034e-01 1.200038e-01 1.233822e-01 5.136044e-01 -0.119361
max 4.109180e+00 4.668645e+00 7.851932e+00 1.328414e+01 1.054901e+01 18.998208

Соединяем все в одну таблицу¶

Соединим все столбцы в одну таблицу:

Для удобства отдельно рассмотрим столбцы, соответствующие входным признакам (это будет матрица X ), а отдельно – выделенный признак (вектор y ):

Теперь у нас 42 входных признака.

Обучающая и тестовая выборки¶

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

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

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

Разбиение на тестовую и обучающую выборку должно быть случайным. Обычно используют разбиения в пропорции 50%:50%, 60%:40%, 75%:25% и т.д.

Мы воспользуемся функцией train_test_split из модуля sklearn.cross_validation . и разобьем данные на обучающую/тестовую выборки в отношении 70%:30%:

X_train , y_train – это обучающая выборка, X_test , y_test – тестовая.

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

В библиотеке scikit-learn реализована масса алгоритмов машинного обучения.

Некоторые алгоритмы машинного обучения, реализованные в scikit-learn:¶

Метод Класс
kNN – $k$ ближайших соседей sklearn.neighbors.KNeighborsClassifier
LDA – линейный дискриминантный анализ sklearn.lda.LDA
QDA – квадратичный дискриминантный анализ sklearn.qda.QDA
Logistic – логистическая регрессия sklearn.linear_model.LogisticRegression
SVC – машина опорных векторов sklearn.svm.SVC
Tree – деревья решений sklearn.tree.DecisionTreeClassifier
RF – случайный лес sklearn.ensemble.RandomForestClassifier
AdaBoost – адаптивный бустинг sklearn.ensemble.AdaBoostClassifier
GBT – градиентный бустинг деревьев решений sklearn.ensemble.GradientBoostingClassifier

Основные методы классов, реализующих алгоритмы машинного обучения¶

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

Метод класса Описание
fit(X, y) обучение (тренировка) модели на обучающей выборке X , y
predict(X) предсказание на данных X
set_params(**params) установка параметров алгоритма
get_params() чтение параметров алгоритма

Заметим, что параметры алгоритмов обучения можно задавать как в конструкторе класса, так и с помощью метода set_params(**params) .

Таблица наличия/отсутствия методов для основных алгоритмов машинного обучения:¶

Методы класса kNN LDA QDA Logistic SVC Tree RF AdaBoost GBT
fit(X, y) + + + + + + + + +
predict(X) + + + + + + + + +
predict_proba(X) + + + + + + + +
predict_log_proba(X) + + + + + + +
score(X, y) + + + + + + + + +
decision_function(X) + + + + + +
transform(X) + + + + +
staged_decision_function(X) + +
staged_predict(X) + +
staged_predict_proba(X) + +
staged_score(X, y) + +
set_params(**params) + + + + + + + + +
get_params() + + + + + + + + +

$k$NN – метод ближайших соседей¶

Начнем с одного из самых простых алгоритмов машинного обучения – метода $k$ ближайших соседей ($k$NN).

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

Количество соседей $k$ соответствует параметру n_neighbors . По умолчанию, n_neighbors = 5 .

Вначале обучим модель:

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

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

err_train и err_test – это ошибки на обучающей и тестовой выборках. Как мы видим, они составили 14.7% и 16.9%.

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

Попробуем уменьшить тестовую ошибку, варьируя параметры метода.

Основной параметр метода $k$ ближайших соседей – это $k$.

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

Например, найдем наилучшее значение $k$ среди значений [1, 3, 5, 7, 10, 15] :

В качестве оптимального метод выбрал значение $k$ равное 7. Ошибка перекрестного контроля составила 20.7%, что даже больше ошибки на тестовой выборке для 5 ближайших соседей. Это может быть обусленно тем, что для построения моделей в рамках схемы перекрестного контроля используются не все данные.

Проверим, чему равны ошибки на обучающей и тестовой выборках при этом значении параметра

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

SVC – машина опорных векторов¶

Следующий метод, который мы попробуем – машина опорных векторов (SVM – support vector machine или SVC – support vector classifier) – сразу приводит к более оптимистичным результатам.

Уже со значением параметров по умолчанию (в частности, ядро – радиальное rbf ) получаем более низкую ошибку на обучающей выборке:

Итак, на тестовой выборке получили ошибку в 13%.

С помощью подбора параметров попробуем ее еще уменьшить.

Радиальное ядро¶

Вначале попробуем найти лучшие значения параметров для радиального ядра.

Получили ошибку перекрестного контроля в 13.9%.

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

Ошибка на тестовой выборке равна 11.1%. Заметно лучше, чем $k$NN!

Линейное ядро¶

Теперь рассмотрим линейное ядро.

Получили ошибку перекрестного контроля в 15.1%.

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

Ошибка на тестовой выборке составила 12.6%.

Полиномиальное ядро¶

Попробуем также полиномиальное ядро:

Получили ошибку перекрестного контроля в 13.9%.

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

Ошибка на тестовой выборке составила 12.1%.

Random Forest – случайный лес¶

Воспользуемся одним из самых популярных алгоритмов машинного обучения – случайный лес – Random Forest.

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

Итак, ошибка на тестовой выборке составила 9.7%.

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

Отбор признаков (Feature Selection) с помощью алгоритма случайного леса¶

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

Отбор признаков необходим для следующих целей:

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

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

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

Все, что нужно сделать, – это после вызова метода predict для случайного леса прочитать поле feature_importances_ . Для каждого признака это поле содержит число, выражающее «важность» этого признака. Чем больше число, тем значимее признак. Сумма всех чисел равна 1.

Упорядочим значимости и выведем их значения:

Создание scikit. изучение моделей в масштабе с помощью Машинное обучение Azure Build scikit-learn models at scale with Azure Machine Learning

Применимо к: Базовый выпуск Корпоративный выпуск (Обновление до выпуска «Корпоративный») APPLIES TO: Basic edition Enterprise edition (Upgrade to Enterprise edition)

Из этой статьи вы узнаете, как выполнять сценарии обучения scikit-учиться в масштабе предприятия с помощью класса средства оценки SKlearn для машинное обучение Azure. In this article, learn how to run your scikit-learn training scripts at enterprise scale using Azure Machine Learning’s SKlearn estimator class.

Примеры сценариев, приведенные в этой статье, используются для классификации изображений диафрагмы для создания модели машинного обучения на основе набора данных диафрагмыscikit. The example scripts in this article are used to classify iris flower images to build a machine learning model based on scikit-learn’s iris dataset.

Если вы научитесь изучать модель машинного обучения scikit-учиться с нуля или используете существующую модель в облаке, вы можете использовать Машинное обучение Azure для масштабирования заданий обучения с открытым исходным кодом с помощью эластичных облачных ресурсов. Whether you’re training a machine learning scikit-learn model from the ground-up or you’re bringing an existing model into the cloud, you can use Azure Machine Learning to scale out open-source training jobs using elastic cloud compute resources. Вы можете создавать, развертывать, разворачивать и отслеживать модели производственного уровня с помощью Машинное обучение Azure. You can build, deploy, version and monitor production-grade models with Azure Machine Learning.

Предварительные требования Prerequisites

Запустите этот код в любой из этих сред: Run this code on either of these environments:

Машинное обучение Azure виртуальной машины записной книжки — Загрузка или установка не требуется Azure Machine Learning Notebook VM — no downloads or installation necessary

  • Выполните инструкции из учебника Настройка среды и рабочей области , чтобы создать выделенный сервер записной книжки, предварительно загруженный с помощью пакета SDK и примера репозитория. Complete the Tutorial: Setup environment and workspace to create a dedicated notebook server pre-loaded with the SDK and the sample repository.
  • В папке обучающие примеры на сервере записной книжки найдите готовую и развернутую записную книжку, перейдя к этому каталогу: практические советы по использованию azureml > ML-frameworks > scikit-learning > learning > Train-i Parameter-Learning-Deploy-with-sklearn папка. In the samples training folder on the notebook server, find a completed and expanded notebook by navigating to this directory: how-to-use-azureml > ml-frameworks > scikit-learn > training > train-hyperparameter-tune-deploy-with-sklearn folder.

Собственный сервер Jupyter Notebook Your own Jupyter Notebook server

  • Установите пакет SDK для машинное обучение Azure. Install the Azure Machine Learning SDK.
  • Создайте файл конфигурации рабочей области. Create a workspace configuration file.
  • Скачайте набор данных и пример файла скрипта Download the dataset and sample script file
    • набор данных IRI iris dataset
    • train_iris.py
  • Вы также можете найти завершенную Jupyter Notebook версию этого руководства на странице примеров GitHub. You can also find a completed Jupyter Notebook version of this guide on the GitHub samples page. Записная книжка включает в себя развернутую секцию, охватывающую настройку интеллектуальной настройки, и получение лучшей модели по основным метрикам. The notebook includes an expanded section covering intelligent hyperparameter tuning and retrieving the best model by primary metrics.

Настройка эксперимента Set up the experiment

В этом разделе выполняется настройка обучающего эксперимента путем загрузки требуемых пакетов Python, инициализации рабочей области, создания эксперимента и отправки обучающих данных и сценариев обучения. This section sets up the training experiment by loading the required python packages, initializing a workspace, creating an experiment, and uploading the training data and training scripts.

Импорт пакетов Import packages

Сначала импортируйте необходимые библиотеки Python. First, import the necessary Python libraries.

Инициализация рабочей области Initialize a workspace

Машинное обучение Azure Рабочая область — это ресурс верхнего уровня для службы. The Azure Machine Learning workspace is the top-level resource for the service. Он обеспечивает централизованное расположение для работы со всеми создаваемыми артефактами. It provides you with a centralized place to work with all the artifacts you create. В пакете SDK для Python можно получить доступ к артефактам рабочей области, создав объект workspace . In the Python SDK, you can access the workspace artifacts by creating a workspace object.

Создайте объект рабочей области из файла config.json , созданного в разделе Предварительные требования. Create a workspace object from the config.json file created in the prerequisites section.

Создание эксперимента машинного обучения Create a machine learning experiment


Создайте эксперимент и папку для хранения сценариев обучения. Create an experiment and a folder to hold your training scripts. В этом примере Создайте эксперимент с названием «sklearn-IRI». In this example, create an experiment called «sklearn-iris».

Подготовка сценария обучения Prepare training script

В этом руководстве сценарий обучения train_iris. Корректировка уже предоставлен. In this tutorial, the training script train_iris.py is already provided for you. На практике вы можете использовать любой пользовательский сценарий обучения как есть и запускать его с помощью Azure ML без необходимости изменять код. In practice, you should be able to take any custom training script as is and run it with Azure ML without having to modify your code.

Чтобы использовать возможности отслеживания и метрик машинного обучения Azure, добавьте небольшой объем кода машинного обучения Azure в сценарий обучения. To use Azure ML’s tracking and metrics capabilities, add a small amount of Azure ML code inside your training script. В обучающем скрипте train_iris. Корректировка показано, как зарегистрировать некоторые метрики в машинном обучении Azure с помощью объекта Run в скрипте. The training script train_iris.py shows how to log some metrics to your Azure ML run using the Run object within the script.

В предоставленном скрипте обучения используются данные примера из функции iris = datasets.load_iris() . The provided training script uses example data from the iris = datasets.load_iris() function. Для собственных данных может потребоваться выполнить такие действия, как Передача набора данных и скриптов , чтобы сделать данные доступными во время обучения. For your own data, you may need to use steps such as Upload dataset and scripts to make data available during training.

Скопируйте сценарий обучения train_iris. копировать в каталог проекта. Copy the training script train_iris.py into your project directory.

Создание или получение целевого объекта вычислений Create or get a compute target

Создайте целевой объект вычислений для выполнения задания scikit-учиться. Create a compute target for your scikit-learn job to run on. Scikit — сведения поддерживают только один узел, вычислительные ресурсы ЦП. Scikit-learn only supports single node, CPU computing.

Следующий код создает Машинное обучение Azure управляемого вычислений (Амлкомпуте) для удаленного обучающего ресурса. The following code, creates an Azure Machine Learning managed compute (AmlCompute) for your remote training compute resource. Создание Амлкомпуте занимает примерно 5 минут. Creation of AmlCompute takes approximately 5 minutes. Если Амлкомпуте с таким именем уже находится в рабочей области, этот код пропустит процесс создания. If the AmlCompute with that name is already in your workspace, this code will skip the creation process.

Дополнительные сведения о целевых объектах вычислений см. в статье что такое целевые показатели вычислений . For more information on compute targets, see the what is a compute target article.

Создание средства оценки scikit-учиться Create a scikit-learn estimator

Средство оценки scikit- Training предоставляет простой способ запуска задания обучения scikit-учиться на целевом объекте вычислений. The scikit-learn estimator provides a simple way of launching a scikit-learn training job on a compute target. Он реализуется с помощью класса SKLearn , который можно использовать для поддержки обучения ЦП с одним узлом. It is implemented through the SKLearn class, which can be used to support single-node CPU training.

Если для выполнения сценария обучения требуются дополнительные пакеты PIP или conda, можно установить пакеты в полученном образе DOCKER, передав их имена с помощью pip_packages и conda_packages аргументов. If your training script needs additional pip or conda packages to run, you can have the packages installed on the resulting docker image by passing their names through the pip_packages and conda_packages arguments.

Отправка запуска Submit a run

Объект Run предоставляет интерфейс для журнала выполнения во время выполнения задания и после его завершения. The Run object provides the interface to the run history while the job is running and after it has completed.

При выполнении выполнения он проходит следующие этапы. As the Run is executed, it goes through the following stages:

Подготовка. образ DOCKER создается в соответствии с оценкой TensorFlow. Preparing: A docker image is created according to the TensorFlow estimator. Образ отправляется в реестр контейнеров рабочей области и кэшируется для последующего выполнения. The image is uploaded to the workspace’s container registry and cached for later runs. Журналы также передаются в журнал выполнения и могут быть просмотрены для отслеживания хода выполнения. Logs are also streamed to the run history and can be viewed to monitor progress.

Масштабирование. Кластер пытается выполнить масштабирование, если кластеру Batch AI требуется больше узлов для выполнения выполнения, чем в настоящее время доступно. Scaling: The cluster attempts to scale up if the Batch AI cluster requires more nodes to execute the run than are currently available.

Выполняется: все скрипты в папке Script передаются в целевой объект вычислений, хранилища данных подключаются или копируются, а entry_script выполняется. Running: All scripts in the script folder are uploaded to the compute target, data stores are mounted or copied, and the entry_script is executed. Выходные данные из STDOUT и папки/логс передаются в журнал выполнения и могут использоваться для наблюдения за выполнением. Outputs from stdout and the ./logs folder are streamed to the run history and can be used to monitor the run.

Пост-обработка. папка/Outputs для выполнения копируется в журнал выполнения. Post-Processing: The ./outputs folder of the run is copied over to the run history.

Сохранение и регистрация модели Save and register the model

После обучения модели ее можно сохранить и зарегистрировать в рабочей области. Once you’ve trained the model, you can save and register it to your workspace. Регистрация модели позволяет хранить и отменять версии моделей в рабочей области, чтобы упростить Управление моделями и их развертывание. Model registration lets you store and version your models in your workspace to simplify model management and deployment.

Добавьте следующий код в сценарий обучения train_iris. корректировки, чтобы сохранить модель. Add the following code to your training script, train_iris.py, to save the model.

Зарегистрируйте модель в рабочей области с помощью следующего кода. Register the model to your workspace with the following code.

Дальнейшие действия Next steps

В этой статье вы обучили и зарегистрировали модель keras на Машинное обучение Azure. In this article, you trained and registered a Keras model on Azure Machine Learning. Чтобы узнать, как развернуть модель, перейдите к статье о развертывании модели. To learn how to deploy a model, continue on to our model deployment article.

Обзор методов классификации в машинном обучении с помощью Scikit-Learn

1245 просмотра

1 ответ

2037 Репутация автора

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

Например, проблема может быть подана для нового найма, который впервые настраивает свой ноутбук под названием «Настройка ноутбука для Джона Смита» и имеет теги «Проблемы с ноутбуком» и «Новый найм на борту». Таким образом, может быть несколько тегов для данной проблемы.

Я пытаюсь создать классификатор, который берет название проблемы и предоставляет список предлагаемых тегов. Мой руководитель попросил меня сделать это с помощью алгоритма Наивного Байеса, поэтому я пытаюсь это сделать. Я использую scikit-learn.

Прежде всего, правильно ли говорить, что это «многолинейная» классификационная задача, описанная в документации scikit-learn ( http://scikit-learn.org/stable/modules/multiclass.html )? Это то, что я думаю, но я не совсем понимаю описание «Multioutput-multilasslass классификация», поэтому я не смог этого исключить. Опять же, я предсказываю один или несколько классов для каждого образца.

Во-вторых, похоже, что Наивный-Байес (по крайней мере, в scikit-learn) на самом деле не поддерживает мультилейбл. Так как я застрял (на данный момент) с использованием Naive-Bayes, я подумал, что могу как-то свернуть свой собственный многослойный классификатор, используя приведенное ниже. Это похоже на разумный подход?

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

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

Ответы (1)

2 плюса

1272 Репутация автора

Подход, который вы предлагаете, действителен; на самом деле это подход «один против остальных», обобщенный для задачи многослойной классификации, и он также известен как метод бинарной релевантности. Поскольку вы уже используете scikit-learn , требуемая функциональность уже реализована в sklearn.multiclass.OneVsRestClassifier модуле .

Единственное требование — отформатировать ваши метки как соответствующий массив формы [n_samples, n_classes] , но это также тривиально с кодировщиками меток scikit-learn .

Машинное обучение. Классификация. Ошибка при использовании модели [закрыт]

Участвую в соревновании Titanic: Machine Learning from Disaster на Kaggle. Мой kernel работал, но внезапно стали вываливаться ошибки для методов Random Forest и Gradient Boosting Classifier, каких-либо особых изменений не припомню.

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

Закрыт по причине того, что не по теме участниками mkkik, Yaant, Vadizar, 0xdb, aleksandr barakin 25 апр в 13:38 .

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

  • «Вопрос вызван проблемой, которая больше не воспроизводится, или опечаткой. Хотя похожие вопросы могут быть уместны на этом сайте, решение для этого вопроса вряд ли поможет будущим посетителям. Обычно можно избежать подобных вопросов написанием и исследованием минимальной программы для воспроизведения проблемы до публикации вопроса.» – mkkik, Yaant, Vadizar, 0xdb, aleksandr barakin

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

Igor Subbotin

Data Science, High Scalability and Software Engineering

Thursday, January 22, 2015

Введение в scikit-learn

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

Как появилась библиотека scikit-learn?

David Cournapeau изначально разработал библиотеку scikit-learn в рамках проекта Google Summer of Code в 2007 году. Позднее Matthieu Brucher присоединился к проекту и использовал scikit-learn в своей дипломной работе. В 2010 году INRIA подключилась к работе над библиотекой и первая версия (v0.1 beta) была выпущена в конце января 2010.

На текущий момент в проекте задействовано более 30 активных участников и имеется финансовая поддержка от INRIA, Google, Tinyclues и Python Software Foundation.

Что такое scikit-learn?

Библиотека scikit-learn предоставляет реализацию целого ряда алгоритмов для обучения с учителем (Supervised Learning) и обучения без учителя (Unsupervised Learning) через интерфейс для языка программирования Python. Данная библиотека распространяется под лицензией «Simplified BSD License» и имеет дистрибутивы для множества различных версий Linux, поощрая тем самым академическое и коммерческое использование scikit-learn.

Scikit-learn построена поверх SciPy (Scientific Python), который должен быть установлен перед использованием scikit-learn. Данный стек включает в себя:

  • NumPy: расширение языка Python, добавляющее поддержку больших многомерных массивов и матриц, вместе с большой библиотекой высокоуровневых математических функций для операций с этими массивами
  • SciPy: открытая библиотека высококачественных научных инструментов для языка программирования Python
  • Matplotlib: библиотека на языке программирования Python для визуализации данных двумерной (2D) графикой (3D графика также поддерживается)
  • IPython: интерактивная оболочка для языка программирования Python, которая предоставляет расширенную интроспекцию, дополнительный командный синтаксис, подсветку кода и автоматическое дополнение
  • Sympy: библиотека для символьных вычислений
  • Pandas: различные структуры данных и анализ

Дополнения и модули SciPy условно именуются SciKits. Именно поэтому модуль, предоставляющий алгоритмы обучения, называется scikit-learn.

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

Несмотря на то что весь интерфейс библиотеки представлен на Python, но использование библиотек, написанных на C во внутренней реализации некоторых частей scikit-learn, позволяет значительно повысить скорость работы, например, использование NumPy для работы с массивами и для операций с матрицами, использование LAPACK и LibSVM и аккуратное использование Cython.

Возможности scikit-learn

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

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

  • Кластеризация (Clustering): для группировки неразмеченных данных, например, метод k-средних (k-means)
  • Перекрестная проверка (Cross Validation): для оценки эффективности работы модели на независимых данных
  • Наборы данных (Datasets): для тестовых наборов данных и для генерации наборов данных с определенными свойствами для исследования поведенческих свойств модели
  • Сокращение размерности (Dimensionality Reduction): для уменьшения количества атрибутов для визуализации и отбора признаков (Feature Selection), например, метод главных компонент (Principal Component Analysis)
  • Алгоритмические композиции (Ensemble Methods): для комбинирования предсказаний нескольких моделей
  • Извлечение признаков (Feature Extraction): определение атрибутов в изображениях и текстовых данных
  • Отбор признаков (Feature Selection): для выявления значимых атрибутов на основе которых будет построена модель
  • Оптимизация параметров алгоритма (Parameter Tuning): для получения максимально эффективной отдачи от модели
  • Множественное обучение (Manifold Learning): для нелинейного сокращения размерности данных
  • Алгоритмы обучения с учителем (Supervised Models): огромный набор методов не ограничивается обобщенными линейными моделями (Generalized Linear Models), дискриминантным анализом (Discriminate Analysis), наивным байесовским классификатором (Naive Bayes), нейронными сетями (Neural Networks), методом опорных векторов (Support Vector Machines) и деревьями принятия решений (Decision Trees).

Пример: Деревья регрессии и классификации

Следующий небольшой пример показывает, как легко пользоваться библиотекой scikit-learn.

В данном примере мы используем достаточно популярный алгоритм на основе деревьев принятия решений под названием Classification and Regression Tress (CART) и применяем его к набору данных Iris. Данный набор данных используется для различных примеров и поставляется вместе с библиотекой. Классификатор проходит процесс настройки и выполняется процесс предсказания. Все это происходит на тренировочном наборе данных. И в самом конце мы выводим на экран оценку качества работы нашей модели и матрицу неточностей (Confusion Matrix).

Кто использует scikit-learn

Страница отзывов scikit-learn содержит отзывы Inria, Mendeley, wise.io, Evernote, Telecom ParisTech и AWeber в качестве пользователей библиотеки. И, в общем-то, если посмотреть на этот список компаний, которые рассказали об использовании scikit-learn, то вполне можно предположить, что количество компаний, которые используют scikit-learn в своей работе, вероятнее всего, еще больше.

При разработке библиотеки просматривается хорошее управление релизами. Важным фактором также является то, что код библиотеки имеет высокий процент покрытия тестами. Scikit-learn вполне подходит как для тестовых проектов, так и для продакшн-систем.

Дополнительные ресурсы

Хорошей отправной точкой для продолжения своего знакомства с scikit-learn будет домашняя страница библиотеки, которая содержит документацию и ссылки на дополнительные ресурсы. При желании можно получить доступ к коду в репозитарии на github, а также доступ к релизам на странице Sourceforge.

Документация

Хорошим стартом использования scikit-learn на практике будет страница Quick Start Tutorial и просмотр примеров кода по интересующим вас алгоритмам обучения в руководстве пользователя. Ну и конечно же API Reference будет отличным подспорьем при выполнении практических задач.

Публикации

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

Книги

Хорошей книгой по данной тематике будет “Building Machine Learning Systems with Python”, она написана хорошим языком и содержит интересные примеры.

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

Различия и особенности десяти популярных алгоритмов машинного обучения.

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

Эти алгоритмы можно разделить на три основные категории.

  1. Контролируемые алгоритмы: набор обучающих данных имеет входные данные, а также желаемый результат. Во время обучения модель будет корректировать свои переменные для сопоставления входных данных с соответствующим выходом.
  2. Неконтролируемые алгоритмы: в этой категории нет желаемого результата. Алгоритмы будут группировать набор данных на разные группы.
  3. Алгоритмы с подкреплением: эти алгоритмы обучаются на готовых решениях. На основе этих решений алгоритм будет обучаться на основе успеха/ошибки результата. В конечном счете алгоритм сможет давать хорошие прогнозы.

Следующие алгоритмы будут описываться в этой статье.

  • Линейная регрессия
  • SVM (метод опорных векторов)
  • KNN (метод k-ближайших соседей)
  • Логистическая регрессия
  • Дерево решений
  • Метод k-средних
  • Random Forest
  • Наивный байесовский классификатор
  • Алгоритмы сокращения размеров
  • Алгоритмы усиления градиента

1. Линейная регрессия (linear regression)

Алгоритм линейной регрессии будет использовать точки данных для поиска оптимальной линии для создания модели. Линию можно представить уравнением y = m*x + c, где y – зависимая переменная, а x – независимая переменная. Базовые теории исчисления применяются для определения значений для m и c с использованием заданного набора данных.

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

scikit-learn — это простой и эффективный инструмент для машинного обучения на Python. Ниже представлена реализация линейной регрессии при помощи scikit-learn.

2. Метод опорных векторов (SVM — Support Vector Machine)

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

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

3. Метод k-ближайших соседей (KNN — K-nearest neighbors)

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

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

4. Логистическая регрессия (logistic regression)

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

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

y = e^(b0 + b1*x) / (1 + e^(b0 + b1*x))

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

5. Дерево решений (decision tree)

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

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

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

6. Метод k-средних (k-means)

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

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

7. Случайный лес (Random Forest)

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

8. Наивный байесовский классификатор (Naive Bayes)

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

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

9. Алгоритмы сокращения размеров (dimensional reduction algorithms)

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

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

10. Алгоритмы усиления градиента (gradient boosting algorithms)

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

Существует несколько алгоритмов усиления градиента:

  • XGBoost — использует линейные алгоритмы и дерево решений
  • LightGBM — использует только алгоритмы, основанные на деревьях

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

Добавить комментарий