不同功能的不同内核 - scikit-learn SVM



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

我已经阅读了用户指南页面,我明白我可以创建作为单个内核之和的内核,或者将预先计算的内核 (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)

最新更新