scikit learn что это
Обзор библиотек для машинного обучения на Python
Содержание
Scikit-learn [ править ]
Описание [ править ]
Примеры кода [ править ]
Линейная регрессия [ править ]
Разбиение датасета на тренировочный и тестовый:
Построение и обучение модели:
Построение графика прямой, получившейся в результате работы линейной регрессии:
Логистическая регрессия [ править ]
Вывод первых трех тренировочных данных для визуализации:
Разбиение датасета на тренировочный и тестовый:
Построение и обучение модели:
Перцептрон [ править ]
Разбиение датасета на тренировочный и тестовый:
Построение и обучение модели:
Метрический классификатор и метод ближайших соседей [ править ]
Дерево решений и случайный лес [ править ]
Обработка естественного языка [ править ]
Вывод первых трех строк первого тренивочного файла и его класса:
Кросс-валилация и подбор параметров [ править ]
Возьмем предыдущий пример с обработкой естественного языка и попробуем увеличить точность алгоритма за счет кросс-валидации и подбора параметров:
Метод опорных векторов (SVM) [ править ]
Разбиение датасета на тестовый и тренировочный:
Построение и обучение модели:
EM-алгоритм [ править ]
Уменьшение размерности [ править ]
Tensorflow [ править ]
Описание [ править ]
Tensorflow [3] — библиотека, разработанная корпорацией Google для работы с тензорами, используется для построения нейронных сетей. Поддержка вычислений на видеокартах имеет поддержку языка программирования C++. На основе данной библиотеки строятся более высокоуровневые библиотеки для работы с нейронными сетями на уровне целых слоев. Так, некоторое время назад популярная библиотека Keras стала использовать Tensorflow как основной бэкенд для вычислений вместо аналогичной библиотеки Theano. Для работы на видеокартах NVIDIA используется библиотека cuDNN. Если вы работаете с картинками (со сверточными нейросетями), скорее всего, придется использовать данную библиотеку.
Примеры кода [ править ]
Сверточная нейронная сеть [ править ]
Реализация сверточной нейронной сети для классификации цифр из датасета MNIST:
Keras [ править ]
Описание [ править ]
Keras [4] — библиотека для построения нейронных сетей, поддерживающая основные виды слоев и структурные элементы. Поддерживает как рекуррентные, так и сверточные нейросети, имеет в своем составе реализацию известных архитектур нейросетей (например, VGG16). Некоторое время назад слои из данной библиотеки стали доступны внутри библиотеки Tensorflow. Существуют готовые функции для работы с изображениями и текстом. Интегрирована в Apache Spark с помощью дистрибутива dist-keras. Данная библиотека позволяет на более высоком уровне работать с нейронными сетями. В качестве библиотеки для бэкенда может использоваться как Tensorflow, так и Theano.
Примеры кода [ править ]
Сверточная нейронная сеть [ править ]
Реализация сверточной нейронной сети для классификации текста:
Он также предоставляет несколько наборов данных, которые вы можете использовать для тестирования ваших моделей.
Scikit-learn не реализует все, что связано с машинным обучением. Например, он не имеет комплексной поддержки для:
Scikit-learn основан на NumPy и SciPy, поэтому необходимо понять хотя бы азы этих двух библиотек, чтобы эффективно применять Scikit-learn.
В этой статье кратко представим некоторые возможности scikit-learn.
Предварительная обработка данных
Вы можете использовать scikit-learn для подготовки ваших данных к алгоритмам машинного обучения: стандартизации или нормализации данных, кодирования категориальных переменных и многое другое.
Давайте сначала определим массив NumPy, с которым будем работать:
Уменьшение размерности
Уменьшение размерности включает в себя выбор или извлечение наиболее важных компонентов (признаков) многомерного набора данных. Scikit-learn предлагает несколько подходов к уменьшению размерности. Одним из них является анализ основных компонентов (PCA).
Выбор модели
Для обучения и тестирования моделей машинного обучения, вам необходимо случайным образом разбивать данные на подмножества. Это включает как входы, так и их соответствующие выходы. Функция sklearn.model_selection.train_test_split () полезна в таких случаях:
В дополнение к обычному разделению наборов данных, scikit-learn предоставляет средства для осуществления перекрестной проверки, настройки гиперпараметров ваших моделей с помощью поиска по сетке, вычисления многих величин, которые показывают производительность модели (например, коэффициент детерминации, среднеквадратичная ошибка, показатель отклонения с пояснением, матрица ошибок, отчет о классификации, f-показатели и многое другое).
Набор данных
Scikit-learn предоставляет несколько наборов данных, подходящих для изучения и тестирования ваших моделей. В основном, это известные наборы данных. Они представляют собой достаточный объем данных для тестирования моделей и в то же время не очень большой, что обеспечивает приемлемую продолжительность обучения.
Например, функция sklearn.datasets.load_boston () отображает данные о ценах на дома в районе Бостона (цены не обновляются!). Есть 506 наблюдений, а входная матрица имеет 13 столбцов (признаков):
Этот набор данных подходит для многовариантной регрессии.
Этот набор данных подходит для классификации. Он содержит 13 функций, связанных с тремя различными винодельческими компаниями из Италии, и 178 наблюдений.
Регрессия
Scikit-learn поддерживает различные методы регрессии начиная с линейной регрессии, метода k-ближайших соседей посредством полиномиальной регрессии, регрессии опорных векторов, деревьев принятия решений и т.д., до ансамбля методов, таких как random forest и градиентный бустинг. Он также поддерживает нейронные сети, но не в такой степени, как специализированные библиотеки, например, как TensorFlow.
Ниже покажем регрессию random forest.
Обычно мы начинаем наше регрессионное путешествие с импорта необходимых нам пакетов, классов и функций:
Следующим шагом является получение данных для работы и разделение этих данных на обучающее и тестовое подмножества. Мы будем использовать набор данных Бостона:
Некоторые методы требуют масштабирования (стандартизации) данных, в то время как для других методов это необязательно. На этот раз мы продолжим без масштабирования.
Теперь нам нужно создать наш регрессор и обучить его с помощью подмножества данных, выбранного для обучения:
После того, как модель обучена, мы проверяем коэффициент детерминации на обучающем подмножестве данных и, что более важно, на тестовом подмножестве данных, который не использовался при обучении моделей.
Классификация
Scikit-learn выполняет классификацию почти так же, как регрессию. Он поддерживает различные методы классификации, такие как логистическая регрессия и k-ближайшие соседи, метод опорных векторов, наивный байесовский классификатор, дерево принятия решений, а также ансамбль методов, такие как random forest, AdaBoost и градиентный бустинг.
В этой статье показано, как использовать метод random forest для классификации. Этот подход весьма аналогичен подходу, применяемому в случае регрессии. Но теперь мы будем использовать набор данных, связанных с вином, определять классификатор и оценивать его с точностью классификации вместо коэффициента детерминации.
Кластерный анализ
В этой статье мы покажем метод k-средних. При его реализации, будьте внимательны, имеет ли смысл стандартизировать или нормализовать ваши данные и особенно, какая мера расстояния подходит (в большинстве случаев, это евклидово расстояние).
Опять же, мы начинаем с импорта и получения данных. На этот раз мы возьмем NumPy и sklearn.cluster.KMeans:
Следующим шагом является масштабирование данных, но это не всегда обязательно. Однако во многих случаях это действительно хорошая идея. Как только предварительная обработка данных завершена, мы создаем копию KMeans и подгоняем ее под наши данные:
Итак, мы готовы получить результаты, такие как координаты центров кластеров и метки кластеров, которым принадлежит каждое наблюдение:
Заключение
В этой статье представлены только основы Scikit-Learn, очень популярного пакета Python по data science и machine learning. Это одна из основных библиотек Python для этих целей.
Введение в Scikit-learn
Библиотека Scikit-learn — самый распространенный выбор для решения задач классического машинного обучения. Она предоставляет широкий выбор алгоритмов обучения с учителем и без учителя. Обучение с учителем предполагает наличие размеченного датасета, в котором известно значение целевого признака. В то время как обучение без учителя не предполагает наличия разметки в датасете — требуется научиться извлекать полезную информацию из произвольных данных. Одно из основных преимуществ библиотеки состоит в том, что она работает на основе нескольких распространенных математических библиотек, и легко интегрирует их друг с другом. Еще одним преимуществом является широкое сообщество и подробная документация. Scikit-learn широко используется для промышленных систем, в которых применяются алгоритмы классического машинного обучения, для исследований, а так же для новичков, которые только делает первые шаги в области машинного обучения.
Для своей работы, scikit-learn использует следующие популярные библиотеки:
Что содержит Scikit-learn
В задачи библиотеки не входит загрузка, обработка, манипуляция данными и их визуализация. С этими задачами отлично справляются библиотеки Pandas и NumPy. Scikit-learn специализируется на алгоритмах машинного обучения для решения задач обучения с учителем: классификации (предсказание признака, множество допустимых значений которого ограничено) и регрессии (предсказание признака с вещественными значениями), а также для задач обучения без учителя: кластеризации (разбиение данных по классам, которые модель определит сама), понижения размерности (представление данных в пространстве меньшей размерности с минимальными потерями полезной информации) и детектирования аномалий.
Библиотека реализует следующие основные методы:
Это — лишь базовый список. Помимо этого, Scikit-learn содержит функции для расчета значений метрик, выбора моделей, препроцессинга данных и другие.
Пример применения
Чтобы дать вам представление о том, как легко обучать и тестировать модель ML с помощью Scikit-Learn, вот пример того, как это сделать для классификатора дерева решений!
Деревья решений для классификации и регрессии очень просты в использовании в Scikit-Learn. Сначала мы загрузим наш датасет, который фактически встроен в библиотеку. Затем мы инициализируем наше дерево решений для классификации. Обучение модели — это просто одна строчка .fit(X, Y), где X — обучающая выборка в формате массива NumPy, а Y — массив целевых значений, также в формате массива NumPy.
Scikit-Learn также позволяет нам визуализировать наше дерево. Для этого есть несколько настриваемых опций, которые помогут визуализировать узлы принятия решений и разбить изученную модель, что очень полезно для понимания того, как она работает. Ниже мы раскрасим узлы на основе имен признаков и отобразим информацию о классе и объектах каждого узла.
Каждый из параметров алгоритма интуитивно назван и доступно объяснен. Кроме того, разработчики также предлагают туториалы с примером кода о том, как обучать и применять модель, ее плюсы и минусы и практические советы по применению.
Введение в машинное обучение с помощью scikit-learn (перевод документации)
Данная статья представляет собой перевод введения в машинное обучение, представленное на официальном сайте scikit-learn.
В этой части мы поговорим о терминах машинного обучения, которые мы используем для работы с scikit-learn, и приведем простой пример обучения.
Машинное обучение: постановка вопроса
В общем, задача машинного обучения сводится к получению набора выборок данных и, в последствии, к попыткам предсказать свойства неизвестных данных. Если каждый набор данных — это не одиночное число, а например, многомерная сущность (multi-dimensional entry или multivariate data), то он должен иметь несколько признаков или фич.
Обучающая выборка и контрольная выборка
Машинное обучение представляет собой обучение выделению некоторых свойств выборки данных и применение их к новым данным. Вот почему общепринятая практика оценки алгоритма в Машинном обучении — это разбиение данных вручную на два набора данных. Первый из них — это обучающая выборка, на ней изучаются свойства данных. Второй — контрольная выборка, на ней тестируются эти свойства.
Загрузка типовой выборки
Scikit-learn устанавливается вместе с несколькими стандартными выборками данных, например, iris и digits для классификации, и boston house prices dataset для регрессионного анализа.
Например, набор данных digits.data дает доступ к фичам, которые можно использовать для классификации числовых выборок:
а digits.target дает возможность определить в числовой выборке, какой цифре соответствует каждое числовое представление, чему мы и будем обучаться:
Форма массива данных
Обычно, данные представлены в виде двухмерного массива, такую форму имеют n_samples, n_features, хотя исходные данные могут иметь другую форму. В случае с числами, каждая исходная выборка — это представление формой (8, 8), к которому можно получить доступ, используя:
Следующий простой пример с этим набором данных иллюстрирует, как, исходя из поставленной задачи, можно сформировать данные для использования в scikit-learn.
Обучение и прогнозирование
В случае с числовым набором данных цель обучения — это предсказать, принимая во внимание представление данных, какая цифра изображена. У нас есть образцы каждого из десяти возможных классов (числа от 0 до 9), на которым мы обучаем алгоритм оценки (estimator), чтобы он мог предсказать класс, к которому принадлежит неразмеченный образец.
В scikit-learn алгоритм оценки для классификатора — это Python объект, который исполняет методы fit(X, y) и predict(T). Пример алгоритма оценки — это класс sklearn.svm.SVC выполняет классификацию методом опорных векторов. Конструктор алгоритма оценки принимает в качестве аргументов параметры модели, но для сокращения времени, мы будем рассматривать этот алгоритм как черный ящик:
Выбор параметров для модели
В этом примере мы установили значение gamma вручную. Также можно автоматически определить подходящие значения для параметров, используя такие инструменты как grid search и cross validation.
Мы назвали экземпляр нашего алгоритма оценки clf, так как он является классификатором. Теперь он должен быть применен к модели, т.е. он должен обучится на модели. Это осуществляется путем прогона нашей обучающей выборки через метод fit. В качестве обучающей выборки мы можем использовать все представления наших данных, кроме последнего. Мы сделали эту выборку с помощью синтаксиса Python [:-1], что создало новый массив, содержащий все, кроме последней, сущности из digits.data:
Теперь можно предсказать новые значения, в частности, мы можем спросить классификатор, какое число содержится в последнем представлении в наборе данных digits, которое мы не использовали в обучении классификатора:
Соответствующее изображение представлено ниже:
Как вы можете видеть, это сложная задача: представление в плохом разрешении. Вы согласны с классификатором?
Полное решение этой задачи классификации доступно в качестве примера, который вы можете запустить и изучить: Recognizing hand-written digits.
Сохранение модели
В scikit модель можно сохранить, используя встроенный модуль, названный pickle:
В частном случае применения scikit, может быть полезнее заметить pickle на библиотеку joblib (joblib.dump & joblib.load), которая более эффективна для работы с большим объемом данных, но она позволяет сохранять модель только на диске, а не в строке:
Потом можно загрузить сохраненную модель(возможно в другой Python процесс) с помощью:
Обратите внимание, что joblib.dump возвращает список имен файлов. Каждый отдельный массив numpy, содержащийся в clf объекте, сеарилизован как отдельный файл в файловой системе. Все файлы должны находиться в одной папке, когда вы снова загружаете модель с помощью joblib.load.
Обратите внимание, что у pickle есть некоторые проблемы с безопасностью и сопровождением. Для получения более детальной информации о хранении моделей в scikit-learn обратитесь к секции Model persistence.
Библиотека SciKit Learn в Python
Проект scikit-learn стартовал, как проект Google Summer of Code (также известный как GSoC) Дэвида Курнапо, как scikits.learn. Он получил свое название от «Scikit», отдельного стороннего расширения для SciPy.
Scikit написан на Python (большая его часть), а некоторые из его основных алгоритмов написаны на Cython для еще большей производительности.
Scikit-learn используется для построения моделей, и не рекомендуется использовать его для чтения, обработки и суммирования данных, поскольку для этой цели доступны более подходящие фреймворки. Это открытый исходный код и выпущен под лицензией BSD.
Как установить Scikit Learn?
Scikit предполагает, что на вашем устройстве установлена платформа Python 2.7 или выше с пакетами NumPY (1.8.2 и выше) и SciPY (0.13.3 и выше). После того, как мы установили эти пакеты, мы можем продолжить установку.
Для установки pip выполните в терминале следующую команду:
Если вам нравится conda, вы также можете использовать ее
для установки пакета, выполните следующую команду:
Использование Scikit-Learn
После того, как вы закончите установку, вы можете легко использовать scikit-learn в своем коде Python, импортировав его как:
Загрузка набора данных
Начнем с загрузки набора данных для игры. Загрузим простой набор данных с именем Iris. Это набор данных о цветке, он содержит 150 наблюдений о различных размерах. Давайте посмотрим, как загрузить набор данных с помощью scikit-learn.
Мы печатаем форму данных для удобства, вы также можете распечатать данные целиком, если хотите, запуск кодов дает следующий результат:
Обучение и прогнозирование
Теперь мы загрузили данные, давайте попробуем поучиться на них и спрогнозировать новые данные. Для этого мы должны создать оценщик, а затем вызвать его метод соответствия.
Вот что мы получаем, когда запускаем этот скрипт:
Линейная регрессия
Создавать различные модели с помощью scikit-learn довольно просто. Начнем с простого примера регрессии.
Запуск модели должен вернуть точку, которую можно построить на той же линии:
k-Классификатор ближайшего соседа
Попробуем простой алгоритм классификации. Этот классификатор использует алгоритм для представления обучающих выборок.
Запустим классификатор и проверим результаты, классификатор должен вернуть 0. Попробуем пример:
К-средство кластеризации
Это самый простой алгоритм кластеризации. Набор делится на » k’ кластеров, и каждое наблюдение назначается кластеру. Это делается итеративно до тех пор, пока кластеры не сойдутся.
Мы создадим одну такую модель кластеризации в следующей программе:
При запуске программы мы увидим в списке отдельные кластеры. Вот результат для приведенного выше фрагмента кода:
Заключение
В этом руководстве мы увидели, что Scikit-Learn упрощает работу с несколькими алгоритмами машинного обучения. Мы видели примеры регрессии, классификации и кластеризации.