我正在尝试使用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库吗?
答案 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
。