Разные ядра для разных функций - scikit-learn SVM - PullRequest
3 голосов
/ 29 мая 2020

Я пытаюсь создать классификатор, используя sklearn.svm.SVC, но я хотел бы обучить ядро ​​отдельно для разных подмножеств функций, чтобы лучше представить пространство функций (как описано здесь ).

Я прочитал Руководство пользователя page и понимаю, что могу создавать ядра, которые представляют собой суммы отдельных ядер, или передавать в SV C предварительно вычисленное ядро ​​(kernel = 'precomputed'), но я не понимаю, как применять разные ядра к разным функциям? Есть ли способ реализовать это в sklearn?

Я нашел способ вычислить ядра в sklearn (https://scikit-learn.org/stable/modules/gaussian_process.html#gp -kernels ), и поэтому я мог рассчитать ядро ​​для каждого набора отдельно. Однако, как только я выведу матрицу расстояний, я не уверен, как использовать ее для обучения SVM.

Нужно ли мне создавать собственное ядро, например:

if feature == condition1:
   use kernel X
else:
   use kernel Y

и добавлять это в SVM?

Или есть какие-нибудь другие python библиотеки, которые я мог бы использовать для этого?

Ответы [ 2 ]

0 голосов
/ 02 июля 2020

В sklearn возможно обучение нескольких ядер. Просто укажите kernel='precomputed', а затем передайте матрицу ядра, которую вы хотите использовать, в fit.

Предположим, ваша матрица ядра является суммой двух других матриц ядра. Вы можете вычислять K1 и K2 как хотите и использовать SVC.fit(X=K1 + K2, y=y).

0 голосов
/ 29 мая 2020

Вы имеете в виду проблему Multiple Kernel Learning (MKL). Где вы можете обучать разные ядра для разных групп функций. Я использовал это в мультимодальном случае, когда мне нужны были разные ядра для изображения и текста.

Я не уверен, что вы действительно можете сделать это с помощью scikit-learn.

На GitHub есть несколько библиотек, например, эта: https://github.com/IvanoLauriola/MKLpy 1

Надеюсь, это поможет вам достичь ваша цель.

...