Мне нужно предварительно вычислить матрицы ядра пересечения гистограммы для использования LIBSVM в MATLAB.Как векторизовать функцию ядра пересечения в MATLAB?
Предположим, что x, y - два вектора. Ядро-функция K (x, y) = sum (min (x, y)). Чтобы быть эффективными, в большинстве случаев наилучшей практикой является векторизация операций.
Я хочу сделать так, чтобы вычислить матрицы ядра, такие как вычисление евклидова расстояния между двумя матрицами, например pdist2 (A, B, 'euclidean'). После определения функции «intKernel» я смог вычислить ядро пересечения, вызвав pdist2 (A, B, intKernel).
Я знаю, что функция 'pdist2' может быть вариантом. Но я не знаю, как написать самоопределяемую функцию расстояния. Хотя я не знаю, как закодировать ядро пересечения между вектором (1-by-M) и матрицей (M-by-N) в одном конденсированном выражении.
«repmat» может быть невыполнимым, потому что матрица действительно большая, скажем, 20000 на 360000.
Любая помощь будет оценена по достоинству.
С уважением, Peiyun
Я пробовал это выражение раньше, в то время как это вызовет ошибку для несоразмерного несоответствия размеров подзаголовков. Например, a = rand (1, 10); b = rand (10, 10); pdist2 (a, b, @ (x, Y) sum (bsxfun (@min, x, Y), 1)); – Peiyun
Я понял. Расстояние_квадрат должно быть: distance_kernel = @ (x, Y) sum (bsxfun (@min, x, Y), 2), и оно будет суммировать по столбцам. – Peiyun
@Peiyun Да, вы правы, я редактирую свой ответ. – Bentoy13