Математические основы теории прогнозирования (курс лекций, Ю.И. Журавлев, Д.П. Ветров)/2011/Задание СФ

Материал из MachineLearning.

(Различия между версиями)
Перейти к: навигация, поиск
(описание логистической регрессии)
м (несколько запятых)
 
(24 промежуточные версии не показаны)
Строка 1: Строка 1:
-
{{stop|Текст задания находится в стадии формирования. Убедительная просьба не приступать к выполнению задания до тех пор, пока это сообщение не будет удалено.}}
+
{{TOCright|300px}}
-
__NOTOC__
+
<!-- [[Изображение:MOTP11_wine2.jpg|150px]] [[Изображение:MOTP11_logreg.jpg|200px]] -->
-
<!-- {{TOCright|300px}}-->
+
-
 
+
-
[[Изображение:MOTP11_Iris.jpg|150px]]
+
[[Математические основы теории прогнозирования (курс лекций, Ю.И. Журавлев, Д.П. Ветров)|Перейти к основной странице курса]]
[[Математические основы теории прогнозирования (курс лекций, Ю.И. Журавлев, Д.П. Ветров)|Перейти к основной странице курса]]
-
'''Начало выполнения задания''': 15 апреля 2011
+
'''Срок сдачи задания''': {{ins|1 сентября 2011, 23:59}}
-
'''Срок сдачи''': {{ins|1 мая 2011, 23:59}}
+
Данное практическое задание предназначено, в первую очередь, для студентов Севастопольского филиала, которые имеют задолженность по курсу [[МОТП]] и не имеют возможности присутствовать в Москве на пересдачах осенью — Талалуева Кирилла, Пантелеева Ивана, Щербаткина Егора, Клименко Александра и Сребняка Ивана. Тем не менее, это задание могут выполнять и московские студенты ВМиК, которые имеют задолженность по курсу МОТП. Оценка за это задание будет итоговой оценкой по курсу МОТП.
-
Данное практическое задание предназначено для студентов Севастопольского филиала, которые имеют задолженность по курсу [[МОТП]] — Талалуева Кирилла, Пантелеева Ивана, Щербаткина Егора, Клименко Александра и Сребняка Ивана. Цель данного задания состоит в том, чтобы студенты познакомились на практике с простейшими методами решения задач регрессии и классификации — линейной и логистической регрессией соответственно, а также с базовыми аспектами, с которыми приходится сталкиваться при решении задач машинного обучения — проблемой переобучения и проблемой подбора структурных параметров алгоритмов (в данном случае в качестве таковых выступают коэффициенты регуляризации и параметры базисных функций).
+
Цель данного задания состоит в том, чтобы студенты познакомились на практике с простейшими методами решения задач регрессии и классификации — линейной и логистической регрессией соответственно, а также с базовыми аспектами, с которыми приходится сталкиваться при решении задач машинного обучения — проблемой переобучения и проблемой подбора структурных параметров алгоритмов (в данном случае в качестве таковых выступают коэффициенты регуляризации и параметры базисных функций).
-
Среда реализации для всех вариантов — MATLAB. Неэффективная реализация кода может негативно отразиться на оценке.
+
== Необходимая теория ==
-
== Линейная регрессия ==
+
=== Линейная регрессия ===
 +
[[Изображение:MOTP11_linreg.jpg|200px|thumb|Иллюстрация линейной регрессии]]
Рассматривается задача регрессии. Имеется обучающая выборка <tex>\{\vec{x}_n,t_n\}_{n=1}^N</tex>, где <tex>\vec{x}_n\in\mathbb{R}^d</tex> — вектор признаков для объекта <tex>n</tex>, а <tex>t_n\in\mathbb{R}</tex> — значение его регрессионной переменной. Задача заключается в предсказании значения регрессионной переменной <tex>t_{new}</tex> для объекта, представленного своим вектором признаков <tex>\vec{x}_{new}</tex>.
Рассматривается задача регрессии. Имеется обучающая выборка <tex>\{\vec{x}_n,t_n\}_{n=1}^N</tex>, где <tex>\vec{x}_n\in\mathbb{R}^d</tex> — вектор признаков для объекта <tex>n</tex>, а <tex>t_n\in\mathbb{R}</tex> — значение его регрессионной переменной. Задача заключается в предсказании значения регрессионной переменной <tex>t_{new}</tex> для объекта, представленного своим вектором признаков <tex>\vec{x}_{new}</tex>.
Строка 25: Строка 23:
где <tex>w_j\in\mathbb{R}</tex> — веса линейного решающего правила, а <tex>\phi_j:\mathbb{R}^d\rightarrow\mathbb{R}</tex> — фиксированные базисные функции (новые признаки). Примеры базисных функций:
где <tex>w_j\in\mathbb{R}</tex> — веса линейного решающего правила, а <tex>\phi_j:\mathbb{R}^d\rightarrow\mathbb{R}</tex> — фиксированные базисные функции (новые признаки). Примеры базисных функций:
# ''Исходные признаки'': <tex>\phi_j(\vec{x})=x_j</tex>;
# ''Исходные признаки'': <tex>\phi_j(\vec{x})=x_j</tex>;
-
# ''Степени признаков'': <tex>\phi_j(\vec{x})=x^j</tex>;
+
# ''Полиномиальные базисные функции'': <tex>\phi_j(\vec{x})=x_{j_1}x_{j_2}\dots x_{j_k},\ j_1,\dots,j_k\in\{1,\dots,d\},\ 1\le k\le K,\ K</tex> — степень полинома;
# ''Радиальные базисные функции'': <tex>\phi_j(\vec{x})=\exp(-\gamma||\vec{x}-\vec{x}_j||^2)</tex>, где <tex>\gamma>0</tex>, а <tex>\vec{x}_j</tex> — некоторые заранее выбранные опорные объекты, например, объекты обучающей выборки.
# ''Радиальные базисные функции'': <tex>\phi_j(\vec{x})=\exp(-\gamma||\vec{x}-\vec{x}_j||^2)</tex>, где <tex>\gamma>0</tex>, а <tex>\vec{x}_j</tex> — некоторые заранее выбранные опорные объекты, например, объекты обучающей выборки.
Строка 36: Строка 34:
<tex>\vec{w}_{opt}=\Biggl(\frac{1}{N}\Phi^T\Phi + \lambda I\Biggr)^{-1}\frac{1}{N}\Phi^T\vec{t}</tex>.
<tex>\vec{w}_{opt}=\Biggl(\frac{1}{N}\Phi^T\Phi + \lambda I\Biggr)^{-1}\frac{1}{N}\Phi^T\vec{t}</tex>.
-
== Логистическая регрессия ==
+
=== Логистическая регрессия ===
 +
