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

时间:2020-05-29 16:05:04

标签: python-3.x machine-learning scikit-learn svm

我正在尝试使用sklearn.svm.SVC构建分类器,但是我想分别针对特征的不同子集训练内核,以更好地表示特征空间(如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库吗?

2 个答案:

答案 0 :(得分:0)

您指的是Multiple Kernel Learning (MKL)的问题。您可以在其中为不同的功能组训练不同的内核。我在多模式情况下使用了此方法,在这种情况下,我需要用于图像和文本的不同内核。

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

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

希望它可以帮助您实现目标。

答案 1 :(得分:0)

[ { "company": "google", "status": "active", "offer": { "job": "developer", "salary": 10000.00 }, }, { "company": "google", "status": "active", "offer": { "job": "designer", "salary": 500000.00 }, }, { "company": "amazon", "status": "inactive", "offer": { "job": "designer", "salary": 500000.00 }, } ] 中可以进行多次内核学习。只需指定[ { "company" : "google", "report" : [{ "status" : "active", "totalSalary" : 60000 }, { "status" : "inactive", "totalSalary" : 0 }] }, { "company" : "amazon", "report" : [{ "status" : "active", "totalSalary" : 0 }, { "status" : "inactive", "totalSalary" : 500000.00 }] } ] ,然后将您要使用的内核矩阵传递给sklearn

假设您的内核矩阵是其他两个内核矩阵的总和。您可以根据自己的喜好计算kernel='precomputed'fit,并使用K1