【问题标题】:Different kernels for different features - scikit-learn SVM不同特征的不同内核 - scikit-learn SVM
【发布时间】:2020-09-17 06:29:02
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    你指的是Multiple Kernel Learning (MKL)的问题。您可以在其中为不同的功能组训练不同的内核。我在一个多模式案例中使用了它,我想要不同的图像和文本内核。

    我不确定你是否真的可以通过 scikit-learn 做到这一点。

    GitHub上提供了一些库,比如这个:https://github.com/IvanoLauriola/MKLpy1

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

    【讨论】:

      【解决方案2】:

      sklearn 中可以进行多核学习。只需指定kernel='precomputed',然后将要使用的内核矩阵传递给fit

      假设您的核矩阵是其他两个核矩阵的总和。你可以计算K1K2,但是你喜欢并使用SVC.fit(X=K1 + K2, y=y)

      【讨论】:

      • 据我了解,这个实现的问题是你无法了解每个内核的权重,而 @alift 建议的包允许你这样做
      • 调整内核权重是什么意思?您是否在考虑 K1K2 的凸组合?或者K1K2的超参数,比如RBF的长度尺度参数或者多项式次数?
      • 是的,我希望使用某种弱内核的组合,而不是为我的每个功能集找到最佳视图。他们在本文的介绍中解释了这个想法:sciencedirect.com/science/article/pii/S0925231215003653
      • 这一切都很好,但是您的问题中没有这些细节。这使得很难写出有用的答案。
      • 这些是我提出问题后的想法和信息,也感谢上面alift的回答,这就是为什么它不在原始问题中。如果您认为它对其他用户更有用,我现在可以更新问题
      猜你喜欢
      • 2017-05-02
      • 2016-01-24
      • 2014-07-10
      • 2019-10-20
      • 2014-03-15
      • 1970-01-01
      • 2012-06-19
      • 2015-10-14
      • 2016-02-25
      相关资源
      最近更新 更多