在 sklearn 或任何 python 库中确定对非线性 SVM 回归贡献最大的特征
Posted
技术标签:
【中文标题】在 sklearn 或任何 python 库中确定对非线性 SVM 回归贡献最大的特征【英文标题】:Determining the most contributing features for non -linear SVM regression in sklearn or any python library 【发布时间】:2020-03-14 12:09:12 【问题描述】:我使用基于 RBF 内核的支持向量机回归训练了一个模型。我想知道对于基于 RBF 内核的支持向量机来说非常重要或主要贡献特性的特性。我知道有一种方法可以根据权重向量(向量的大小)来了解线性支持向量回归的最有贡献的特征。然而,对于基于 RBF 内核的支持向量机,由于特征被转换到一个新的空间,我不知道如何提取最有贡献的特征。我在 python 中使用 scikit-learn。有没有办法在基于 RBF 核的支持向量回归或非线性支持向量回归中提取贡献最大的特征?
from sklearn import svm
svm = svm.SVC(gamma=0.001, C=100., kernel = 'linear')
在这种情况下: Determining the most contributing features for SVM classifier in sklearn 效果很好。但是,如果内核更改为
from sklearn import svm
svm = svm.SVC(gamma=0.001, C=100., kernel = 'rbf')
上面的答案不起作用。
【问题讨论】:
这能回答你的问题吗? Determining the most contributing features for SVM classifier in sklearn 感谢您的建议。这不能回答我的问题。 from sklearn import svm svm = svm.SVC(gamma=0.001, C=100., kernel = 'rbf') 这种情况下,特征重要性不起作用。 How to obtain features' weights的可能重复 这给了你一个它不起作用的原因:***.com/questions/21260691/… 您可以删除一些特征并衡量对准确性的影响,这可能会提示您特征的重要性。 【参考方案1】:让我对 cmets 进行排序作为答案:
如你所见here:
分配给特征的权重(原始系数 问题)。这仅在线性内核的情况下可用。
但它也没有任何意义。在线性 SVM 中,生成的分离平面与您的输入特征在同一空间中。因此,它的系数可以看作是输入“维度”的权重。
在其他内核中,分离平面存在于另一个空间中 - 这是原始空间的内核变换的结果。它的系数与输入空间没有直接关系。事实上,对于 rbf 核,变换后的空间是无限维的。
正如 cmets 中提到的,您可以做的事情:
玩转特征(省略一些),看看准确性会如何变化,这会让您了解哪些特征很重要。
如果您使用其他分类器作为随机森林,您将获得其他算法的特征重要性。但这不会回答您的问题,这对您的 svm 很重要。所以这不一定能回答你的问题。
【讨论】:
【参考方案2】:关于非线性 SVM 模型的检查(例如,使用 RBF 内核),我在这里分享一个发布在另一个线程中的答案,可能对此有用。
该方法基于“sklearn.inspection.permutation_importance”。
在这里,关于"permutation_importance" applied on SVM models 的意义的压缩讨论。
【讨论】:
以上是关于在 sklearn 或任何 python 库中确定对非线性 SVM 回归贡献最大的特征的主要内容,如果未能解决你的问题,请参考以下文章