[[Изображение:MOTP11_logreg.jpg|200px|thumb|Иллюстрация логистической регрессии]]
Рассматривается задача классификации на два класса. Имеется обучающая выборка <tex>\{\vec{x}_n,t_n\}_{n=1}^N</tex>, где <tex>\vec{x}_n\in\mathbb{R}^d</tex> — вектор признаков для объекта <tex>n</tex>, а <tex>t_n\in\{-1,+1\}</tex> — его метка класса. Задача заключается в предсказании метки класса <tex>t_{new}</tex> для объекта, представленного своим вектором признаков <tex>\vec{x}_{new}</tex>.
Рассматривается задача классификации на два класса. Имеется обучающая выборка <tex>\{\vec{x}_n,t_n\}_{n=1}^N</tex>, где <tex>\vec{x}_n\in\mathbb{R}^d</tex> — вектор признаков для объекта <tex>n</tex>, а <tex>t_n\in\{-1,+1\}</tex> — его метка класса. Задача заключается в предсказании метки класса <tex>t_{new}</tex> для объекта, представленного своим вектором признаков <tex>\vec{x}_{new}</tex>.
Строка 49: Строка 48:
Здесь <tex>\lambda\ge 0</tex> — задаваемый пользователем параметр регуляризации. Функционал <tex>J</tex> является выпуклой функцией относительно своих параметров <tex>\vec{w}</tex> и поэтому может быть эффективно минимизирован с помощью любого итерационного метода безусловной оптимизации, учитывающего значения градиента и гессиана функции <tex>J</tex>, например, метода Ньютона.
Здесь <tex>\lambda\ge 0</tex> — задаваемый пользователем параметр регуляризации. Функционал <tex>J</tex> является выпуклой функцией относительно своих параметров <tex>\vec{w}</tex> и поэтому может быть эффективно минимизирован с помощью любого итерационного метода безусловной оптимизации, учитывающего значения градиента и гессиана функции <tex>J</tex>, например, метода Ньютона.
 +
=== Скользящий контроль ===
 +
В алгоритмах линейной/логистической регрессии параметр регуляризации <tex>\lambda</tex>, а также параметры базисных функций (например, степень полинома или параметр <tex>\gamma</tex> в радиальных базисных функциях) являются структурными параметрами, которые
 +
не могут быть настроены путем минимизации критерия <tex>J</tex> на обучающей выборке. Для их настройки используются ''критерии выбора модели'', например, скользящий контроль.
-
== Марковское случайное поле ==
+
Обозначим обучающую выборку через <tex>Y=(X,\vec{t})</tex>, а через <tex>a(\vec{x},Y)</tex> результат прогноза (значение регрессионной переменной или метки класса) для объекта <tex>\vec{x}</tex>, полученный с помощью алгоритма <tex>a</tex>, обученного по выборке <tex>Y</tex>.
 +
