我正在尝试使用sklearn.svm.SVC构建一个分类器,但我想将内核分别训练在不同的特性子集上,以便更好地表示特征空间(如描述的这里)。
我读过“用户指南”( User Guide 页面 ),我知道我可以创建单个内核之和的内核,或者将预计算内核(kernel = 'precomputed')提供给SVC,但我不明白如何将不同的内核应用于不同的特性?有办法在sklearn中实现这一点吗?
我找到了一种计算sklearn内核(Process.html#gp-内核)的方法,因此我可以在每个集合上分别计算内核。然而,一旦输出距离矩阵,我就不知道如何使用它来训练支持向量机。
我是否必须创建一个自定义内核,如:
if feature == condition1:
use kernel X
else:
use kernel Y把它加到支持向量机上?
或者我还可以使用其他的python库吗?
发布于 2020-05-29 19:52:51
您指的是Multiple Kernel Learning (MKL)问题。在那里你可以为不同的特征组训练不同的内核。我在一个多模式的例子中使用了这种方法,我想要不同的内核来处理图像和文本。
我不确定你是否真的可以通过科学学习。
在GitHub上提供了一些库,例如:https://github.com/IvanoLauriola/MKLpy1
希望它能帮助你实现你的目标。
发布于 2020-07-02 15:35:01
在sklearn中多核学习是可能的。只需指定kernel='precomputed',然后将要使用的内核矩阵传递给fit。
假设您的核矩阵是另外两个核矩阵的和。您可以任意计算K1和K2,并使用SVC.fit(X=K1 + K2, y=y)。
https://stackoverflow.com/questions/62090144
复制相似问题