From b8c88c37b1ea089733f1f16e0a718eeac8831d08 Mon Sep 17 00:00:00 2001 From: Vladimir Nikolaev Date: Sun, 17 Sep 2017 23:06:30 +0300 Subject: [PATCH] happy new year --- ML17-fall/.DS_Store | Bin 0 -> 8196 bytes ML17-fall/homeworks-practice/.DS_Store | Bin 0 -> 6148 bytes .../homework-practice-01-checkpoint.ipynb | 421 ++++++++++++++++++ .../homework-practice-01/functions.py | 83 ++++ .../functions_vectorized.py | 85 ++++ .../homework-practice-01.ipynb | 421 ++++++++++++++++++ ML17-fall/homeworks-theory/.DS_Store | Bin 0 -> 6148 bytes .../homework-theory-1-differentiation.pdf | Bin 0 -> 126440 bytes README-16-17.md | 169 +++++++ 9 files changed, 1179 insertions(+) create mode 100644 ML17-fall/.DS_Store create mode 100644 ML17-fall/homeworks-practice/.DS_Store create mode 100644 ML17-fall/homeworks-practice/homework-practice-01/.ipynb_checkpoints/homework-practice-01-checkpoint.ipynb create mode 100644 ML17-fall/homeworks-practice/homework-practice-01/functions.py create mode 100644 ML17-fall/homeworks-practice/homework-practice-01/functions_vectorized.py create mode 100644 ML17-fall/homeworks-practice/homework-practice-01/homework-practice-01.ipynb create mode 100644 ML17-fall/homeworks-theory/.DS_Store create mode 100644 ML17-fall/homeworks-theory/homework-theory-1-differentiation.pdf create mode 100644 README-16-17.md diff --git a/ML17-fall/.DS_Store b/ML17-fall/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..33c540df44956a0ea30f8a48a648b2e1f9076813 GIT binary patch literal 8196 zcmeHM(TdYR6uq-sHAU1Sf_==3Zxz~I*ZLxaS|9o#2oZfy*-e_T4W^mUq=vOtf`6gk z;ZOJh;t%*Adgsnq+HIv_VP(-fF!xMm?wLtWZYQ}Z0Epf+=m0bUz{0AqaTU#mqQ+HS zD?6s=I-)>6Kmiga@CGutyXMUutN<&(3a|pK04s126u@V;D%KyK`+AfuE5Hi;mkOx; z!N#i4F<5G(tpg3E0Ejj0rh;wE1BhcAbPSdniHdXT>_Hf+Fe!%6bR4&pJECK-)Trqo zG#!LlS(pq((CWyu$sL5Fku5903al%ja`&4s!n}P9;Y$9VVkYmw5ORpnhJ#oR{aE_w zuYO`*upa!Rf~|^k_(hhQIllU79A$aC{ax(r)-GMXV%6(b{hIaK9m&GYy?mPWyva*C zih|HL?PpTPi?-)KkHX@xaqE#xaxY54$&&l47f}+(q9>qqCjoTX&MgGC9UGR9ZDQ233x|A$=q| zITcVnn#8cbU+d_y2@<*WqJfP$z3XDNUxayA6d)^%0_hoAp+bJ(x~=dQr6 zUZJV-|Hrsv^LK!Amz)=11umQdqSkl&>iz5YJMQT-RJpc|^$4pf%CFQ&6g0|3^;0^I cxcI{m+qM~V43-*k1Pgx%AQ{-O0)JJ3U)NV9iU0rr literal 0 HcmV?d00001 diff --git a/ML17-fall/homeworks-practice/.DS_Store b/ML17-fall/homeworks-practice/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..03d34d50d8677ce7adea9228ac7dd1b3dddd5fe3 GIT binary patch literal 6148 zcmeHKUrQT75TA`{y&%#&2-DsE&6 zC`^rl6lL^$2-0ljx?G{C-HQbf1+FQb6YDW@1V!j876y`QM_Fi|0L^ary8 z-S}$+-UI4{#c1g2{0@gnJjz?GKccc!eerVHtJS>Ps&~>GsG^q#`FPX~vQOqI?nj~X z50y%8{2)AvqvEu__Cck25T{XgEBy0uoc2}GRpYcjGIb7ue1Kdt(P_OgnQXn?ZpwD& z{j@13oldJM-)z5|PCak^b$fUJ?DE^y=hK<12zlJ(T zI`kcu7V!omY%0*E3fE!?n~rhm;(UjtMVn5-H6OywEL?{o%%dLTjy4(?^+2xgKE)nrNx^RIOZxwtiFmH bP$L+Z+5!3wON$tR@Q;9@fekaTPzJ661TJf_ literal 0 HcmV?d00001 diff --git a/ML17-fall/homeworks-practice/homework-practice-01/.ipynb_checkpoints/homework-practice-01-checkpoint.ipynb b/ML17-fall/homeworks-practice/homework-practice-01/.ipynb_checkpoints/homework-practice-01-checkpoint.ipynb new file mode 100644 index 0000000..7983908 --- /dev/null +++ b/ML17-fall/homeworks-practice/homework-practice-01/.ipynb_checkpoints/homework-practice-01-checkpoint.ipynb @@ -0,0 +1,421 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Машинное обучение, ФКН ВШЭ\n", + "\n", + "## Практическое задание 1\n", + "\n", + "### Общая информация\n", + "Дата выдачи: .09.2017 \n", + "\n", + "Мягкий дедлайн: 23:59MSK .09.2017 \n", + "\n", + "Жесткий дедлайн: 23:59MSK .09.2017 " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### О задании\n", + "\n", + "__Первая часть__ задания посвящена получению студентами навыков работы с библиотекой векторного вычисления numpy и библиотеками для построения графиков matplotlib/plotly. Это задание сдается частично в Яндекс.Контест (см. информацию ниже).\n", + "\n", + "__Вторая часть__ задания посвящена работе с данными: их преобразованию в нужный формат и устранению проблем в них.\n", + "\n", + "\n", + "### Оценивание и штрафы\n", + "Каждая из задач имеет определенную «стоимость» (указана в скобках около задачи). Максимально допустимая оценка за работу — 10 баллов.\n", + "\n", + "Сдавать задание после указанного срока сдачи нельзя. При выставлении неполного балла за задание в связи с наличием ошибок на усмотрение проверяющего предусмотрена возможность исправить работу на указанных в ответном письме условиях.\n", + "\n", + "Задание выполняется самостоятельно. «Похожие» решения считаются плагиатом и все задействованные студенты (в том числе те, у кого списали) не могут получить за него больше 0 баллов (подробнее о плагиате см. на странице курса). Если вы нашли решение какого-то из заданий (или его часть) в открытом источнике, необходимо указать ссылку на этот источник в отдельном блоке в конце Вашей работы (скорее всего вы будете не единственным, кто это нашел, поэтому чтобы исключить подозрение в плагиате, необходима ссылка на источник).\n", + "\n", + "Неэффективная реализация кода может негативно отразиться на оценке.\n", + "\n", + "\n", + "### Формат сдачи\n", + "Для сдачи задания переименуйте получившийся файл *.ipynb в соответствии со следующим форматом: homework-practice-01-Username.ipynb, где Username — Ваша фамилия и имя на латинице именно в таком порядке (например, homework-practice-01-IvanovIvan.ipynb). Приложите модули с кодом functions.py и functions_vectorized.py и заархивируйте в zip формат. Имя архива должно быть homework-practice-01-Username.zip\n", + "\n", + "Далее отправьте этот файл на hse.cs.ml+<номер группы>@gmail.com (например, hse.cs.ml+141@gmail.com для студентов группы БПМИ-141).\n", + "\n", + "\n", + "Для удобства проверки самостоятельно посчитайте свою максимальную оценку (исходя из набора решенных задач) и укажите ниже." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Оценка:** ..." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Часть 1\n", + "\n", + "_Задачи позаимствованы из курса практикума кафедры ММП факультета ВМК МГУ_" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Задачи 1-6\n", + "__(4.5 балла)__\n", + "\n", + "Ниже приведены задачи на работу с numpy-массивами. Для каждой из задач нужно привести 2 реализации – одна без использования numpy (cчитайте, что там, где на входе или выходе должны быть numpy array, будут просто списки), а вторая полностью векторизованная (без использования питоновских циклов/map/list comprehension). Невекторизованная реализация каждой из задач оценивается в __0.25 балла__, векторизованная в __0.5 балла__.\n", + "\n", + "Реализации без использования векторизации нужно записать в файл functions.py, а векторизованные — в файл functions_vectorized.py (см. шаблоны). Далее эти файлы необходимо сдать в Яндекс.Контест: https://official.contest.yandex.ru/contest/5016/problems/ в соответствующие задачи. По техническим причинам тестирование проводится на этапе компиляции, поэтому в случае любой ошибки вы будете получать вердикт CE, и в логе компиляции можно будет посмотреть, в чем проблема. Частичное выполнение задания (не все задачи) будет оцениваться, хотя и будет получать вердикт CE. Для удобства проверки приложите в ячейке ниже ссылки на самые успешные посылки.\n", + "\n", + "\n", + "* __Задача 1__: Подсчитать произведение ненулевых элементов на диагонали прямоугольной матрицы. \n", + " Например, для X = np.array([[1, 0, 1], [2, 0, 2], [3, 0, 3], [4, 4, 4]]) ответ 3.\n", + " \n", + " \n", + "* __Задача 2__: Даны два вектора x и y. Проверить, задают ли они одно и то же мультимножество. \n", + " Например, для x = np.array([1, 2, 2, 4]), y = np.array([4, 2, 1, 2]) ответ True.\n", + " \n", + " \n", + "* __Задача 3__: Найти максимальный элемент в векторе x среди элементов, перед которыми стоит нулевой. \n", + " Например, для x = np.array([6, 2, 0, 3, 0, 0, 5, 7, 0]) ответ 5.\n", + " \n", + " \n", + "* __ Задача 4__: Дан трёхмерный массив, содержащий изображение, размера (height, width, numChannels), а также вектор длины numChannels. Сложить каналы изображения с указанными весами, и вернуть результат в виде матрицы размера (height, width). В ноутбуке приведите пример работы функции – преобразуйте цветное изображение в оттенки серого, использовав коэффициенты np.array([0.299, 0.587, 0.114]). Считать реальное изображение можно при помощи функции scipy.misc.imread (если изображение не в формате png, установите пакет pillow).\n", + "\n", + "\n", + "* __Задача 5__: Реализовать кодирование длин серий (Run-length encoding). Для некоторого вектора x необходимо вернуть кортеж из двух векторов одинаковой длины. Первый содержит числа, а второй - сколько раз их нужно повторить. \n", + " Например, для x = np.array([2, 2, 2, 3, 3, 3, 5]) ответ (np.array([2, 3, 5]), np.array([3, 3, 1])).\n", + " \n", + " \n", + "* __Задача 6__: Даны две выборки объектов - X и Y. Вычислить матрицу евклидовых расстояний между объектами. Сравните с функцией scipy.spatial.distance.cdist по скорости работы (сравнения приведите ниже в ноутбуке).\n", + "\n", + "__Замечание.__ Можно считать, что все указанные объекты непустые (к примеру, в __задаче 1__ на диагонали матрицы есть ненулевые элементы).\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Посылка по невекторизованным функциям: ...\n", + "\n", + "Посылка по векторизованным функциям: ..." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Задача 7\n", + "__(1.5 балла)__ \n", + "Для каждой задачи сравните скорость работы невекторизованной и векторизованной реализации. С помощью пакета matplotlib или plotly постройте графики времени работы в зависимости от размера данных. __Графики должны выглядеть опрятно!__ То есть должны быть подписаны оси, названия графиков, и т.д. Например, ниже представлены хороший и плохой графики:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "//anaconda/lib/python2.7/site-packages/matplotlib/figure.py:402: UserWarning: matplotlib is currently using a non-GUI backend, so cannot show the figure\n", + " \"matplotlib is currently using a non-GUI backend, \"\n" + ] + }, + { + "data": { + "image/png": "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\nrkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "%matplotlib inline\n", + "\n", + "data_size = np.array([10, 30, 70, 120])\n", + "time_non_vectorized = data_size ** 2 + 10\n", + "time_vectorized = data_size ** 1.5\n", + "\n", + "f, (ax1, ax2) = plt.subplots(1, 2, figsize=(13, 5))\n", + "\n", + "ax1.plot(data_size, time_non_vectorized)\n", + "ax1.plot(data_size, time_vectorized)\n", + "ax1.set_title(u\"Плохой график\")\n", + "ax1.set_xlabel(u\"Размер данных\")\n", + "ax1.set_ylabel(u\"Время\")\n", + "\n", + "ax2.plot(data_size, time_non_vectorized, label=u\"Невекторизованная\")\n", + "ax2.plot(data_size, time_vectorized, label=u\"Векторизованная\")\n", + "ax2.set_title(u\"Хороший график\")\n", + "ax2.set_xlabel(u\"Длина массива\")\n", + "ax2.set_ylabel(u\"Время (с)\")\n", + "ax2.grid()\n", + "ax2.legend()\n", + "\n", + "f.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Your code here\n", + "# ..." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Часть 2\n", + "\n", + "В данном задании мы рассмотрим набор данных об учащихся, собранный в 2006 году в одной из школ Португалии. Данные представлены в неудобном для машинного обучения виде, и содержат мусор. Ваша задача — привести их к надлежащему виду и обучить на них простую модель.\n", + "\n", + "**Внимание!** Хотя исходные данные для этого задания можно найти в интернете, делать это запрещается. Вся необходимая информация о данных содержится в задании. В случае затруднений обращайтесь к своему семинаристу(ке).\n", + "\n", + "Данные состоят из четырех файлов:\n", + "- data.csv — основная таблица с информацией о учащихся\n", + "- scores.csv — список финальных оценок по одному из предметов (20-балльная шкала переведенная в проценты)\n", + "- attendance.csv — таблица посещений занятий по этому предмету\n", + "- school_support.txt — список учащихся, которым оказывается финансовая поддержка\n", + "\n", + "Ваша задача — построить модель для предсказания финальных оценок исходя из всех остальных данных. Качество мы будем измерять по метрике RMSE.\n", + "\n", + "Расшифровка столбцов в data.csv для справки:\n", + "- age — возраст\n", + "- Medu — уровень образования матери (по некоторой условной шкале)\n", + "- Fedu — уровень образования отца (по некоторой условной шкале)\n", + "- traveltime — время в пути до школы (1 – < 15 мин., 2 – от 15 до 30 мин., 3 – от 30 мин. to 1 ч.\n", + "или 4 – > 1 ч.)\n", + "- studytime — время, затрачиваемое на занятия вне школы (1 – < 2 ч., 2 – от 2 до 5 ч., 3 – от 5 до 10 ч. или 4 – > 10 ч.)\n", + "- famrel — насколько хорошие отношения в семье у учащегося (по некоторой условной шкале)\n", + "- freetime — количество свободного времени вне школы (по некоторой условной шкале)\n", + "- goout — время, затрачиваемое на общение с друзьями (по некоторой условной шкале)\n", + "- Dalc — количество употребления алкоголя в учебные дни (по некоторой условной шкале)\n", + "- Walc — количество употребления алкоголя в неучебные дни (по некоторой условной шкале)\n", + "- health — уровень здоровья (по некоторой условной шкале)\n", + "- sex_M — пол: мужской (1) или женский (0)\n", + "- address_U — живет ли учащийся в городе (1) или в пригороде (0)\n", + "- famsize_LE3 — размер семьи: не больше 3 человек (1) или больше (0)\n", + "- Pstatus_T — живут ли родители вместе (1) или отдельно (0)\n", + "- nursery — посещал ли учащийся детский сад\n", + "- plans_university — планирует ли учащийся поступать в университет (-1 или 1)\n", + "- past_failures — количество неудовлетворительных оценок по другим предметам ранее (от 0 до 4)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Задача 1: пропуски в данных \n", + "__(0.5 балла)__\n", + "\n", + "Загрузите таблицу data.csv. Проверьте, есть ли в ней пропуски (значения NaN). Замените все пропущенные значения на среднее значение этого признака по столбцу.\n", + "\n", + "*Hint: изучите в pandas функции loc, isnull, а также передачу булевых массивов в качестве индексов.*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Your code here\n", + "# ..." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Задача 2: кросс-валидация для исходных данных\n", + "__(0.5 балла)__\n", + "\n", + "Загрузите файл scores.csv и протестируйте, как линейная регрессия предсказывает ответ сейчас (с помощью кросс-валидации).\n", + "\n", + "*Hint: воспользуйтесь sklearn.linear_model и sklearn.model_selection.*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Your code here\n", + "# ..." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Задача 3: полные данные\n", + "__(1 балл)__\n", + "\n", + "Воспользуйтесь файлами attendance.csv и school_support.txt для того, чтобы добавить новые признаки в данные. Желательно по максимуму использовать возможности pandas для упрощения преобразований." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Your code here\n", + "# ..." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Задача 4: сломанный признак\n", + "__(0.5 балла)__\n", + "\n", + "Найдите в данных сломанный признак (он не соответствует описанию) и исправьте его." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Your code here\n", + "# ..." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Задача 5: борьба с выбросами\n", + "__(1.5 балла)__\n", + "\n", + "Качество предсказания может ухудшаться, если в данных присутствуют корректные значения признаков (с точки зрения чтения данных и применения методов), но не соответствующие реальным объектам. Например, данные могли быть введены в неверном формате, а потом слишком грубо приведены к общему виду, из-за чего ошибка не была замечена.\n", + "Попробуем от такого избавиться — а для этого такие объекты нужно сначала найти. Конечно, нам еще недоступны многие продвинутые способы, но давайте попробуем обойтись простыми.\n", + "\n", + "Первый способ это сделать — посмотреть для каждого признака на распределение его значений и проверить крайние значения на правдоподобность.\n", + "\n", + "*Hint 1: используйте функцию DataFrame.hist*\n", + "\n", + "*Hint 2: в описании датасета выше есть информация, необходимая для восстановления правильных значений*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Your code here\n", + "# ..." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Другой простой способ найти выбросы — сделать предсказание на всех объектах и посмотреть на объекты с наибольшей ошибкой. Обратите внимание, что просто удалять все объекты с высокой ошибкой нельзя — это, конечно, хороший способ добиться меньшей ошибки (на данной выборке), но одновременно вы ухудшите обобщающую способность алгоритма. Вместо этого вам нужно найти однозначно ошибочные записи и их исправить.\n", + "\n", + "*Hint: возможно, все проблемы уже были найдены в прошлом пункте; для проверки — в обоих пунктах в сумме нужно исправить 3 проблемы.*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Your code here\n", + "# ..." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Финальное предсказание\n", + "\n", + "Проведите предсказание еще раз и сравните результат с исходным." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Your code here\n", + "# ..." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/ML17-fall/homeworks-practice/homework-practice-01/functions.py b/ML17-fall/homeworks-practice/homework-practice-01/functions.py new file mode 100644 index 0000000..d47308b --- /dev/null +++ b/ML17-fall/homeworks-practice/homework-practice-01/functions.py @@ -0,0 +1,83 @@ +def prod_non_zero_diag(x): + """Compute product of nonzero elements from matrix diagonal. + + input: + x -- 1-d numpy array + output: + product -- integer number + + + Not vectorized implementation. + """ + + pass + + +def are_multisets_equal(x, y): + """Return True if both vectors create equal multisets. + + input: + x, y -- 1-d numpy arrays + output: + True if multisets are equal, False otherwise -- boolean + + Not vectorized implementation. + """ + + pass + + +def max_after_zero(x): + """Find max element after zero in array. + + input: + x -- 1-d numpy array + output: + maximum element after zero -- integer number + + Not vectorized implementation. + """ + + pass + + +def run_length_encoding(x): + """Make run-length encoding. + + input: + x -- 1-d numpy array + output: + elements, counters -- integer iterables + + Not vectorized implementation. + """ + + pass + +def convert_image(img, coefs): + """Sum up image channels with weights from coefs array + + input: + img -- 3-d numpy array (H x W x 3) + coefs -- 1-d numpy array (length 3) + output: + img -- 2-d numpy array + + Not vectorized implementation. + """ + + pass + + +def pairwise_distance(x, y): + """Return pairwise object distance. + + input: + x, y -- 2d numpy arrays + output: + distance array -- 2d numpy array + + Not vectorized implementation. + """ + + pass diff --git a/ML17-fall/homeworks-practice/homework-practice-01/functions_vectorized.py b/ML17-fall/homeworks-practice/homework-practice-01/functions_vectorized.py new file mode 100644 index 0000000..96e85ce --- /dev/null +++ b/ML17-fall/homeworks-practice/homework-practice-01/functions_vectorized.py @@ -0,0 +1,85 @@ +import numpy as np + +def prod_non_zero_diag(x): + """Compute product of nonzero elements from matrix diagonal. + + input: + x -- 1-d numpy array + output: + product -- integer number + + + Vectorized implementation. + """ + + pass + + +def are_multisets_equal(x, y): + """Return True if both vectors create equal multisets. + + input: + x, y -- 1-d numpy arrays + output: + True if multisets are equal, False otherwise -- boolean + + Vectorized implementation. + """ + + pass + + +def max_after_zero(x): + """Find max element after zero in array. + + input: + x -- 1-d numpy array + output: + maximum element after zero -- integer number + + Vectorized implementation. + """ + + pass + + +def run_length_encoding(x): + """Make run-length encoding. + + input: + x -- 1-d numpy array + output: + elements, counters -- integer iterables + + Vectorized implementation. + """ + + pass + +def convert_image(img, coefs): + """Sum up image channels with weights from coefs array + + input: + img -- 3-d numpy array (H x W x 3) + coefs -- 1-d numpy array (length 3) + output: + img -- 2-d numpy array + + Vectorized implementation. + """ + + pass + + +def pairwise_distance(x, y): + """Return pairwise object distance. + + input: + x, y -- 2d numpy arrays + output: + distance array -- 2d numpy array + + Vctorized implementation. + """ + + pass diff --git a/ML17-fall/homeworks-practice/homework-practice-01/homework-practice-01.ipynb b/ML17-fall/homeworks-practice/homework-practice-01/homework-practice-01.ipynb new file mode 100644 index 0000000..92a13f7 --- /dev/null +++ b/ML17-fall/homeworks-practice/homework-practice-01/homework-practice-01.ipynb @@ -0,0 +1,421 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Машинное обучение, ВМК МГУ\n", + "\n", + "## Практическое задание 1\n", + "\n", + "### Общая информация\n", + "Дата выдачи: 18.09.2017 \n", + "\n", + "Мягкий дедлайн: 23:59MSK 01.09.2017 \n", + "\n", + "Жесткий дедлайн: 23:59MSK 08.09.2017 " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### О задании\n", + "\n", + "__Первая часть__ задания посвящена получению студентами навыков работы с библиотекой векторного вычисления numpy и библиотеками для построения графиков matplotlib/plotly. Это задание сдается частично в Яндекс.Контест (см. информацию ниже).\n", + "\n", + "__Вторая часть__ задания посвящена работе с данными: их преобразованию в нужный формат и устранению проблем в них.\n", + "\n", + "\n", + "### Оценивание и штрафы\n", + "Каждая из задач имеет определенную «стоимость» (указана в скобках около задачи). Максимально допустимая оценка за работу — 10 баллов.\n", + "\n", + "Сдавать задание после указанного срока сдачи нельзя. При выставлении неполного балла за задание в связи с наличием ошибок на усмотрение проверяющего предусмотрена возможность исправить работу на указанных в ответном письме условиях.\n", + "\n", + "Задание выполняется самостоятельно. «Похожие» решения считаются плагиатом и все задействованные студенты (в том числе те, у кого списали) не могут получить за него больше 0 баллов (подробнее о плагиате см. на странице курса). Если вы нашли решение какого-то из заданий (или его часть) в открытом источнике, необходимо указать ссылку на этот источник в отдельном блоке в конце Вашей работы (скорее всего вы будете не единственным, кто это нашел, поэтому чтобы исключить подозрение в плагиате, необходима ссылка на источник).\n", + "\n", + "Неэффективная реализация кода может негативно отразиться на оценке.\n", + "\n", + "\n", + "### Формат сдачи\n", + "Для сдачи задания переименуйте получившийся файл *.ipynb в соответствии со следующим форматом: homework-practice-01-Username.ipynb, где Username — Ваша фамилия и имя на латинице именно в таком порядке (например, homework-practice-01-IvanovIvan.ipynb). Приложите модули с кодом functions.py и functions_vectorized.py и заархивируйте в zip формат. Имя архива должно быть homework-practice-01-Username.zip\n", + "\n", + "Далее отправьте этот файл на hse.cs.ml+<номер группы>@gmail.com (например, hse.cs.ml+141@gmail.com для студентов группы БПМИ-141).\n", + "\n", + "\n", + "Для удобства проверки самостоятельно посчитайте свою максимальную оценку (исходя из набора решенных задач) и укажите ниже." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Оценка:** ..." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Часть 1\n", + "\n", + "_Задачи позаимствованы из курса практикума кафедры ММП факультета ВМК МГУ_" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Задачи 1-6\n", + "__(4.5 балла)__\n", + "\n", + "Ниже приведены задачи на работу с numpy-массивами. Для каждой из задач нужно привести 2 реализации – одна без использования numpy (cчитайте, что там, где на входе или выходе должны быть numpy array, будут просто списки), а вторая полностью векторизованная (без использования питоновских циклов/map/list comprehension). Невекторизованная реализация каждой из задач оценивается в __0.25 балла__, векторизованная в __0.5 балла__.\n", + "\n", + "Реализации без использования векторизации нужно записать в файл functions.py, а векторизованные — в файл functions_vectorized.py (см. шаблоны). Далее эти файлы необходимо сдать в Яндекс.Контест: https://contest.yandex.ru/contest/5016/problems/ в соответствующие задачи. По техническим причинам тестирование проводится на этапе компиляции, поэтому в случае любой ошибки вы будете получать вердикт CE, и в логе компиляции можно будет посмотреть, в чем проблема. Частичное выполнение задания (не все задачи) будет оцениваться, хотя и будет получать вердикт CE. Для удобства проверки приложите в ячейке ниже ссылки на самые успешные посылки.\n", + "\n", + "\n", + "* __Задача 1__: Подсчитать произведение ненулевых элементов на диагонали прямоугольной матрицы. \n", + " Например, для X = np.array([[1, 0, 1], [2, 0, 2], [3, 0, 3], [4, 4, 4]]) ответ 3.\n", + " \n", + " \n", + "* __Задача 2__: Даны два вектора x и y. Проверить, задают ли они одно и то же мультимножество. \n", + " Например, для x = np.array([1, 2, 2, 4]), y = np.array([4, 2, 1, 2]) ответ True.\n", + " \n", + " \n", + "* __Задача 3__: Найти максимальный элемент в векторе x среди элементов, перед которыми стоит нулевой. \n", + " Например, для x = np.array([6, 2, 0, 3, 0, 0, 5, 7, 0]) ответ 5.\n", + " \n", + " \n", + "* __ Задача 4__: Дан трёхмерный массив, содержащий изображение, размера (height, width, numChannels), а также вектор длины numChannels. Сложить каналы изображения с указанными весами, и вернуть результат в виде матрицы размера (height, width). В ноутбуке приведите пример работы функции – преобразуйте цветное изображение в оттенки серого, использовав коэффициенты np.array([0.299, 0.587, 0.114]). Считать реальное изображение можно при помощи функции scipy.misc.imread (если изображение не в формате png, установите пакет pillow).\n", + "\n", + "\n", + "* __Задача 5__: Реализовать кодирование длин серий (Run-length encoding). Для некоторого вектора x необходимо вернуть кортеж из двух векторов одинаковой длины. Первый содержит числа, а второй - сколько раз их нужно повторить. \n", + " Например, для x = np.array([2, 2, 2, 3, 3, 3, 5]) ответ (np.array([2, 3, 5]), np.array([3, 3, 1])).\n", + " \n", + " \n", + "* __Задача 6__: Даны две выборки объектов - X и Y. Вычислить матрицу евклидовых расстояний между объектами. Сравните с функцией scipy.spatial.distance.cdist по скорости работы (сравнения приведите ниже в ноутбуке).\n", + "\n", + "__Замечание.__ Можно считать, что все указанные объекты непустые (к примеру, в __задаче 1__ на диагонали матрицы есть ненулевые элементы).\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Посылка по невекторизованным функциям: ...\n", + "\n", + "Посылка по векторизованным функциям: ..." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Задача 7\n", + "__(1.5 балла)__ \n", + "Для каждой задачи сравните скорость работы невекторизованной и векторизованной реализации. С помощью пакета matplotlib или plotly постройте графики времени работы в зависимости от размера данных. __Графики должны выглядеть опрятно!__ То есть должны быть подписаны оси, названия графиков, и т.д. Например, ниже представлены хороший и плохой графики:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "//anaconda/lib/python2.7/site-packages/matplotlib/figure.py:402: UserWarning: matplotlib is currently using a non-GUI backend, so cannot show the figure\n", + " \"matplotlib is currently using a non-GUI backend, \"\n" + ] + }, + { + "data": { + "image/png": "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\nrkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "%matplotlib inline\n", + "\n", + "data_size = np.array([10, 30, 70, 120])\n", + "time_non_vectorized = data_size ** 2 + 10\n", + "time_vectorized = data_size ** 1.5\n", + "\n", + "f, (ax1, ax2) = plt.subplots(1, 2, figsize=(13, 5))\n", + "\n", + "ax1.plot(data_size, time_non_vectorized)\n", + "ax1.plot(data_size, time_vectorized)\n", + "ax1.set_title(u\"Плохой график\")\n", + "ax1.set_xlabel(u\"Размер данных\")\n", + "ax1.set_ylabel(u\"Время\")\n", + "\n", + "ax2.plot(data_size, time_non_vectorized, label=u\"Невекторизованная\")\n", + "ax2.plot(data_size, time_vectorized, label=u\"Векторизованная\")\n", + "ax2.set_title(u\"Хороший график\")\n", + "ax2.set_xlabel(u\"Длина массива\")\n", + "ax2.set_ylabel(u\"Время (с)\")\n", + "ax2.grid()\n", + "ax2.legend()\n", + "\n", + "f.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Your code here\n", + "# ..." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Часть 2\n", + "\n", + "В данном задании мы рассмотрим набор данных об учащихся, собранный в 2006 году в одной из школ Португалии. Данные представлены в неудобном для машинного обучения виде, и содержат мусор. Ваша задача — привести их к надлежащему виду и обучить на них простую модель.\n", + "\n", + "**Внимание!** Хотя исходные данные для этого задания можно найти в интернете, делать это запрещается. Вся необходимая информация о данных содержится в задании. В случае затруднений обращайтесь к своему семинаристу(ке).\n", + "\n", + "Данные состоят из четырех файлов:\n", + "- data.csv — основная таблица с информацией о учащихся\n", + "- scores.csv — список финальных оценок по одному из предметов (20-балльная шкала переведенная в проценты)\n", + "- attendance.csv — таблица посещений занятий по этому предмету\n", + "- school_support.txt — список учащихся, которым оказывается финансовая поддержка\n", + "\n", + "Ваша задача — построить модель для предсказания финальных оценок исходя из всех остальных данных. Качество мы будем измерять по метрике RMSE.\n", + "\n", + "Расшифровка столбцов в data.csv для справки:\n", + "- age — возраст\n", + "- Medu — уровень образования матери (по некоторой условной шкале)\n", + "- Fedu — уровень образования отца (по некоторой условной шкале)\n", + "- traveltime — время в пути до школы (1 – < 15 мин., 2 – от 15 до 30 мин., 3 – от 30 мин. to 1 ч.\n", + "или 4 – > 1 ч.)\n", + "- studytime — время, затрачиваемое на занятия вне школы (1 – < 2 ч., 2 – от 2 до 5 ч., 3 – от 5 до 10 ч. или 4 – > 10 ч.)\n", + "- famrel — насколько хорошие отношения в семье у учащегося (по некоторой условной шкале)\n", + "- freetime — количество свободного времени вне школы (по некоторой условной шкале)\n", + "- goout — время, затрачиваемое на общение с друзьями (по некоторой условной шкале)\n", + "- Dalc — количество употребления алкоголя в учебные дни (по некоторой условной шкале)\n", + "- Walc — количество употребления алкоголя в неучебные дни (по некоторой условной шкале)\n", + "- health — уровень здоровья (по некоторой условной шкале)\n", + "- sex_M — пол: мужской (1) или женский (0)\n", + "- address_U — живет ли учащийся в городе (1) или в пригороде (0)\n", + "- famsize_LE3 — размер семьи: не больше 3 человек (1) или больше (0)\n", + "- Pstatus_T — живут ли родители вместе (1) или отдельно (0)\n", + "- nursery — посещал ли учащийся детский сад\n", + "- plans_university — планирует ли учащийся поступать в университет (-1 или 1)\n", + "- past_failures — количество неудовлетворительных оценок по другим предметам ранее (от 0 до 4)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Задача 1: пропуски в данных \n", + "__(0.5 балла)__\n", + "\n", + "Загрузите таблицу data.csv. Проверьте, есть ли в ней пропуски (значения NaN). Замените все пропущенные значения на среднее значение этого признака по столбцу.\n", + "\n", + "*Hint: изучите в pandas функции loc, isnull, а также передачу булевых массивов в качестве индексов.*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Your code here\n", + "# ..." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Задача 2: кросс-валидация для исходных данных\n", + "__(0.5 балла)__\n", + "\n", + "Загрузите файл scores.csv и протестируйте, как линейная регрессия предсказывает ответ сейчас (с помощью кросс-валидации).\n", + "\n", + "*Hint: воспользуйтесь sklearn.linear_model и sklearn.model_selection.*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Your code here\n", + "# ..." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Задача 3: полные данные\n", + "__(1 балл)__\n", + "\n", + "Воспользуйтесь файлами attendance.csv и school_support.txt для того, чтобы добавить новые признаки в данные. Желательно по максимуму использовать возможности pandas для упрощения преобразований." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Your code here\n", + "# ..." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Задача 4: сломанный признак\n", + "__(0.5 балла)__\n", + "\n", + "Найдите в данных сломанный признак (он не соответствует описанию) и исправьте его." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Your code here\n", + "# ..." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Задача 5: борьба с выбросами\n", + "__(1.5 балла)__\n", + "\n", + "Качество предсказания может ухудшаться, если в данных присутствуют корректные значения признаков (с точки зрения чтения данных и применения методов), но не соответствующие реальным объектам. Например, данные могли быть введены в неверном формате, а потом слишком грубо приведены к общему виду, из-за чего ошибка не была замечена.\n", + "Попробуем от такого избавиться — а для этого такие объекты нужно сначала найти. Конечно, нам еще недоступны многие продвинутые способы, но давайте попробуем обойтись простыми.\n", + "\n", + "Первый способ это сделать — посмотреть для каждого признака на распределение его значений и проверить крайние значения на правдоподобность.\n", + "\n", + "*Hint 1: используйте функцию DataFrame.hist*\n", + "\n", + "*Hint 2: в описании датасета выше есть информация, необходимая для восстановления правильных значений*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Your code here\n", + "# ..." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Другой простой способ найти выбросы — сделать предсказание на всех объектах и посмотреть на объекты с наибольшей ошибкой. Обратите внимание, что просто удалять все объекты с высокой ошибкой нельзя — это, конечно, хороший способ добиться меньшей ошибки (на данной выборке), но одновременно вы ухудшите обобщающую способность алгоритма. Вместо этого вам нужно найти однозначно ошибочные записи и их исправить.\n", + "\n", + "*Hint: возможно, все проблемы уже были найдены в прошлом пункте; для проверки — в обоих пунктах в сумме нужно исправить 3 проблемы.*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Your code here\n", + "# ..." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Финальное предсказание\n", + "\n", + "Проведите предсказание еще раз и сравните результат с исходным." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Your code here\n", + "# ..." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/ML17-fall/homeworks-theory/.DS_Store b/ML17-fall/homeworks-theory/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..e92fd2b05f87b8abbc0cd04a113867967888f45e GIT binary patch literal 6148 zcmeHKyG{c^3>-s>NHi%ax1j_n;saPkp`hjmAmpM%1TKm|i0(Q*8^#YLj)Rs0*(dL; zeYRISjn@EV_Pm?|698kXBHnZvivCv}$U%67NM(%|wAkYwr+6Af|LoA*6Rer{fTowf zrmfXpS#3&PVuKaGhQ0=mJYj=dTU%OZ*fC;twQcVf+jhaKdZi2M`MU{sDak-GkPIXP z$v`q-JzHrQA0-*dKr)aFd}Bc0=7p+Q13O1`sozEb;z(^3?roMJmauDJ=g2=4@l>Lx zN{krd>GYR~tAU-Pr$b`+kT_XlLJ>Qi^^1i=s$;InKr+y0;Ly#9_Ww)jFY|vtDXnB6 z8TeNW$Y_2&pYcl3TL+iZUR$U))K6iog>&gW0%&L}KK>F{bkDdN*g0A{{gzJ5hk){u Jk_`L>10NghC0qai literal 0 HcmV?d00001 diff --git a/ML17-fall/homeworks-theory/homework-theory-1-differentiation.pdf b/ML17-fall/homeworks-theory/homework-theory-1-differentiation.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5630ea9096c8530930fd8d1b6e7d5ecfa0049698 GIT binary patch literal 126440 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

=_d)u1 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 LdU}wm4BGzzme~|_ literal 0 HcmV?d00001 diff --git a/README-16-17.md b/README-16-17.md new file mode 100644 index 0000000..f3dfbbf --- /dev/null +++ b/README-16-17.md @@ -0,0 +1,169 @@ +# Семинары по машинному обучению, ВМК МГУ + + + +Конспекты, код и прочие материалы к семинарам по машинному обучению, проводимым на ВМК МГУ. + +Почта для заданий: ml.cmc.msu@gmail.com + +[Страница курса на machinelearning.ru](http://www.machinelearning.ru/wiki/index.php?title=Машинное_обучение_%28семинары%2C_ВМК_МГУ%29) + +[Канал в telegram для объявлений](https://telegram.me/joinchat/A5rlQD_hqqV2n5AOWEVrVA) + +[Оценки за курс](https://docs.google.com/spreadsheets/d/1A5BJs_dJcmqY2KVBUCTWlXueTeFWNVT6Tbx5e3dN6_c/edit#gid=2044373835) + +На семинары и работу ассистента можно оставить отзыв: [[анонимно без регистрации и смс](https://docs.google.com/forms/d/1j8zMReMtl-BCeAVISxx_v42_y8GAVeolofFuAHQjHBc/viewform)] + +Курс лекций на ФКН ВШЭ: [[wiki](http://wiki.cs.hse.ru/Машинное_обучение_1)] [[материалы](https://github.com/esokolov/ml-course-hse)] + +## Правила выставления оценок + +**Итоговая контрольная работа:** + +1. На последней лекции будет проведена контрольная работа, которая затронет все темы, изученные в течение семестра. +2. Контрольная оценивается по двухбалльной шкале (зачет/незачет), незачет влечет за собой недопуск к экзамену. +3. Студент, не получивший допуск, переписывает на экзамене контрольную. В случае успеха он сдает экзамен на первой пересдаче. В случае незачета он снова переписывает контрольную на первой пересдаче, и так далее. + +**Семинары:** + +1. На семинарах по каждой пройденной теме будут проводиться проверочные работы. Каждая проверочная оценивается по пятибалльной шкале. В зависимости от оценки за проверочную, студент освобождается от части или от всех задач по этой теме на итоговой контрольной работе. +2. На семинарах будут выдаваться практические задания, которые будут оцениваться по десятибалльной шкале. +3. В течение семестра будут проводиться конкурсы по анализу данных. Правила выставления оценок для каждого конкурса указываются в условиях самого конкурса. +4. Оценка за работу в семестре равна сумме оценок за проверочные работы, практические задания и конкурсы. +5. Если оценка за работу в семестре не меньше 100% от максимальной оценки за проверочные и лабораторные работы, то студент освобождается от написания итоговой контрольной и получает допуск к экзамену автоматом. +6. Если оценка за работу в семестре не меньше 80% от максимальной оценки за проверочные и лабораторные работы и конкурсы, то студент получает +1 балл на экзамене (при условии получения положительной оценки). +7. В конце семестра разрешается переписать все проверочные, пропущенные по уважительной причине. + +## Занятия + +| Дата | Номер | Тема | Материалы | ДЗ | +| :---: | :---: | --- | --- | --- | +| 2 сентября | Семинар 1 | Вводное занятие:

| [Конспект](ML16/lecture-notes/Sem01_intro.pdf) | | +| 16 сентября | Семинар 2 | Метрические методы:
  • Особенности метрических методов: чувствительность к масштабу и шуму, проклятие размерности
  • Примеры метрик
  • Метрики на категориальных признаках
  • Введение в NumPy, SciPy, Pandas, Scikit-Learn
| [Конспект](ML16/lecture-notes/Sem02_knn.pdf)
[Notebook](ML16/src/Sem02_python_intro.ipynb) | | +| 23 сентября | Семинар 3 | Метрические методы:
  • Locality-sensitive hashing
  • Векторизация операций в NumPy
  • Практические особенности kNN и LSH
| [Конспект](ML16/lecture-notes/Sem03_knn.pdf)
[Notebook](ML16/src/Sem03_numpy_knn.ipynb) | [Домашнее задание](ML16/homeworks/Sem03_knn_hw.pdf) | +| 30 сентября | Семинар 4 | Решающие деревья:
  • Жадное построение решающих деревьев
  • Критерии информативности
| [Конспект](ML16/lecture-notes/Sem04_trees.pdf) | [Домашнее задание](ML16/homeworks/Sem04_trees_hw.pdf) | +| 7 октября | Семинар 5 | Решающие деревья:
  • Стрижка деревьев
  • Учет пропущенных значений
  • Работа с категориальными признаками
  • Случайный лес