При <tex>K</tex>-кратном скользящем контроле обучающая выборка <tex>Y</tex> разбивается на <tex>K</tex> равных частей <tex>Y=Y_1\sqcup Y_2\sqcup\dots\sqcup Y_K</tex>. Общая величина ошибки на <tex>K</tex>-кратном скользящем контроле вычисляется как
-
[[Изображение:SMAIS11_grid.jpg‎|100px|thumb|Система соседства — прямоугольная решетка]]
+
<tex>Error_{cv} = \frac{1}{N}\sum_{k=1}^K\ \sum_{n:\vec{x}_n\in Y_k}error(t_n, a(\vec{x}_n, Y_{\backslash k}))</tex>.
-
Марковское случайное поле (MRF) — графическая модель, энергия (отрицательный логарифм правдоподобия) которой записывается в виде:<br>
+
-
<tex>
+
-
E(X) = \sum_{p \in P} D_p(x_p) + \sum_{(p, q) \in E} V_{pq}(x_p, x_q),
+
-
</tex><br>
+
-
где P — множество индексов переменных, E — система соседства, D — унарные потенциалы, V — бинарные потенциалы.
+
-
Рассмотрим модель со следующими ограничениями:
+
Здесь через <tex>Y_{\backslash k}</tex> обозначена обучающая выборка без части <tex>Y_k</tex>, а через <tex>error(t, y)</tex> величина ошибки между предсказанием <tex>y</tex> и истинным значением <tex>t</tex>. Эта ошибка вычисляется как
-
*переменные <tex> x_p </tex> дискретны и принимают значения из множества {1,,K}, K ≥ 2,
+
-
*система соседства E прямоугольная решетка,
+
-
*бинарные потенциалы V являются обобщенными потенциалами Поттса: <tex>V_{pq} = c_{pq} [x_p \neq x_q] </tex>.
+
-
В рамках этого задания требуется:
+
<tex>error(t,y)=(t-y)^2</tex> — для задачи регрессии и <tex>error(t,y)=\begin{cases}0,\ t=y,\\1,\ t\neq y,\end{cases}</tex> — для задачи классификации.
-
#реализовать алгоритм поиска конфигурации <tex>X</tex>, обладающей минимальной энергией (TRW или α-расширение),
+
-
#протестировать реализованный алгоритм на модельных задачах,
+
-
#применить реализованный алгоритм для задачи интерактивной сегментации изображений,
+
-
#сравнить алгоритмы TRW и α-расширение на задаче сегментации изображений.
+
-
=== MRF для интерактивной сегментации изображений ===
+
Наиболее популярная версия скользящего контроля — усреднение <tex>Error_{cv}</tex> по пяти независимым запускам 2-кратного скользящего контроля. При таком подходе необходимо обучать алгоритм только по половине обучающей выборки (что происходит быстрее, чем обучение, например, по 9/10 от объема обучающей выборки). Во-вторых, здесь требуется всего 10 различных обучений (что гораздо меньше, чем, например, объем обучающей выборки <tex>N</tex> при разбиении выборки на <tex>K=N</tex> частей).
-
[[Изображение:SMAIS11_task2_illustration.jpg‎|300px|thumb|Пример изображения с пользовательской маской семян]]
+
-
Задача сегментации изображения состоит в отнесении каждого пикселя изображения к одному из K классов. В интерактивном варианте пользователь отмечает часть пикселей, принадлежащих каждому классу. После этого требуется автоматически разметить оставшуюся часть изображения.
+
-
Для задачи сегментации марковское случайное поле строится следующим образом:
+
Настройка параметра регуляризации <tex>\lambda</tex> с помощью скользящего контроля производится следующим образом. Выбирается набор возможных значений <tex>\lambda</tex>, например, <tex>2^{-5},2^{-4.9},\dots,2^{4.9},2^{5}</tex>. Для каждого из этих значений вычисляется величина ошибки скользящего контроля (например, с помощью усреднения по пяти запускам 2-кратного скользящего контроля). В результате выбирается такое значение <tex>\lambda</tex>, для которого величина ошибки является наименьшей. В том случае, если требуется настроить два параметра, например <tex>\lambda</tex> и <tex>\gamma</tex> в радиальных базисных функциях, то выбирается двухмерная сетка значений параметров и находится та пара, для которой ошибка на скользящем контроле является наименьшей.
-
*Каждая переменная <tex>x_p</tex> соответствует пикселю изображения.
+
-
*Используется стандартная 4-х связная система соседства.
+
-
*Если пиксель p отнесен пользователем к классу k, то унарные потенциалы „разрешают“ переменной <tex>x_p</tex> принимать только значение k: <br><tex>D_p(k) = 0,\ D_p(l) = +\infty, l \neq k</tex>.
+
-
*Если пиксель p не отнесен пользователем ни к одному из классов, то унарные потенциалы принимают значения равные минус логарифму правдоподобия принадлежности пикселя цвета <tex> I_p </tex> соответствующему классу: <tex>D_p(k) = -\log P_k(I_p) </tex>.
+
-
*Цветовые модели объектов можно восстановить по пикселям, размеченным пользователем, при помощи EM-алгоритма восстановления смеси нормальных распределений в пространстве [http://en.wikipedia.org/wiki/YUV YUV].
+
-
*В качестве парных потенциалов выбираются обобщенные потенциалы Поттса, которые поощряют разрезы в тех местах, где цвет изображения сильно меняется: <tex> c_{pq} = A + B\:\exp\left(-\frac{|| I_p - I_q ||^2}{2\sigma^2}\right) </tex>, A ≥ 0, B ≥ 0, σ — параметры.
+
-
== Вариант 1 : TRW==
+
=== Схема решения задач классификации/регрессии ===
-
=== Задание ===
+
В простейшем случае для решения задачи классификации/регрессии имеющаяся в распоряжении выборка разбивается на три подвыборки: обучающую, валидационную и тестовую. Сначала выбирается некоторая модель алгоритмов, например, линейная регрессия с полиномиальными базисными функциями. По обучающей выборке в скользящем контроле настраиваются все структурные параметры выбранной модели (для линейной регрессии с полиномиальными базисными функциями в качестве таковых выступают коэффициент регуляризации и степень полинома). Затем с выбранными значениями структурных параметров производится обучение модели алгоритмов по обучающей выборке. Полученный алгоритм тестируется на обучающей и валидационной выборке. В том случае, если значения обеих ошибок значимо отличаются друг от друга (следовательно, есть переобучение) или их значения близки между собой и достаточно большие (значит, есть недообучение), то выбранная модель алгоритмов признается неудачной и выбирается другая модель алгоритмов (более простая, если ранее было обнаружено переобучение, или более сложная, если ранее было обнаружено недообучение). После того, как удается найти хорошую модель алгоритмов (у которой нет переобучения и недообучения), обучающая и валидационная выборка объединяются между собой и используются в качестве обучающей для настройки структурных параметров по скользящему контролю и последующего обучения в найденной хорошей модели алгоритмов. Затем полученный алгоритм тестируется на объединенной обучающей и тестовой выборке. Если обе ошибки близки между собой и достаточно маленькие по значению, то такой алгоритм признается оптимальным для решения задачи классификации/регрессии.
-
* Вывести все формулы, использующиеся в вашей реализации TRW (формулировки прямой и двойственной задач, формула подсчета субградиента, конкретная схема субградиентного подъема, и т.д.).
+
 
-
* Реализовать алгоритм TRW.
+
Зачастую имеющаяся в распоряжении выборка прецедентов является небольшой по объему и поэтому не может быть разбита на три достаточно репрезентативные подвыборки. В этом случае выборка разбивается только на обучающую и валидационную, и найденная по описанной выше схеме наилучшая модель алгоритмов не тестируется на отдельной тестовой выборке. Такой подход является менее корректным по сравнению с предыдущим, т.к. мерой качества алгоритма здесь выступает величина, которая подвергалась оптимизации на имеющихся данных. Поэтому здесь возможен эффект переобучения на уровне моделей алгоритмов. Тем не менее, во многих практических ситуациях данная схема дает вполне приемлемый результат.
-
* Протестировать алгоритм TRW на модельных данных (например, решетка 100 x 100, 10 классов, случайные потенциалы).
+
 
-
* Привести примеры наличия и отсутствия зазора между решениями прямой и двойственной задач (например, зазор должен отсутствовать в случае субмодулярной энергии).
+
== Формулировка задания ==
-
* Реализовать процедуру сегментации изображений с заданными пользователем семенами.
+
 
-
* Привести примеры удачных сегментаций (не менее 5). Требуется самостоятельно выбрать изображения (реалистичные), указать семена и отсегментировать при помощи реализованного метода. В отчет нужно вставлять и исходные изображения, и маски семян.
+
Для выполнения задания необходимо выполнить следующие пункты:
-
* На нескольких (не менее 3) задачах сегментации из предыдущего пункта сравнить работу алгоритмов TRW и α-расширение. Реализацию недостающего алгоритма можно взять у товарища, выполняющего другой вариант (в отчете обязательно указывать, чей код вы используете). Требуется провести сравнение по энергии получаемого решения, по времени работы, по визуальному качеству сегментации. Все выводы должны быть подтверждены числами, графиками, картинками.
+
{|style="background:#E0FFE0"
-
* Написать отчет в формате PDF с описанием всех проведенных исследований.
+
|1. Реализовать процедуру обучения/тестирования/подбора структурных параметров линейной регрессии по описанному ниже прототипу;
 +
|-
 +
|2. Продемонстрировать на модельных данных для линейной регрессии эффект переобучения (маленькая ошибка на обучении, большая ошибка на тесте), эффект недообучения (ошибки на обучении и тесте близки между собой и большие по величине) и ситуацию нормальной работы (ошибки на обучении и тесте близки между собой и маленькие по величине);
 +
|-
 +
|3. Решить с помощью линейной регрессии практическую задачу прогноза предела прочности бетона (описание задачи см. ниже);
 +
|-
 +
|4. Вывести и вставить в отчет формулы для градиента и гессиана функционала <tex>J</tex> в логистической регрессии по параметрам <tex>\vec{w}</tex>;
 +
|-
 +
|5. Реализовать процедуру обучения/тестирования/подбора структурных параметров логистической регрессии по описанному ниже прототипу;
 +
|-
 +
|6. Продемонстрировать на модельных данных для логистической регрессии эффект переобучения (маленькая ошибка на обучении, большая ошибка на тесте), эффект недообучения (ошибки на обучении и тесте близки между собой и большие по величине) и ситуацию нормальной работы (ошибки на обучении и тесте близки между собой и маленькие по величине);
 +
|-
 +
|7. Решить с помощью логистической регрессии практическую задачу определения района происхождения вина по данным его химического анализа (описание задачи см. ниже);
 +
|-
 +
|8. Составить отчет в формате PDF обо всех проведенных исследованиях; данный отчет должен содержать необходимые графики и описание экспериментов, выводы необходимых формул, описание полученных результатов решения практических задач, общие выводы по исследованию.
 +
|}
 +
 
 +
Для выполнения задания на оценку «удовлетворительно» достаточно реализовать только пункты 4–8 без семейства полиномиальных базисных функций. Для выполнения задания на оценку «хорошо» и «отлично» необходимо выполнить все пункты задания.
=== Спецификация реализуемых функций ===
=== Спецификация реализуемых функций ===
 +
 +
Рекомендуемая среда для выполнения задания — MATLAB. При выполнении задания в среде MATLAB необходимые алгоритмы должны быть реализованы по прототипам, указанным ниже. В случае использования других сред для выполнения задания, реализуемые функции должны соответствовать прототипам, описанным ниже. Например, при программировании на языке C набор параметров для обучения должен задаваться в текстовом файле, при этом список параметров и их возможные значения следует брать из прототипов ниже.
 +
{|class="standard"
{|class="standard"
-
!''Алгоритм TRW''
+
!''Обучение линейной регрессии''
-
|-
+
-
|[labels, energy, lowerBound, time] = trwGridPotts(unary, vertC, horC)
+
|-
|-
-
|[labels, energy, lowerBound, time] = trwGridPotts(unary, vertC, horC, options)
+
|a = linreg_train(X, t, options)
|-
|-
|ВХОД
|ВХОД
Строка 107: Строка 108:
|
|
{|border="0"
{|border="0"
-
|unary унарные потенциалы, массив типа double размера N x M x K, где N — высота решетки, M — ширина решетки, K — количество меток.
+
|X обучающая выборка, матрица типа double размера N x M, где N — число объектов, M — число признаков.
|-
|-
-
|vertC коэффициенты <tex> c_{pq}</tex>, соответствующие вертикальным ребрам, массив типа double размера (N — 1) x M;
+
|t значение регрессионной переменной, вектор типа double размера 1 x N;
|-
|-
-
|horC коэффициенты <tex> c_{pq}</tex>, соответствующие горизонтальным ребрам, массив типа double размера N x (M — 1);
+
|options (необязательный аргумент) набор дополнительных параметров, структура размера 1 x 1, названия полей структуры совпадают с названиями параметров. Возможны следующие имена параметров и их значения:
|-
|-
-
|options — (необязательный аргумент) набор дополнительных параметров, массив типа '''cell''' вида ParameterName1, ParameterValue1, ParameterName2, ParameterValue2 и т.д. Возможны следующие параметры:
+
|&nbsp;&nbsp;'reg_coef' значение коэффициента регуляризации (по умолчанию = 1e-6);
|-
|-
-
|&nbsp;&nbsp;'maxIter' — максимально допустимое число итераций алгоритма (по умолчанию = 500);
+
|&nbsp;&nbsp;'reg_coef_tuning' — флаг использования скользящего контроля для настройки коэффициента регуляризации, тип logical, если false, то используется значение из reg_coef (по умолчанию = false);
|-
|-
-
|&nbsp;&nbsp;'argEps' — порог сходимости по аргументу;
+
|&nbsp;&nbsp;'basis_functions' — семейство используемых базисных функций, тип char размера 1 x S, возможные значения 'initial', 'polynomial', 'rbf' (по умолчанию = 'initial');
|-
|-
-
|&nbsp;&nbsp;'display' — параметр типа logical: если true, то на каждой итерации нужно выводить на экран номер итерации, текущее значение энергии и нижней границы;
+
|&nbsp;&nbsp;'basis_functions_param' — значение параметра для базисных функций, тип double размера 1 x 1, для семейства 'rbf' здесь задается значение параметра gamma, для семейства 'polynomial' — степень полинома (по умолчанию = 1);
 +
|-
 +
|&nbsp;&nbsp;'basis_functions_tuning' — флаг использования скользящего контроля для подбора параметров базисных функций, тип logical, если false, то используется значение из basis_functions_param (по умолчанию = false);
 +
|-
 +
|&nbsp;&nbsp;'display' — параметр отображения, тип logical, если false, то на экране ничего не отображается, если true, то отображается текущий статус вычислений в произвольной форме (какие значения параметров пробуются, какие ошибки на скользящем контроле получаются, какие итоговые значения параметров оказались наилучшими и т.д.);
|}
|}
|-
|-
Строка 126: Строка 131:
|
|
{|
{|
-
|labels разметка, обладающая наименьшей энергией, массив типа double размера N x M;
+
|a обученная модель линейной регрессии, структура размера 1 x 1, поля структуры имеют следующие имена и значения:
 +
{|border="0"
 +
|'w' — веса линейного решающего правила, вектор типа double размера 1 x M1, где M1 — число базисных функций (для базисных функций initial M1=M+1, для базисных функций polynomial <tex>M1 = \sum_{k=1}^KC_M^k+1</tex>, K=basis_functions_param, для базисных функций rbf M1=N+1, единица добавляется в M1 за счет свободного члена, т.е. базисной функции <tex>\phi(\vec{x})\equiv 1</tex>);
 +
|-
 +
|'basis_functions' — семейство используемых базисных функций, совпадает с входным значением 'basis_functions';
 +
|-
 +
|'basis_functions_param' — параметр базисных функций, совпадает с входным значением 'basis_functions_param';
 +
|-
 +
|'support_objects' — набор опорных объектов для базисных функций rbf, совпадает с обучающей выборкой, если 'basis_functions' == 'rbf', иначе пусто;
 +
|-
 +
|'m' — нормировочные средние значения для каждого признака, вектор типа double размера 1 x M1;
 +
|-
 +
|'s' — нормировочные дисперсии для каждого признака, вектор типа double размера 1 x M1.
 +
|}
 +
|}
 +
|}
 +
Обратите внимание: параметры N и M определяются неявно по размеру соответствующих элементов.
 +
 
 +
{|class="standard"
 +
!''Тестирование линейной регрессии''
 +
|-
 +
|[Outputs, ErrorRate] = linreg_test(a, X, t)
 +
|-
 +
|ВХОД
 +
|-
 +
|
 +
{|border="0"
 +
|a — обученная модель линейной регрессии, структура, которую возвращает функция linreg_train;
|-
|-
-
|energy значения энергии на каждой итерации, вектор типа double длины, равной количеству итераций алгоритма;
+
|X тестовая выборка, матрица типа double размера N_test x M;
|-
|-
-
|lowerBound — значения нижней границы на каждой итерации, вектор типа double длины, равной количеству итераций алгоритма;
+
|t (необязательный аргумент), истинные значения целевой переменной для тестовой выборки, вектор типа double размера 1 x N_test.
 +
|}
 +
|-
 +
|ВЫХОД
 +
|-
 +
|
 +
{|border="0"
 +
|Outputs — прогноз значений регрессионной переменной, вектор типа double размера 1 x N_test;
|-
|-
-
|time время, пройденное с начала работы алгоритма до каждой итерации, вектор типа double длины, равной количеству итераций алгоритма.
+
|ErrorRate (если вектор t задан) <tex>\sqrt{\frac{1}{N_{test}}\sum_{n=1}^{N_{test}}(t_n-Outputs_n)^2}</tex>;
|}
|}
-
|}
+
|}
-
Обратите внимание: в процедуре trwGridPotts параметры N, M, и K определяются неявно по размеру соответствующих элементов.
+
 
 +
Прототип функции обучения логистической регрессии logreg_train целиком повторяет прототип linreg_train. При этом вектор меток класса <tex>\vec{t}</tex> должен содержать значения только 1 и 2.
{|class="standard"
{|class="standard"
-
!''Сегментация изображений''
+
!''Тестирование логистической регрессии''
|-
|-
-
|[segmentation] = segmentImage(image, seeds)
+
|[Outputs, Answers, ErrorRate] = logreg_test(a, X, t)
|-
|-
|ВХОД
|ВХОД
Строка 146: Строка 186:
|
|
{|border="0"
{|border="0"
-
|image изображение, массив типа double размера N x M x 3 (все значения в этом массиве в интервале от 0 до 1).
+
|a обученная модель логистической регрессии, структура, которую возвращает функция logreg_train;
|-
|-
-
|seeds семена, заданные пользователем, массив типа logical размера N x M x K, элементы массива принимают значения true или false;
+
|X тестовая выборка, матрица типа double размера N_test x M;
 +
|-
 +
|t — (необязательный аргумент), истинные значения меток класса для тестовой выборки, вектор типа double размера 1 x N_test.
|}
|}
|-
|-
Строка 154: Строка 196:
|-
|-
|
|
-
{|
+
{|border="0"
-
|segmentation сегментация изображения, массив типа double размера N x M со значениями 1,...,K;
+
|Outputs значения линейной функции <tex>f(\vec{x})</tex> для объектов тестовой выборки, вектор типа double размера 1 x N_test;
 +
|-
 +
|Answers — спрогнозированные метки класса для объектов тестовой выборки, вектор типа double размера 1 x N_test;
 +
|-
 +
|ErrorRate — (если вектор t задан) процент допущенных ошибок классификации.
|}
|}
|}
|}
-
 
-
Обратите внимание: в процедуре segmentImage параметры N, M, и K определяются неявно по размеру соответствующих элементов.
 
=== Рекомендации по выполнению задания ===
=== Рекомендации по выполнению задания ===
-
1. При разбиении MRF-решетки только на вертикальные и горизонтальные цепочки формулировка несколько упрощается:
 
-
*Каждое ребро графа принадлежит только одному подграфу, а, значит, не нужно вводить двойственные переменные, соответствующие ребрам.
 
-
*Каждая вершина принадлежит только двум деревьям, а, значит, можно ввести |P|K двойственных переменных, соответствующих условиям <tex> y_{pk}^{hor} = y_{pk}^{vert}, \;\; p \in P, \;\; k = 1,\dots,K</tex>, где hor и vert обозначают горизонтальную и вертикальную цепочку, проходящую через p-ю вершину.
 
-
2. Поскольку двойственная функция вогнута и кусочно-линейна, оптимизировать ее можно при помощи алгоритма субградиентного подъема.
+
1. Эффективное программирование под MATLAB предполагает активнейшее использование векторных и матричных операций. В частности, по возможности следует избегать любых циклов. Например, для вычисления матрицы попарных расстояний между набором объектов, задаваемых матрицами <tex>X</tex> и <tex>Y</tex>, можно воспользоваться свойством <tex>||\vec{x}-\vec{y}||^2=||\vec{x}||^2 - 2\vec{x}^T\vec{y} + ||\vec{y}||^2</tex>, что в MATLAB может быть реализовано как
-
Каждый шаг метода субградиентного подъема состоит в пересчете значений двойственных переменных λ по следующему правилу:<br>
+
<pre>
-
<tex>\vec{\lambda}_{new} = \vec{\lambda}_{old} + \alpha_t \vec{g}_t, </tex>
+
normX = sum(X.^2,2);
-
где <tex>\vec{g}_t</tex> — субградиент в текущей точке, <tex>\alpha_t</tex> — параметр, отвечающий за длину сдвига.
+
normY = sum(Y.^2,2);
-
В рамках данного практического задания можно использовать любой способ субградиентного подъема. Например, можно использовать следующий адаптивный метод выбора длины шага:<br>
+
diffXY = bsxfun(@plus, bsxfun(@plus, -2*X*Y', normX), normY');
-
<tex>\alpha_t = \frac{\text{Approx}_t - \text{Dual}_t}{|| \nabla \vec{g}_t|| ^ 2},</tex><br>
+
</pre>
-
где <tex>\text{Dual}_t</tex> — текущее значение двойственной функции, <tex>\text{Approx}_t</tex> — оценка оптимума двойственной функции, которую можно определять следующим способом:<br>
+
-
<tex>\text{Approx}_t = \text{BestDual}_t + \delta_t,</tex> где <tex>\text{BestDual}_t </tex> — лучшее на данный момент значение двойственной функции, <br>
+
-
<tex>\delta_{t+1} = \begin{cases}
+
-
\gamma_0 \delta_t, \;\; \text{Dual}_t > \text{Dual}_{t-1}, \\
+
-
\max(\gamma_1 \delta_t, \; \varepsilon ), \;\; \text{Dual}_t \leq \text{Dual}_{t-1}. \end{cases}</tex><br>
+
-
<tex>\gamma_0, \; \gamma_1, \; \varepsilon</tex> — параметры метода. Обычно <tex>\gamma_0 > 1, \; 1 > \gamma_1 > 0, \; \varepsilon \to 0+ </tex>. Конкретные значения этих параметров нужно подобрать.
+
-
3. В качестве текущего значения энергии в рамках алгоритма TRW можно выбрать минимум энергий разметок, полученных по только вертикальным и только горизонтальным цепочкам.
+
2. При работе с выборками для устойчивости всех производимых вычислений рекомендуется осуществлять нормировку выборки независимо для каждого признака таким образом, чтобы среднее значение по выборке равнялось нулю, а выборочная дисперсия — единице. При этом следует иметь в виду, что для тестовых выборок нужно использовать нормировочные коэффициенты, полученные для обучающих выборок.
-
4. При тестировании алгоритма TRW необходимо следить, чтобы наибольшее значение нижней границы было не больше, чем наименьшее значение энергии.
+
3. Проверять корректность реализации обучения и тестирования линейной/логистической регрессии следует, в первую очередь, на модельных данных. Например, для проверки линейной регрессии можно сгенерировать данные с одним признаком, в которых регрессионная переменная вычисляется как значение полинома некоторой степени от значения признака со сгенерированными коэффициентами плюс небольшой нормальный шум. Тогда при обучении линейной регрессии с полиномиальными базисными функциями и правильной степенью полинома результат предсказания должен быть очень хорошим. Эту ситуацию можно отобразить и визуально. Например, для случая полинома первой степени картинка может выглядеть так:
-
5. Для генерации масок семян для сегментации изображений можно использовать любой редактор растровой графики (например, Paint). На изображении нужно определенным цветом закрасить пиксели, относящиеся к маске, и, впоследствии, выделить их в MATLAB.
+
[[Изображение:MOTP11_linreg.jpg|200px]]
-
=== Данные для выполнения задания ===
+
Кроме того, при автоматическом определении степени полинома по скользящему контролю выбираемое значение степени должно совпадать или быть близким к истинному.
-
[[Media:SMAIS11_task2_Converter.zip|ZIP архив]] с MATLAB реализацией конвертера изображений.
+
4. Эффекты переобучения/недообучения для линейной/логистической регрессии можно продемонстрировать следующим образом. Для линейной регрессии достаточно сгенерировать одномерные данные с полиномом 3-ей степени. Тогда обучение линейной регрессии с полиномиальными базисными функциями первой степени должно приводить к недообучению, >6-ой степени — к переобучению, а 3-ей степени — к адекватному восстановлению зависимости. Для логистической регрессии можно сгенерировать двухмерные данные с существенно нелинейной разделяющей поверхностью. Тогда обучение логистической регрессии с радиальными базисными функциями и маленьким значением <tex>\gamma</tex> должно приводить к недообучению, с большим значением <tex>\gamma</tex> — к переобучению, а некоторое среднее значение <tex>\gamma</tex> будет соответствовать адекватной разделяющей поверхности.
 +
 
 +
{|align="left"
 +
|-valign="top"
 +
|[[Изображение:MOTP11_linreg_underoverfitting.jpg|мини|300px|Различные модели линейной регрессии. Зеленая кривая — недообучение, черная кривая — переобучение, голубая кривая — адекватная зависимость]]
 +
|[[Изображение:MOTP11_logreg_underoverfitting.jpg|мини|300px|Различные модели логистической регрессии. Зеленое решающее правило — недообучение, черное решающее правило — переобучение, голубое решающее правило — адекватное разделение данных]]
 +
|}<br clear="all" />
 +
 
 +
=== Описание практических задач ===
 +
 
 +
{|class="standard"
 +
! colspan="2"|Определение предела прочности бетона || colspan="2"|Классификация вин по месту происхождения
 +
|-valign="top"
 +
|[[Изображение:MOTP11_concrete.jpg|thumb|100px]] || width="40%"|Задача состоит в том, чтобы спрогнозировать уровень давления, при котором конкретная бетонная смесь разрушается, в зависимости от процента содержания в ней цемента, воды, возраста смеси и др. показателей. Исходные данные и подробное описание задачи можно скачать [http://archive.ics.uci.edu/ml/datasets/Concrete+Compressive+Strength здесь]. || width="40%"|Имеется набор вин, произведенных в одном регионе Италии, но в трех разных винодельнях. Задача состоит в том, чтобы определить конкретную винодельню (конкретное место происхождения вина) по данным химического анализа вина. Эти данные включают в себя такие параметры как крепость, содержание яблочной кислоты, содержание различных видов флавоноидов и др. Исходные данные и подробное описание задачи можно скачать [http://archive.ics.uci.edu/ml/datasets/Wine здесь]. || [[Изображение:MOTP11_wine.jpg|thumb|200px]]
 +
|}
 +
 
 +
== Процедура сдачи задания ==
=== Оформление задания ===
=== Оформление задания ===
-
Выполненный вариант задания необходимо прислать письмом по адресу ''bayesml@gmail.com'' с темой «Задание 2. ФИО, номер группы, вариант 1». Убедительная просьба присылать выполненное задание '''только один раз''' с окончательным вариантом. Новые версии будут рассматриваться только в самом крайнем случае. Также убедительная просьба строго придерживаться заданной выше спецификации реализуемых функций. Очень трудно проверять большое количество заданий, если у каждого будет свой формат реализации.
+
Необходимо {{важно|в срок до 1 сентября 2011}} прислать выполненный вариант задания письмом по адресу ''bayesml@gmail.com'' с темой «Задание СФ, ФИО, номер группы». Убедительная просьба присылать выполненное задание '''только один раз''' с окончательным вариантом. Новые версии будут рассматриваться только в самом крайнем случае. Также убедительная просьба строго придерживаться заданной выше спецификации реализуемых функций. Очень трудно проверять большое количество заданий, если у каждого будет свой формат реализации.
Письмо должно содержать:
Письмо должно содержать:
*PDF-файл с описанием проведенных исследований (отчет должен включать в себя описание выполнения каждого пункта задания с приведением соответствующих графиков, изображений, чисел)
*PDF-файл с описанием проведенных исследований (отчет должен включать в себя описание выполнения каждого пункта задания с приведением соответствующих графиков, изображений, чисел)
-
*trwGridPotts.m
+
*Файлы linreg_train.m, linreg_test.m, logreg_train.m, logreg_test.m или аналогичные им исполняемые файлы
-
*segmentImage.m
+
*Набор вспомогательных файлов при необходимости
*Набор вспомогательных файлов при необходимости
 +
 +
=== Защита задания ===
 +
 +
После сдачи выполненного задания и его проверки необходимо будет защитить свое задание. В том случае, если в какой-то части выполненного задания будет обнаружен плагиат с заданием другого студента, то '''задание не будет засчитано для обоих студентов'''! Защита задания будет осуществляться с помощью видео-чата для студентов СФ и во время осенних пересдач для московских студентов. Студенту будет предложен ряд вопросов по присланному коду и проведенным исследованиям. Кроме того, возможны задания по небольшой модификации кода в режиме онлайн.
[[Категория:Учебные курсы]]
[[Категория:Учебные курсы]]

Текущая версия

Содержание


Перейти к основной странице курса

Срок сдачи задания: 1 сентября 2011, 23:59

Данное практическое задание предназначено, в первую очередь, для студентов Севастопольского филиала, которые имеют задолженность по курсу МОТП и не имеют возможности присутствовать в Москве на пересдачах осенью — Талалуева Кирилла, Пантелеева Ивана, Щербаткина Егора, Клименко Александра и Сребняка Ивана. Тем не менее, это задание могут выполнять и московские студенты ВМиК, которые имеют задолженность по курсу МОТП. Оценка за это задание будет итоговой оценкой по курсу МОТП.

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

Необходимая теория

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

Иллюстрация линейной регрессии
Иллюстрация линейной регрессии

Рассматривается задача регрессии. Имеется обучающая выборка \{\vec{x}_n,t_n\}_{n=1}^N, где \vec{x}_n\in\mathbb{R}^d — вектор признаков для объекта n, а t_n\in\mathbb{R} — значение его регрессионной переменной. Задача заключается в предсказании значения регрессионной переменной t_{new} для объекта, представленного своим вектором признаков \vec{x}_{new}.

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

t(\vec{x}_{new}) = \sum_{j=1}^Mw_j\phi_j(\vec{x}_{new}),

где w_j\in\mathbb{R} — веса линейного решающего правила, а \phi_j:\mathbb{R}^d\rightarrow\mathbb{R} — фиксированные базисные функции (новые признаки). Примеры базисных функций:

  1. Исходные признаки: \phi_j(\vec{x})=x_j;
  2. Полиномиальные базисные функции: \phi_j(\vec{x})=x_{j_1}x_{j_2}\dots x_{j_k},\ j_1,\dots,j_k\in\{1,\dots,d\},\ 1\le k\le K,\ K — степень полинома;
  3. Радиальные базисные функции: \phi_j(\vec{x})=\exp(-\gamma||\vec{x}-\vec{x}_j||^2), где \gamma>0, а \vec{x}_j — некоторые заранее выбранные опорные объекты, например, объекты обучающей выборки.

Веса \vec{w} линейного решающего правила настраиваются с помощью минимизации регуляризованного критерия наименьших квадратов:

J = \frac{1}{N}\sum_{n=1}^N\biggl[t_n-\sum_{j=1}^Mw_j\phi_j(\vec{x}_n)\biggr]^2 + \lambda||\vec{w}||^2 = \frac{1}{N}||\vec{t}-\Phi\vec{w}||^2 + \lambda||\vec{w}||^2\rightarrow\min_{\vec{w}}.

Здесь \lambda\ge 0 — задаваемый пользователем параметр регуляризации. Данный функционал может быть минимизирован аналитически:

\vec{w}_{opt}=\Biggl(\frac{1}{N}\Phi^T\Phi + \lambda I\Biggr)^{-1}\frac{1}{N}\Phi^T\vec{t}.

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

Иллюстрация логистической регрессии
Иллюстрация логистической регрессии

Рассматривается задача классификации на два класса. Имеется обучающая выборка \{\vec{x}_n,t_n\}_{n=1}^N, где \vec{x}_n\in\mathbb{R}^d — вектор признаков для объекта n, а t_n\in\{-1,+1\} — его метка класса. Задача заключается в предсказании метки класса t_{new} для объекта, представленного своим вектором признаков \vec{x}_{new}.

В логистической регрессии предсказание метки класса осуществляется по знаку линейной функции:

t(\vec{x}_{new}) = \begin{cases}+1,\ f(\vec{x}_{new})=\sum_{j=1}^Mw_j\phi_j(\vec{x}_{new})\ge 0,\\-1,\ f(\vec{x}_{new})<0.\end{cases}

Здесь веса \vec{w} и базисные функции \phi вводятся аналогично случаю линейной регрессии. Веса \vec{w} решающего правила настраиваются с помощью минимизации следующего регуляризованного критерия:

J = \frac{1}{N}\sum_{n=1}^N\log(1+\exp(-t_nf(\vec{x}_n))) + \lambda||\vec{w}||^2\rightarrow\min_{\vec{w}}.

Здесь \lambda\ge 0 — задаваемый пользователем параметр регуляризации. Функционал J является выпуклой функцией относительно своих параметров \vec{w} и поэтому может быть эффективно минимизирован с помощью любого итерационного метода безусловной оптимизации, учитывающего значения градиента и гессиана функции J, например, метода Ньютона.

Скользящий контроль

В алгоритмах линейной/логистической регрессии параметр регуляризации \lambda, а также параметры базисных функций (например, степень полинома или параметр \gamma в радиальных базисных функциях) являются структурными параметрами, которые не могут быть настроены путем минимизации критерия J на обучающей выборке. Для их настройки используются критерии выбора модели, например, скользящий контроль.

Обозначим обучающую выборку через Y=(X,\vec{t}), а через a(\vec{x},Y) результат прогноза (значение регрессионной переменной или метки класса) для объекта \vec{x}, полученный с помощью алгоритма a, обученного по выборке Y. При K-кратном скользящем контроле обучающая выборка Y разбивается на K равных частей Y=Y_1\sqcup Y_2\sqcup\dots\sqcup Y_K. Общая величина ошибки на K-кратном скользящем контроле вычисляется как

Error_{cv} = \frac{1}{N}\sum_{k=1}^K\ \sum_{n:\vec{x}_n\in Y_k}error(t_n, a(\vec{x}_n, Y_{\backslash k})).

Здесь через Y_{\backslash k} обозначена обучающая выборка без части Y_k, а через error(t, y) — величина ошибки между предсказанием y и истинным значением t. Эта ошибка вычисляется как

error(t,y)=(t-y)^2 — для задачи регрессии и error(t,y)=\begin{cases}0,\ t=y,\\1,\ t\neq y,\end{cases} — для задачи классификации.

Наиболее популярная версия скользящего контроля — усреднение Error_{cv} по пяти независимым запускам 2-кратного скользящего контроля. При таком подходе необходимо обучать алгоритм только по половине обучающей выборки (что происходит быстрее, чем обучение, например, по 9/10 от объема обучающей выборки). Во-вторых, здесь требуется всего 10 различных обучений (что гораздо меньше, чем, например, объем обучающей выборки N при разбиении выборки на K=N частей).

Настройка параметра регуляризации \lambda с помощью скользящего контроля производится следующим образом. Выбирается набор возможных значений \lambda, например, 2^{-5},2^{-4.9},\dots,2^{4.9},2^{5}. Для каждого из этих значений вычисляется величина ошибки скользящего контроля (например, с помощью усреднения по пяти запускам 2-кратного скользящего контроля). В результате выбирается такое значение \lambda, для которого величина ошибки является наименьшей. В том случае, если требуется настроить два параметра, например \lambda и \gamma в радиальных базисных функциях, то выбирается двухмерная сетка значений параметров и находится та пара, для которой ошибка на скользящем контроле является наименьшей.

Схема решения задач классификации/регрессии

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

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

Формулировка задания

Для выполнения задания необходимо выполнить следующие пункты:

1. Реализовать процедуру обучения/тестирования/подбора структурных параметров линейной регрессии по описанному ниже прототипу;
2. Продемонстрировать на модельных данных для линейной регрессии эффект переобучения (маленькая ошибка на обучении, большая ошибка на тесте), эффект недообучения (ошибки на обучении и тесте близки между собой и большие по величине) и ситуацию нормальной работы (ошибки на обучении и тесте близки между собой и маленькие по величине);
3. Решить с помощью линейной регрессии практическую задачу прогноза предела прочности бетона (описание задачи см. ниже);
4. Вывести и вставить в отчет формулы для градиента и гессиана функционала J в логистической регрессии по параметрам \vec{w};
5. Реализовать процедуру обучения/тестирования/подбора структурных параметров логистической регрессии по описанному ниже прототипу;
6. Продемонстрировать на модельных данных для логистической регрессии эффект переобучения (маленькая ошибка на обучении, большая ошибка на тесте), эффект недообучения (ошибки на обучении и тесте близки между собой и большие по величине) и ситуацию нормальной работы (ошибки на обучении и тесте близки между собой и маленькие по величине);
7. Решить с помощью логистической регрессии практическую задачу определения района происхождения вина по данным его химического анализа (описание задачи см. ниже);
8. Составить отчет в формате PDF обо всех проведенных исследованиях; данный отчет должен содержать необходимые графики и описание экспериментов, выводы необходимых формул, описание полученных результатов решения практических задач, общие выводы по исследованию.

Для выполнения задания на оценку «удовлетворительно» достаточно реализовать только пункты 4–8 без семейства полиномиальных базисных функций. Для выполнения задания на оценку «хорошо» и «отлично» необходимо выполнить все пункты задания.

Спецификация реализуемых функций

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

Обучение линейной регрессии
a = linreg_train(X, t, options)
ВХОД
X — обучающая выборка, матрица типа double размера N x M, где N — число объектов, M — число признаков.
t — значение регрессионной переменной, вектор типа double размера 1 x N;
options — (необязательный аргумент) набор дополнительных параметров, структура размера 1 x 1, названия полей структуры совпадают с названиями параметров. Возможны следующие имена параметров и их значения:
  'reg_coef' — значение коэффициента регуляризации (по умолчанию = 1e-6);
  'reg_coef_tuning' — флаг использования скользящего контроля для настройки коэффициента регуляризации, тип logical, если false, то используется значение из reg_coef (по умолчанию = false);
  'basis_functions' — семейство используемых базисных функций, тип char размера 1 x S, возможные значения 'initial', 'polynomial', 'rbf' (по умолчанию = 'initial');
  'basis_functions_param' — значение параметра для базисных функций, тип double размера 1 x 1, для семейства 'rbf' здесь задается значение параметра gamma, для семейства 'polynomial' — степень полинома (по умолчанию = 1);
  'basis_functions_tuning' — флаг использования скользящего контроля для подбора параметров базисных функций, тип logical, если false, то используется значение из basis_functions_param (по умолчанию = false);
  'display' — параметр отображения, тип logical, если false, то на экране ничего не отображается, если true, то отображается текущий статус вычислений в произвольной форме (какие значения параметров пробуются, какие ошибки на скользящем контроле получаются, какие итоговые значения параметров оказались наилучшими и т.д.);
ВЫХОД
a — обученная модель линейной регрессии, структура размера 1 x 1, поля структуры имеют следующие имена и значения:
'w' — веса линейного решающего правила, вектор типа double размера 1 x M1, где M1 — число базисных функций (для базисных функций initial M1=M+1, для базисных функций polynomial M1 = \sum_{k=1}^KC_M^k+1, K=basis_functions_param, для базисных функций rbf M1=N+1, единица добавляется в M1 за счет свободного члена, т.е. базисной функции \phi(\vec{x})\equiv 1);
'basis_functions' — семейство используемых базисных функций, совпадает с входным значением 'basis_functions';
'basis_functions_param' — параметр базисных функций, совпадает с входным значением 'basis_functions_param';
'support_objects' — набор опорных объектов для базисных функций rbf, совпадает с обучающей выборкой, если 'basis_functions' == 'rbf', иначе пусто;
'm' — нормировочные средние значения для каждого признака, вектор типа double размера 1 x M1;
's' — нормировочные дисперсии для каждого признака, вектор типа double размера 1 x M1.

Обратите внимание: параметры N и M определяются неявно по размеру соответствующих элементов.

Тестирование линейной регрессии
[Outputs, ErrorRate] = linreg_test(a, X, t)
ВХОД
a — обученная модель линейной регрессии, структура, которую возвращает функция linreg_train;
X — тестовая выборка, матрица типа double размера N_test x M;
t — (необязательный аргумент), истинные значения целевой переменной для тестовой выборки, вектор типа double размера 1 x N_test.
ВЫХОД
Outputs — прогноз значений регрессионной переменной, вектор типа double размера 1 x N_test;
ErrorRate — (если вектор t задан) \sqrt{\frac{1}{N_{test}}\sum_{n=1}^{N_{test}}(t_n-Outputs_n)^2};

Прототип функции обучения логистической регрессии logreg_train целиком повторяет прототип linreg_train. При этом вектор меток класса \vec{t} должен содержать значения только 1 и 2.

Тестирование логистической регрессии
[Outputs, Answers, ErrorRate] = logreg_test(a, X, t)
ВХОД
a — обученная модель логистической регрессии, структура, которую возвращает функция logreg_train;
X — тестовая выборка, матрица типа double размера N_test x M;
t — (необязательный аргумент), истинные значения меток класса для тестовой выборки, вектор типа double размера 1 x N_test.
ВЫХОД
Outputs — значения линейной функции f(\vec{x}) для объектов тестовой выборки, вектор типа double размера 1 x N_test;
Answers — спрогнозированные метки класса для объектов тестовой выборки, вектор типа double размера 1 x N_test;
ErrorRate — (если вектор t задан) процент допущенных ошибок классификации.

Рекомендации по выполнению задания

1. Эффективное программирование под MATLAB предполагает активнейшее использование векторных и матричных операций. В частности, по возможности следует избегать любых циклов. Например, для вычисления матрицы попарных расстояний между набором объектов, задаваемых матрицами X и Y, можно воспользоваться свойством ||\vec{x}-\vec{y}||^2=||\vec{x}||^2 - 2\vec{x}^T\vec{y} + ||\vec{y}||^2, что в MATLAB может быть реализовано как

    normX = sum(X.^2,2);
    normY = sum(Y.^2,2);
    diffXY = bsxfun(@plus, bsxfun(@plus, -2*X*Y', normX), normY');

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

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

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

4. Эффекты переобучения/недообучения для линейной/логистической регрессии можно продемонстрировать следующим образом. Для линейной регрессии достаточно сгенерировать одномерные данные с полиномом 3-ей степени. Тогда обучение линейной регрессии с полиномиальными базисными функциями первой степени должно приводить к недообучению, >6-ой степени — к переобучению, а 3-ей степени — к адекватному восстановлению зависимости. Для логистической регрессии можно сгенерировать двухмерные данные с существенно нелинейной разделяющей поверхностью. Тогда обучение логистической регрессии с радиальными базисными функциями и маленьким значением \gamma должно приводить к недообучению, с большим значением \gamma — к переобучению, а некоторое среднее значение \gamma будет соответствовать адекватной разделяющей поверхности.

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

Описание практических задач

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

Процедура сдачи задания

Оформление задания

Необходимо в срок до 1 сентября 2011 прислать выполненный вариант задания письмом по адресу bayesml@gmail.com с темой «Задание СФ, ФИО, номер группы». Убедительная просьба присылать выполненное задание только один раз с окончательным вариантом. Новые версии будут рассматриваться только в самом крайнем случае. Также убедительная просьба строго придерживаться заданной выше спецификации реализуемых функций. Очень трудно проверять большое количество заданий, если у каждого будет свой формат реализации.

Письмо должно содержать:

  • PDF-файл с описанием проведенных исследований (отчет должен включать в себя описание выполнения каждого пункта задания с приведением соответствующих графиков, изображений, чисел)
  • Файлы linreg_train.m, linreg_test.m, logreg_train.m, logreg_test.m или аналогичные им исполняемые файлы
  • Набор вспомогательных файлов при необходимости

Защита задания

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

Личные инструменты