我正在尝试使用 sklearn.svm.SVC
构建一个分类器,但我希望在不同的特征子集上分别训练内核,以更好地表示特征空间(如此处所述)。
我已经阅读了用户指南的页面,我了解到我可以创建由单个内核相加的内核,或者向SVC提供预计算的内核(kernel = 'precomputed'
),但我不明白如何将不同的内核应用于不同的特征?在sklearn
中有没有办法实现这个?
我已经找到了一种在sklearn中计算内核的方法(https://scikit-learn.org/stable/modules/gaussian_process.html#gp-kernels),所以我可以分别计算每个集合上的内核。然而,一旦我输出距离矩阵,我不确定如何使用它来训练SVM。
我是否需要创建一个自定义内核,如下所示:
if feature == condition1: use kernel Xelse: use kernel Y
并将其添加到SVM中?
或者是否有其他Python库可以用于此目的?
回答:
你提到的这个问题属于多内核学习(MKL)
。你可以为不同的特征组训练不同的内核。我在一个多模态案例中使用过这种方法,那时我希望为图像和文本使用不同的内核。
我不确定你是否真的可以通过scikit-learn来实现这一点。
GitHub上提供了一些库,例如这个:https://github.com/IvanoLauriola/MKLpy1
希望它能帮助你实现你的目标。