| [Конспект](ML16/lecture-notes/Sem04_trees.pdf)
[Notebook](ML16/src/Sem05_trees.ipynb) | | +| 14 октября | Семинар 6 | Метрики качества:
  • Доля правильных ответов, точность и полнота
  • AUC-ROC
| Теория: [конспект](https://github.com/esokolov/ml-course-hse/blob/master/2016-fall/lecture-notes/lecture04-linclass.pdf), раздел 2

Практика: [конспект](https://github.com/esokolov/ml-course-hse/blob/master/2016-fall/seminars/sem05-linclass.pdf), задача 1.1 | | +| 21 октября | Семинар 7 | Метрики качества:
  • AUC-ROC, продолжение
| Теория: [конспект](https://github.com/esokolov/ml-course-hse/blob/master/2016-fall/lecture-notes/lecture04-linclass.pdf), раздел 2

Практика: [конспект](https://github.com/esokolov/ml-course-hse/blob/master/2016-fall/seminars/sem05-linclass.pdf), задачи 1.2, 1.3, 1.4 | [Домашнее задание](ML16/homeworks/Sem07_metrics_hw.pdf) | +| 28 октября | Семинар 8 | Линейная классификация:
  • Свойства градиента
  • Векторное дифференцирование
| Теория: [конспект](ML16/lecture-notes/Sem09_linear.pdf) | | +| 11 ноября | Семинар 9 | Линейная классификация:
  • Векторное дифференцирование
  • Градиентный спуск и способы оценивания градиента
  • Регуляризация и разреженные модели
| Теория: [конспект](ML16/lecture-notes/Sem09_linear.pdf)

[конспект по разреженным моделям](https://github.com/esokolov/ml-course-hse/blob/master/2016-fall/lecture-notes/lecture03-linregr.pdf), раздел 5 | [Домашнее задание](ML16/homeworks/Sem09_linear_hw.pdf) | +| 18 ноября | Семинар 10 | Условная оптимизация:
  • Лагранжиан
  • Двойственные задачи
  • Теорема Куна-Таккера
| Теория: [конспект](ML16/lecture-notes/Sem10_linear.pdf) | [Домашнее задание](ML16/homeworks/Sem10_linear_hw.pdf) | +| 25 ноября | Семинар 11 | Отчёты о соревнованиях:
  • [Липкина + БМБНЛ, Dota](ML16/contests/dota-lipkina.pdf)
  • [Януш, Dota](ML16/contests/dota-yanush.pdf)
  • [Решающие пни, Dota](ML16/contests/dota-decision-stumps.pdf)
  • [Те, кто сверху, Dota](ML16/contests/dota-te-kto-sverkhu.html)
  • [Викулин, Sberbank](ML16/contests/sber-vikulin.pdf)
  • [Попов, Sberbank](ML16/contests/sber-popov.pdf)
| | | +| 2 декабря | Семинар 12 | Линейные модели:
  • SVM и двойственная задача
  • Логистическая регрессия и оценивание вероятностей
| Теория: [конспект](ML16/lecture-notes/Sem11_linear.pdf) | [Домашнее задание](ML16/homeworks/Sem11_linear_hw.pdf) | +| 9 декабря | Семинар 13 | Линейные модели:
  • Ядра и спрямляющие пространства
  • Применение ядер в линейной регрессии
  • Метрические операции в спрямляющем пространстве
  • Способы построения ядер
| Теория: [конспект](ML16/lecture-notes/Sem12_linear.pdf) | [Домашнее задание](ML16/homeworks/Sem12_linear_hw.pdf) | +| 16 декабря | Семинар 14 | Байесовские методы:
  • Многомерное нормальное распределение, его свойства
  • Нормальный дискриминантный анализ
  • Вывод оценок максимального правдоподобия для многомерного нормального распределения
| Теория: [конспект](ML16/lecture-notes/Sem13_bayes.pdf) | | +| 16 февраля | Семинар 15 | Разложение ошибки на смещение и разброс | [Конспект](https://github.com/esokolov/ml-course-hse/blob/master/2016-fall/seminars/sem08-ensembles.pdf) | [Домашнее задание](ML16-spring/homeworks/Sem01_ensembles_hw.pdf) +| 2 марта | Семинар 16 | Композиции, случайные леса | [Конспект](https://github.com/esokolov/ml-course-hse/blob/master/2016-fall/lecture-notes/lecture08-ensembles.pdf) | +| 9 марта | Семинар 17 | Градиентный бустинг | [Теория](https://github.com/esokolov/ml-course-hse/blob/master/2016-fall/lecture-notes/lecture09-ensembles.pdf)
[Задачи](https://github.com/esokolov/ml-course-hse/blob/master/2016-fall/seminars/sem09-ensembles.pdf) | +| 16 марта | Семинар 18 | EM-алгоритм и смеси нормальных распределений | [Конспект](ML16-spring/lecture-notes/Sem04_em.pdf) (1.1-1.4) | [Домашнее задание](ML16-spring/homeworks/Sem04_em_hw.pdf) + +## Практические задания + +Если задание сдано и было проверено до дедлайна, то разрешается без штрафа внести исправления и прислать новую версию. +Новую версию необходимо прислать не позднее мягкого дедлайна. +Дальнейшие исправления возможны на усмотрение преподавателей. + +Чтобы мы точно успели проверить решение, рекомендуем присылать хотя бы за неделю до дедлайна. + +Обратите внимание, что по каждому заданию даётся два дедлайна: мягкий и жёсткий. +За сдачу задания после мягкого дедлайна оценка понижается на 0.05\*n\*(n + 1) баллов, где n — количество дней просрочки. +Оценка за задание не может быть отрицательной. + +### Задание 1: Pandas, kNN и решающие деревья + +[Условие](ML16/labs/lab01_pandas_knn_trees.ipynb) + +Дата выдачи: 16.10.2016 + +Мягкий дедлайн: 30.10.2016, 23:59 MSK + +Жёсткий дедлайн: 06.11.2016 23:59 MSK + +### Задание 2: решающие деревья + +[Условие](ML16/labs/lab02_trees.ipynb) + +Дата выдачи: 14.11.2016 + +Мягкий дедлайн: 05.12.2016, 05:59 MSK + +### Задание 3: EM-алгоритм +[Условие](ML16-spring/labs/lab-01-em.ipynb) + +Дата выдачи: 18.04.2017 + +Мягкий дедлайн: 07.05.2017, 05:59 MSK + +## Соревнования + +По каждому соревнованию в течение недели после его окончания необходимо прислать краткий отчёт о решении +и код, с помощью которого можно воспроизвести решение. + +### Соревнование 1: вероятность победы в Dota 2 + +Дата выдачи: 21.10.2016 + +Дедлайн для индивидуального участия: 6.11.2016 + +Старт командного участия: 7.11.2016 + +Дедлайн для командного участия: 20.11.2016 + +Соревнование: https://inclass.kaggle.com/c/cmc-msu-machine-learning-fall-2016-2017-competition-1 + +Ссылка для участия: [link](https://kaggle.com/join/cmc_msu_fall_contest_1_c83bd9mw) + +[Описание задачи](ML16/contests/contest01-dota-statement.ipynb) + +За первое, второе и третье место в индивидуальной части контеста ставится 10, 9 и 8 баллов соответственно. +За места с четвертого и по самое последнее выставляется от 7 до 1 баллов по равномерной сетке. +Участникам, которые не смогли преодолеть бейзлайн, оценка обнуляется. + +По окончании индивидуальной части участники делятся по рейтингу на 3 или 4 корзинки (в зависимости от их количества), +из которых собираются случайные равномерные по силе команды. +В командной части за места с первого по третье ставятся 4, 3 и 2 балла, а дальше по равномерной сетке до 1. +Также в каждой команде будет подсчитан процент улучшения качества относительно лучшего из участников; +исходя из этого рейтинга, будут проставлены дополнительные баллы по такому же принципу, как и в предыдущем предложении. +Следует помнить, что оценка в командной части для участников из нижних корзинок будет сильно зависить от их понимания решения (отчета и выступления). + +По окончании контестов участники, занявшие первые 3 места должны выступить с кратким рассказом о своем решении. Если все присланные группой решения будут тривиальными, то преподаватель имеет право снизить максимальную оценку до 10 или 5 баллов. + +**Альтернативное соревнование** + +[Sberbank Data Science Contest](https://sdsj.ru/contest.html) + +Правила выставления оценок аналогичны правилам по индивидуальной части соревнования по Dota. +Никаких ограничений на методы решения не накладывается. +Командное решение не предусмотрено. +Если студент участвовал и в индивидуальном соревновании по Dota, и в данном соревновании, +то ему будет выставлена максимальная из двух оценок, а не сумма. +Возможно решение сначала только контеста Сбербанка, а потом командное учебного по Dota, +но нужно заранее (за пару дней до начала командной части) уведомить об этом преподавателей. +В зависимости от количества участников контеста шкала может быть понижена и/или разрежена. +Также за высокие места среди всех участников в общем зачете или по каждой задаче могут выдаваться серьёзные бонусы. + +### Соревнование 2: Santander Product Recommendation + +Дата выдачи: 28.11.2016 + +Начало командной части: 7.12.2016 + +Дедлайн на образование команд: 14.12.2016 (позже этого числа kaggle не разрешит слияние) + +Оконачание контеста: 21.12.2016 + +Соревнование: https://www.kaggle.com/c/santander-product-recommendation + +[Рекомендации по соревнованию](ML16/contests/santander.ipynb) + +Для участия в командной части нужно занять достаточно высокое место на public leaderboard. +Ориентировочно потребуется занять место min(60, лучшее\_место\_лучшего\_скрипта - 5), +но ближе к началу командной части этот порог может быть изменен в ту или иную сторону по усмотрению преподавателей. +Всем, кто преодолеет этот порог, будут начислены 7 баллов. + +Для каждой команды будет выделен "куратор" — человек, +у которого есть опыт в решении контестов и который сможет помочь с идеями. +За хорошие места на private leaderboard будут поставлены дополнительные баллы. + +Пользоваться можно любыми алгоритмами машинного обучения, даже теми, что еще не были рассмотрены в курсе. +