Если вы занимались машинным обучением, вы могли случайно встретить слово «ядро». В библиотеке sklearn есть параметры для указания типа ядра, которое вы хотите использовать в некоторых классификаторах, таких как SVM (машины опорных векторов). Так что же такое ядро ​​и почему оно имеет значение?

Ядро в контексте машинного обучения обычно относится к функции, которая может быть подключена к решающей функции классификатора и которая обращается к обучающим данным только через внутренние продуктыв евклидовом векторном пространстве (т.е. вещественные числа) это обычно относится к скалярному произведению. Причина, по которой это полезно, заключается в том, что во многих приложениях мы можем захотеть преобразовать точки данных в другое пространство. Например, в задачах классификатора мы можем преобразовать точки данных, чтобы их было легче разделить. Классической иллюстрацией трюка с ядром является его использование в машинах опорных векторов. В машинах опорных векторов классификатор пытается найти плоскость или (в 2D линию), которая разделяет набор данных на 2.

Как видите, линейно разделить два набора данных невозможно. Однако визуально мы можем видеть, что все синие точки находятся в центре, окруженные красными точками. Итак, в другом пространстве, в этом случае, если мы преобразуем его в радиальные координаты, точку данных можно легко отделить.

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

Таким образом, SVM работает, находя плоскость, которая лучше всего разделяет точки из разных классов. Найдя эту плоскость, мы можем классифицировать неклассифицированную точку x и произвести ее скалярное произведение с вектором w, ортогональным плоскости. Следовательно, решающее правило:

Мы можем понимать b как длину w, а x.w — это проекция вектора x на w (рисунок выше), поэтому, когда он пересекает определенный порог, классификация изменится.

Так как же нам найти эту плоскость, которая лучше всего разделяет точки? Мы предполагаем, что точки на границах (назовем их x+ и x-) удалены от плоскости не менее чем на 1 единицу. Следовательно

Таким образом, чтобы свести к минимуму ширину граничной области, а также удовлетворить ограничениям, мы накладываем на обучающие точки y(w.x+b) ›1, мы определяем лагранжиан (можно просто думать об этом как о целевой функции) как:

Чтобы получить w, которые минимизируют лагранжиан, мы дифференцируем L по w

Получим теперь выражение для w. Напомним, ранее мы определили решающее правило для классификатора. Мы также можем записать это правило как решающую функцию, и, подставив выражение, которое мы только что получили для w, мы получим:

Мы видим, что решающая функция SVM зависит только от скалярного произведения входных данных. Следовательно, мы можем заменить скалярное произведение (это тип ядра, называемый линейным ядром) более общей функцией ядра k(x,x’).

Итак, теперь, когда у нас есть функция принятия решений для SVM, давайте посмотрим, как определить ядро ​​и почему они полезны. Помните, мы хотели разделить некоторые точки данных, но не могли сделать это прямой линией в этой системе координат? Мы можем сделать это, сначала преобразовав точки данных в радиальные координаты. Мы можем определить отображение Phi(x,y)=sqrt(x²+y²)=r. Тогда мы сможем найти b, четко разделяющие точки данных. В этом случае трансформация проста. Однако что, если преобразование включает в себя переход в более высокое измерение (а не в более низкое в данном случае)?

Предположим, нам нужно рассмотреть нелинейные эффекты более высокого порядка, такие как xy, x², y² в дополнение к x, y и некоторой константе. Это будет 6 измерений, но мы также можем представить его как Phi(x,y) — ›(x²,y²,xy,x,y,1). Фи(х,у)=(х.у+с)². Если мы применим классификатор, такой как SVM, к x², y², xy, x, y, 1, ему придется выполнить 6i операций, чтобы получить 1 признак 1 ', признак 2 х признак 2',…

Если вместо этого мы «обработаем ядро» функции принятия решения, мы поймем, что нам нужно применить только 1 функцию к 2 функциям x и y, следовательно, 2i операций.

Это значительно ускоряет вычисления при наличии большого количества измерений. Возможность подключить любое ядро ​​к решающей функции также чрезвычайно удобна и позволяет нам превращать линейные классификаторы в нелинейные классификаторы без необходимости оценивать отображение. Более формально

Некоторые общие функции ядра:

Надеюсь, краткое введение прояснило, что такое ядро ​​и почему оно полезно. Это очень простая концепция — прямое использование обучающих данных для вычисления окончательной формы решающей функции, как если бы она была преобразована в более высокое пространство без необходимости выполнять преобразование, — но чрезвычайно мощная. Классификаторы, которые можно кернелизовать, эффективны в вычислительном отношении и очень удобны. Теперь мы готовы свободно применять ядра для разделения всевозможных забавных данных в странных пространствах!