1632
правки
Изменения
Ядро
,rollbackEdits.php mass rollback
[[File:kernel3_2kernel2_3.png|600px500px|thumb|right|Пример использования ядерного трюка]]'''Ядерный трюк'''(ангангл. ''kernel function'') метод в машинном обучении, позволяющий перевести элементы для случая линейной неразделимости в новое линейно разделимое пространство пространство. Такое пространство называют '''спрямляющим'''. Поскольку для любой непротиворечивой выборки соответствующее пространство большей размерности существует, главной проблемой становится его найти.
'''Пример''': На первой картинке справа можно увидеть, что 2 класса не разделимы линейно, но после преобразования появляется разделяющая плоскость.
== Конструктивные способы построения ядер ==
1.Произвольное скалярное произведение $ K(x,x') =\langle x,x'\rangle $ является ядром.
2. Константа $K(x,x') = 1$ является ядром.
3. Произведение ядер $K(x,x')=K_1(x,x')K_2(x,x')$является ядром.
4. Для любой функции $\psi :X\rightarrow R$ произведение <tex>$K(x,x′) =\psi(x)\psi(x′x')</tex>${{---}} ядро.
5. Линейная комбинация ядер с неотрицательными коэффициентами $K(x,x′x') ==\alpha_1K_1(x,x') +\alpha_2K_2(x,x')$является ядром.
6. Композиция произвольной функции $\varphi:X \rightarrow X$ и произвольного ядраK0является ядра $K_0$ является ядром: $K(x,x') =K_0(\varphi(x),\varphi(x'))$.
7. ЕслиsЕсли $s:$X×X\rightarrow R$ произвольная симметричная интегрируемая функция, то $K(x,x′) =\int Xsint_Xs(x,z)s(x',z)dz$dzявляется является ядром.//TODO
8. Функция вида $K(x,x') = k(x−x')$ является ядром тогда и только тогда, когдаФурьекогда Фурье-образ $F[k](\omega) = (2\Pipi)n_2∫Xe−i〈^{\owmegafrac{n}{2}}\int_Xe^{−i\langle\omega,x〉kx\rangle }k(x)dx $ неотрицателен.
9. Предел локально-равномерно сходящейся последовательности ядер {{---}} ядро.
10. Композиция произвольного ядраK0и ядра $K_0$ и произвольной функции ''$f'':R\rightarrow R$, представимой в виде сходящегося степенного ряда с неотрицательными коэффициентами $K(x,x') = f(K_0(x,x'))$, является ядром. В частности, функции $f(z) =e^z$ и $f(z) =\frac{1/}{1−z} от $ где $z$ {{---}} функция ядра {{---}} являются ядрами. == Некоторые часто используемые ядра == 0. '''Линейное''' (англ. linear) $K(x, x')= \langle x, x'\rangle$ Используется в алгоритме [[Метод опорных векторов (SVM) | SVM ]] по умолчанию. 1. '''Полиномиальное''' (англ. polynomial) $K(x, x') = (\langle x, x' \rangle + R)^d$<ref>https://en.wikipedia.org/wiki/Polynomial_kernel - Polynomial kernel</ref> Используется когда необходимо получить полином $p(y)$, где в качестве $y$ выступает скалярное произведение $\langle x, x' \rangle$. Поскольку в конструктивных возможностях у нас есть умножение ядер, умножение на коэффициент и сложение, то любой многочлен так же является ядром. 2. '''Гаусово''' (англ. gaussian) ядро RBF (Radial basis function)<ref>[https://en.wikipedia.org/wiki/Radial_basis_function_kernel - RBF]</ref> $K(x, x') = exp(-\frac{\parallel x - x'\parallel^2}{2\sigma^2})$ Такое ядро соответствует бесконечномерному пространству. Поскольку оно является пределом последовательности полиномиальных ядер при стремлении степени ядра к бесконечности. 3. '''Сигмоидальное''' (англ. sigmoid) ядро $tangh (\gamma \langle x, x'\rangle + r)$ В отличие от предыдущих 3-х не является ядром Мерсера (не выполняет условие теоремы), но при этом на практике работает хорошо. 4. '''Строковое''' Строковые ядра <ref>[https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D1%80%D0%BE%D0%BA%D0%BE%D0%B2%D0%BE%D0%B5_%D1%8F%D0%B4%D1%80%D0%BE#%D0%9E%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5 - Строковое ядро]</ref> это различные ядерные функции для вычисления расстояний между двумя строками. == Использование ядер в коде ==
В библиотеке языка Python {{---}} sklearn.clustering<ref>https://scikit-learn.org/stable/modules/classes.html#module-sklearn.cluster - sklearn.cluster</ref>, есть функции и классы которые используют ядра для кластеризации, например SVM(Support vector machines).
* Создаём классификатор svm {{---}} Classifier. В данном случае используется линейное ядро. Так же можно использовать 'polynomial' и 'rbf' [[Ядро#Некоторые часто используемые ядра|(см. используемые ядра)]].
clf == Некоторые часто используемые функции ==0svm.Линейное $KSVC(x, xkernel='linear')= \langle x, x'\rangle$
== См. также ==
* [[Метод опорных векторов (SVM)]]
* [[Линейная регрессия]]
* [[Логистическая регрессия]]
* [[Регуляризация]]
== Примечания ==
<references/>
== Источники информации ==
#[http://www.machinelearning.ru/wiki/images/6/6d/Voron-ML-1.pdf Ядра и спрямляющие пространства p.73-75 — К. В. Воронцов Математические методы обучения по прецедентам]
#[https://github.com/esokolov/ml-course-msu/blob/master/ML16/lecture-notes/Sem12_linear.pdf github.com/esokolov/ml-course-msu — Евгений Соколов Ядра и их применение в машинном обучении]
#[https://ru.wikipedia.org/wiki/%D0%AF%D0%B4%D0%B5%D1%80%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4#%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0:_%D1%8F%D0%B4%D0%B5%D1%80%D0%BD%D1%8B%D0%B9_%D1%82%D1%80%D1%8E%D0%BA wikipedia.org — Ядерный метод]
#[http://www.machinelearning.ru/wiki/images/7/78/Kitov-ML-09-Kernel_methods.pdf www.machinelearning.ru — Виктор Китов Ядерные методы]
#[https://www.datacamp.com/community/tutorials/svm-classification-scikit-learn-python#kernels datacamp.com — Support Vector Machines with Scikit-learn]
[[Категория: Машинное обучение]]
[[Категория: Классификация]]
[[Категория: Регрессия]]