Я начинаю использовать dlib, и мне трудно понять, как реализованы ядра. Я начал с алгоритма k-kmeans, так как знаю этот метод кластеризации. Однако я не могу понять, где ядро вычисляется. Входные данные представляют собой матрицу (не ядро), и алгоритм никогда не преобразует данные в ядро.
Я ожидал бы класс ядра, возвращающий квадратную матрицу. Но я не видел ничего подобного!
Я хочу использовать dlib для реализации алгоритма кластеризации с использованием ядер, и dlib кажется хорошим решением для этого. У кого-нибудь есть документация о том, как это реализовано, или можете объяснить мне, как это работает?
Спасибо за вашу помощь!
Ядро — это просто функция, которая берет две входные выборки и выводит одно число. Так что да, иногда вы увидите код, который затем вычисляет матрицу N на N всех возможных выходных данных функции ядра для N выборок. Тем не менее, это несколько наивная стратегия реализации, поскольку она требует О (N ^ 2) ОЗУ. Так что большинство реальных программных методов для ядра используют какую-то стратегию отложенного анализа или кэширования, чтобы избежать этой проблемы.
В реализации ядра K-means в dlib это делается с помощью kcentroid объект. Внутри kcentroid вы можете видеть, что он запускает функцию ядра в нескольких местах и выполняет все «функции ядра». Вы можете прочитать документацию для kcentroid, чтобы понять, что он делает. Хотя, если вы только начинаете работать с методами ядра, вам действительно нужно получить книгу на эту тему. Я настоятельно рекомендую выбрать один из них:
Для набора из N точек данных ядро обычно задается матрицей NxN, чья (i, j) -я запись дает значение ядра между точкой данных i и точкой данных j. Это работает для методов ядра, пока матрица симметрична и положительно определена, что гарантированно верно для истинного ядра.