fbpx

Каталог статей

Каталог статей для размещения статей информационного характера

Как выучить

Введение в машинное обучение с помощью scikit-learn¶

Введение в машинное обучение с помощью scikit-learn¶

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

Машинное обучение: постановка задачи¶

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

Проблемы обучения делятся на несколько категорий:

  • обучение под наблюдением, в котором данные поставляются с дополнительными атрибутами, которые мы хотим предсказать (Нажмите здесь, чтобы перейти на страницу scikit-learn supervised learning).Эта проблема может быть либо:

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

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

обучение без наблюдения, в котором обучающие данные состоят из набора входных векторов x без соответствующих целевых значений. Целью в таких задачах может быть обнаружение групп похожих примеров в данных, что называется кластеризацией, или определение распределения данных в пространстве входных данных, что называется оценкой плотности, или проецирование данных из высокоразмерного пространства в двух- или трехмерное с целью визуализации (Нажмите здесь, чтобы перейти на страницу Scikit-Learn unsupervised learning).

Обучающее и тестирующее множество

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

Загрузка примера набора данных¶

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

In the following, we start a Python interpreter from our shell and then load the iris and digits datasets. Our notational convention is that $ denotes the shell prompt while >>> обозначим

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

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

Форма массивов данных

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

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

Загрузка из внешних наборов данных

Чтобы загрузить данные из внешнего набора данных, обратитесь к разделу Загрузка внешних наборов данных.

Обучение и прогнозирование

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

В scikit-learn оценщик для классификации – это объект Python, реализующий методы fit(X, y) и predict(T).

Примером эстиматора является класс sklearn.svm.SVC , который реализует классификацию векторов поддержки. Конструктор оценщика принимает в качестве аргументов параметры модели.

Пока мы будем рассматривать эстиматор как “черный ящик”:

Выбор параметров модели

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

Экземпляр оценщика clf (для классификатора) сначала подгоняется под модель; то есть он должен обучаться на модели. Это делается путем передачи нашего обучающего набора методу fit. В качестве обучающего набора мы будем использовать все изображения из нашего набора данных, за исключением последнего изображения, которое мы зарезервируем для нашего предсказания. Мы выбираем обучающее множество с помощью синтаксиса [:-1] Python, который создает новый массив, содержащий все изображения, кроме последнего элемента из digits.data:

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

Соответствующим изображением является:

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

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

Условные обозначения¶

Оценщики scikit-learn следуют определенным правилам, чтобы сделать их поведение более предсказуемым. Более подробно они описаны в Глоссарии общих терминов и элементов API .

Приведение типов¶

Если не указано иное, входные данные будут приведены к float64:

В данном примере X – это float32 , который приводится к float64 с помощью fit_transform(X).

Цели регрессии приводятся к float64, а цели классификации сохраняются:

Здесь первая функция predict() возвращает целочисленный массив, поскольку iris.target (целочисленный массив) был использован в fit. Вторая функция predict() возвращает строковый массив, поскольку iris.target_names использовался для подгонки.

Подгонка и обновление параметров¶

Гиперпараметры оценщика могут быть обновлены после его построения с помощью метода set_params(). Вызов fit() более одного раза перезапишет то, что было получено в предыдущем fit():

Здесь ядро по умолчанию rbf сначала меняется на линейное через SVC.set_params() после построения оценщика, а затем снова меняется на rbf для повторной подгонки оценщика и второго предсказания.

Многоклассовый и многометочный фитинг¶

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

В приведенном выше случае классификатор настраивается на 1d массив многоклассовых меток, и метод predict() выдает соответствующие многоклассовые предсказания. Также можно выполнить подгонку на 2d массиве бинарных индикаторов меток:

Здесь классификатор подгоняется() по 2d представлению двоичных меток y , используя LabelBinarizer . В этом случае функция predict() возвращает 2d массив, представляющий соответствующие многометочные предсказания.

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

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

../../_images/sphx_glr_plot_digits_last_image_001.png

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

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