Главная страница

ОМО 3. Дисциплина Основы машинного обучения Рабочая тетрадь 3


Скачать 0.61 Mb.
НазваниеДисциплина Основы машинного обучения Рабочая тетрадь 3
АнкорОМО 3
Дата06.03.2022
Размер0.61 Mb.
Формат файлаpdf
Имя файлаОМО 3.pdf
ТипИнструкция
#384708

Дисциплина «Основы машинного обучения»
Рабочая тетрадь № 3
Постановка задачи классификации
Классификация — один из разделов машинного обучения, посвященный решению следующей задачи. Имеется множество объектов
(ситуаций), разделённых некоторым образом на классы. Задано конечное множество объектов, для которых известно, к каким классам они относятся.
Это множество называется обучающей выборкой. Классовая принадлежность остальных объектов не известна. Требуется построить алгоритм, способный классифицировать произвольный объект из исходного множества.
Классифицировать объект — значит, указать номер (или наименование класса), к которому относится данный объект.
Классификация объекта — номер или наименование класса, выдаваемый алгоритмом классификации в результате его применения к данному конкретному объекту.
1.1. Теоретический материал – Функции Python
Перед тем как рассматривать задачи классификации вспомним понятие функции (метода) в Python. Функция в python - объект, принимающий аргументы и возвращающий значение. Обычно функция определяется с помощью инструкции `def`.
Определим простейшую функцию:
def add(x, y):
return x + y
Инструкция return говорит, что нужно вернуть значение. В нашем случае функция возвращает сумму x и y. Теперь мы ее можем вызвать:
add(1, 10)
add('abc', 'def')
'abcdef'
Функция может быть любой сложности и возвращать любые объекты
(списки, кортежи, и даже функции):
def newfunc(n):
def myfunc(x):
return x + n
return myfunc
new = newfunc(100) # new - это функция
new(200)
300

Функция может и не заканчиваться инструкцией return, при этом функция вернет значение None:
def func():
pass
print(func())
None
Функция может принимать произвольное количество аргументов или не принимать их вовсе. Также распространены функции с произвольным числом аргументов, функции с позиционными и именованными аргументами, обязательными и необязательными.
def func(*args):
return args
func(1, 2, 3, 'abc')
(1, 2, 3, 'abc')
func()
()
func(1)
(1,)
Как видно из примера, args - это кортеж из всех переданных аргументов функции, и с переменной можно работать также, как и с кортежем.
Функция может принимать и произвольное число именованных аргументов, тогда перед именем ставится **: def func(**kwargs): return kwargs func(a=1, b=2, c=3)
{'a': 1, 'c': 3, 'b': 2} func()
{} func(a='python')
{'a': 'python'}
1.2.1 Пример
Задача:
Напишите функцию sum_range(start, end), которая суммирует все целые числа от значения «start» до величины «end» включительно.
Если пользователь задаст первое число большее чем второе, просто поменяйте их местами.
Решение:

Ответ:
1.2.2 Пример
Задача:
Напишите рекурсивную функцию вычисления факториала на языке
Python.
Решение:
Ответ:
1.1. Теоретический материал – Расстояние между объектами
класса
Определение расстояния между объектами класса
Сходство или различие между объектами классификации устанавливается в зависимости от выбранного метрического расстояния между ними. Если каждый объект описывается n свойствами (признаками), то он может быть представлен как точка в n-мерном пространстве, и сходство с другими объектами будет определяться как соответствующее расстояние. При классификации используются различные меры расстояния между объектами.
1. Евклидово расстояние

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

𝑃𝑃 – расстояние между объектами A и B;

𝐴𝐴
𝑖𝑖
– значение i-свойства объекта A;

𝐵𝐵
𝑖𝑖
– значение i-свойства объекта B.
2. Квадрат евклидова расстояния
Данная мера расстояния используется в тех случаях, когда требуется придать больше значение более отдаленным друг от друга объектам. Это расстояние вычисляется следующим образом:
3. Взвешенное евклидово расстояние
Применяется в тех случаях, когда каждому i-свойству удается приписать некоторый «вес» wi, пропорционально степени важности признака в задаче классификации:
4. Хеммингово расстояние
Также называется манхэттенским, сити-блок расстоянием или расстоянием городских кварталов. Это расстояние является разностью по координатам.
Хеммингово расстояние вычисляется по формуле:
5. Расстояние Чебышева
Принимает значение наибольшего модуля разности между значениями соответствующих свойств (признаков) объектов:

Выбор меры расстояния и весов для классифицирующих свойств – очень важный этап, так как от этих процедур зависят состав и количество формируемых классов, а также степень сходства объектов внутри классов.
1.2.3 Пример
Задача:
Напишите функции в Python, которая вычисляет Евклидово расстояние между двумя массивами NumPy.
Решение:
Ответ:
1.2.4 Пример
Задача:
Напишите 4 функции в Python, которые рассчитывают квадрат Евклидова расстояния, взвешенное евклидово расстояние, Хеммингово расстояние и расстояние Чебышева между двумя массивами NumPy.
Решение:

Ответ:
1.2.5 Пример
Задача:
В Python есть встроенные функции для вычисления расстояний между векторами. Мы будем использовать NumPy для расчета расстояния для двух точек, поскольку ранее рассмотренные структуры данных могут быть переведены в Numpy массив с помошью специальных функциий.
Например, для серий это будет выглядеть следующим образом: seriesName.to_numpy().
Для удобства визуализации и анализа результатов в дальнейших расчетах будм использовать 2 точки в 3-х мерном пространстве:
Решение:
Ответ:

1.2.6 Пример
Задача:
Рассчитать расстояния между двумя точками с использованием методов определения расстояний, представленных выше.
Решение:
Ответ:
1.3.1 Задание
Задача:
Задайте 4 точки в трехмерном пространстве, рассчитайте между ними расстояния по описанным в примере выше метрикам. Отобразите точки в трехмерном пространстве.
Решение:
Ответ:
1.3.2 Задание
Задача:

Создать 5x5 матрицу со значениями в строках от 0 до 4. Для создания необходимо использовать функцию arange.
Решение:
Ответ:
2.1. Теоретический материал – Задачи классификации
Решение задачи классификации методом k ближайших соседей
Метод k-ближайших соседей используется для решения задачи классификации. Он относит объекты к классу, которому принадлежит большинство из k его ближайших соседей в многомерном пространстве признаков. Это один из простейших алгоритмов обучения классификационных моделей. Число k – это количество соседних объектов в пространстве признаков, которые сравниваются с классифицируемым объектом. Иными словами, если k=10, то каждый объект сравнивается с 10- ю соседями. В процессе обучения алгоритм просто запоминает все векторы признаков и соответствующие им метки классов. При работе с реальными данными, т.е. наблюдениями, метки класса которых неизвестны, вычисляется расстояние между вектором нового наблюдения и ранее запомненными. Затем выбирается k ближайших к нему векторов, и новый объект относится к классу, которому принадлежит большинство из них.
Приведем алгоритм метода.
1. Выберите значение K соседей (скажем, k = 5)
2. Найдите ближайшую точку данных K (5) для нашей новой точки данных на основе евклидова расстояния (которое мы обсудим позже)
3. Среди этих K точек данных подсчитайте точки данных в каждой категории.
4. Назначьте новую точку данных категории, которая имеет наибольшее количество соседей с новой точкой данных

Модуль библиотеки sklearn - sklearn.neighbors предоставляет функциональные возможности для контролируемого обучения на основе соседей. Обучение на основе контролируемых соседей бывает двух видов: классификация данных с дискретными метками и регрессия для данных с непрерывными метками. В данном разделе рассмотрим несколько примеров с использованием названного метода.
2.2.1 Пример
Задача:
В примере показано создание 2d-массива со значениями x и y. Список target содержит возможные выходные классы (часто называемые метками). Далее происходит обучене классификатора k-ближайших соседей по исходным данным. Далее производится прогноз принадлежности к классам для двух точек данных.
Решение:

Ответ:
2.2.2 Пример
Задача:
Далее приведем более наглядный пример. Будет построена граница решения для каждого класса. В качестве данных будем использовать уже знакомый нам и встроенный в библиотеку sklearn набор данных ирисов
Фишера. Этот набор данных стал уже классическим, и часто используется в литературе для иллюстрации работы различных статистических алгоритмов. Датасет содержит наблюдения за 150 разными цветками ирисов, данные по каждому цветку расположены в строках. В стобцах записаны длина и ширина чашелистика, длина и ширина лепестка, вид ириса.
Решение:
Ответ:

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

2.2.4 Пример
Задача:
Из графиков видно, что в первом случае классы визуально хорошо отделимы друг от друга, хотя два классе имеют небольшое пересечение.
Во втором случае разделить два класса между собой уже намного труднее.
Далее разделим датасет на обучающую и тестовую выборки в соотношении 80:20. Обучающая выборка (training sample) — выборка, по которой производится настройка (оптимизация параметров) модели зависимости. Тестовая (или контрольная) выборка (test sample) — выборка, по которой оценивается качество построенной модели.
Решение:

Ответ:

2.3.1 Задание
Задача:
Для предыдущего примера поэкспериментируйте с параметрами классификатора:
1. Установите другое количество ближайших соседей (k = 1, 5, 10).
2. Установите размер тестовой выборки 15% от всего датасета.
3. Постройте графики и оцените качество моделей, проанализируйте результаты.
Решение:
Ответ:

3.1. Теоретический материал – Работа с категориальными
данными
Работа с категориальными данными
Часто бывает полезно разбивать объекты на категории не по количеству, а по качеству. Эта качественная информация нередко представляется как принадлежность наблюдения к отдельной категории, такой как пол, цвета или марка автомобиля. Однако не все категориальные данные одинаковые. Наборы категорий без внутреннего упорядочения называются номинальными. Примеры номинальных категорий включают:

синий, красный, зеленый;

мужчина, женщина;

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

низкий, средний, высокий;

молодые, старые;

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

Для решения задачи можно использовать метод replace фрейма данных pandas для преобразования строковых меток в числовые эквиваленты
Решение:
Ответ:
3.2.2. Пример
Задача:
Дан словарь, и требуется его конвертировать в матрицу признаков.
Для решения задачи можно задействовать класс-векторизатор словаря
Dictvectorizer:
Решение:
Ответ:

3.3.2 Задание
Задача:
Определите набор признаков человека, по аналогии из РТ 1, – например, цвет глаз и конвертируйте его в матрицу признаков.
Решение:
Ответ:


написать администратору сайта