不同特征的不同内核 - scikit-learn SVM

Different kernels for different features - scikit-learn SVM

我正在尝试使用 sklearn.svm.SVC 构建分类器,但我想在不同的特征子集上分别训练内核以更好地表示特征 space(如所述 here ).

我已阅读用户指南 page 并且我知道我可以创建由单个内核总和组成的内核或将预先计算的内核 (kernel = 'precomputed') 输入 SVC,但我不会了解我如何将不同的内核应用于不同的功能?有没有办法在 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 库可供我使用?

您指的是Multiple Kernel Learning (MKL)的问题。您可以在其中为不同的功能组训练不同的内核。我在多模态案例中使用了它,我想要图像和文本的不同内核。

我不确定您是否真的可以通过 scikit-learn 做到这一点。

GitHub 上提供了一些库,例如这个:https://github.com/IvanoLauriola/MKLpy1

希望它能帮助您实现目标。

sklearn 中可以进行多核学习。只需指定 kernel='precomputed' 然后将要使用的内核矩阵传递给 fit.

假设您的内核矩阵是另外两个内核矩阵的总和。您可以根据自己的喜好计算 K1K2 并使用 SVC.fit(X=K1 + K2, y=y).