{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "
Введение в машинное обучение.
\n", "Вводятся понятие классификации на базе библиотек scikit-learn.\n", "Рассмотрены как минимум следующие классификаторы:\n", "svm (Support Vector Machine, метод опорных векторов) включая ядровый трюк,\n", "MLP (Multi-layer Perceptron, Многослойный перцептрон, нейронные сети),\n", "SGD (Stochastic Gradient Descent, Стохастический градиентный спуск)\n", "и\n", "RidgeClassifier (ridge classification, гребневый классификатор).\n", "В процессе изложения показано насколько важную роль играют параметры того или иного метода.\n", "
\n", "\n", "Это предварительная версия! Любые замечания приветствуются.
" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import scipy as sp\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "import numpy.polynomial.polynomial as poly\n", "import scipy.optimize as opt\n", "\n", "from numpy import random as rand" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Задача классификации является частным случаем общей формулировке задачи машинного обучения показаной в самой первой заметке про регрессии. Так, в задаче лкассификации считается, что регрессия строится для конечного, при этом существенно небольшого колличества чисел.\n", "Фактически значения образуют дискретное множество или просто конечное множество объектов.\n", "Интерпретация такая. По признакам строится прогноз нечисловой, а элементу из множества.\n", "Например, по признакам (где обитает, сколько весит в взослом состоянии, сколько ног и так дале) определить животное.\n", "Или как в примере из прошлой заметке определить название цветка ириса." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Пусть наша модель задается параметризуется: $f_\\theta$. Задача подбора параметров тогда формулируется так:\n", "$$\n", "\\theta^* = \\underset{\\theta}{\\operatorname{argmin}}\\sum_{i=1}^{i=N}(f_{\\theta}(x_i) - y_i )^2 = \\underset{\\theta}{\\operatorname{argmin}} \\mathcal{L}(\\theta).\n", "$$\n", "\n", "Преобразуем минимизационную задачу.\n", "Введем $l(\\hat{y}, y) = (\\hat{y}- y)^2$,\n", "тогда\n", "$$\n", "\\mathcal{L}(\\theta) = \\sum_{i=1}^{i=N}(f_{\\theta}(x_i) - y_i )^2 = \\sum_{i=1}^{i=N}l(f_{\\theta}(x_i), y_i ).\n", "$$\n", "\n", "Как и ранее было упомянуто l можно выбирать под задачу." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Задача классификации заключается в предсказании класса объекта. Классов объектов \"немного\", задаются дискретным множеством.\n", "В простом случае рассматривается бинарная задача, когда есть два класса.\n", "Например,\n", "что\n", "* сдаст студент экзамен,\n", "* будет или нет по кредиту просрочка\n", "и так далее.\n", "\n", "В таких задачах значение у $y$ может быть\n", "* -1 и 1\n", "* 0 и 1.\n", "\n", "Для случая бинарной классификации берут\n", "$$\n", "l(\\hat{y}, y) = [\\hat{y} \\neq y] =\n", "\\begin{cases}\n", "0 & \\hat{y} = y\\\\\n", "1 & \\hat{y} \\neq y\n", "\\end{cases} \n", "$$\n", "Но данная функция не дифференцируема, значит методом градиентного спуска не минимизировать.\n", "\n", "Приходим к важному принципу.\n", "Есть функция метрика, которую мы на самом деле хотим минимизировать.\n", "Но для применения оптимизационных методов берут другую дифференцируемую функцию,\n", "которую и минимизируют." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Какие варианты для значений функции $f_{\\theta}$?\n", "Отмечу, что в случае задания $l(\\hat{y}, y)$ для $\\hat{y}$ фактически имеются два варианта значения.\n", "Иначе говоря можно было бы эквивалентно задать две функции.\n", "Если же класса равноправны, то хотелось бы одной.\n", "\n", "В случае бинарной классификации один из вариантов это считать, что число $0$ разбивает на два класса.\n", "Так,\n", "если $f_{\\theta}(x) >0$, то $x$ принадлежит первому классу,\n", "а если $f_{\\theta}(x)<0$, то второму.\n", "Случай $f_{\\theta}(x)=0$ считается неопределенным.\n", "Если придерживаться того, что классам соответствует значение y $1$ и $-1$,\n", "то величина $m$ всегда положительна ($m=yf_{\\theta}(x)>0$) для правильных данных.\n", "В этом смысле, данная величина характеризует величину ошибки.\n", "Если величина $m$ (margin) положительна, то ошибки фактически нет.\n", "Если она отрицательно ($m=yf_{\\theta}(x)<0$), то обозначает ошибку.\n", "Поэтому, можно величину $m$ и использовать для построения функции потерь." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "