【问题标题】:How to do feature selection using linear SVM weights [closed]如何使用线性 SVM 权重进行特征选择 [关闭]
【发布时间】:2018-06-17 10:56:54
【问题描述】:

我使用以下代码为两种类型(1 和 0)构建了 SVM 线性模型:

class1.svm.model <- svm(Class ~ ., data = training,cost=1,cross=10, metric="ROC",type="C-classification",kernel="linear",na.action=na.omit,probability = TRUE)

我已经使用以下代码提取了训练集的权重:

#extract the weights and constant from the SVM model:

w <- t(class1.svm.model$coefs) %*% class1.svm.model$SV;  
b <- -1 * class1.svm.model$rho; #(sometimes called w0)

我得到每个特征的权重,如下例所示:

X2  0.001710949
X3  -0.002717934
X4  -0.001118897
X5  0.009280056
X993    -0.000256577
X1118   0
X1452   0.004280963
X2673   0.002971335
X4013   -0.004369505

现在如何根据为每个特征提取的权重执行特征选择?如何构建权重矩阵?

我读过论文,但概念对我来说还不是很清楚,请帮助!

【问题讨论】:

  • 您可以选择最大权重的特征并在这些特征上再次运行模型。我不确定它会如何工作。我建议您使用相关性、pca 等技术。在 python 算法中,如随机森林具有属性 特征重要性。我不确定它是否在 R 中可用。
  • 是的,我同意我需要选择最大重量来构建模型,但想知道选择最大重量来构建模型的临界值是多少
  • 没有这样的硬引用值。你所能做的就是把所有的特征都拿走,然后把它们一一删除,而不是重要的特征。并停止在您获得最大准确度的地方(或任何您的绩效衡量标准)。
  • 谢谢 :) 但我有一些权重是负数,有些权重是正数,这是否意味着我应该只考虑积极的权重?

标签: r svm feature-selection


【解决方案1】:

我很快就完成了这个答案,所以我希望其他人可以扩展很多点,但作为让你开始的东西......

有多种方法可以做到这一点,但首先要解决的是将线性权重转换为衡量每个特征对分类的重要性的度量。这是一个相对简单的三步过程:

  1. 对输入数据进行标准化,使每个特征的均值 = 0,标准差 = 1。
  2. 训练你的模型
  3. 取权重的绝对值。也就是说,如果权重为-0.57,则取0.57。

您可以选择通过对您通过随机重新采样原始训练数据创建的不同训练数据集重复上述几次来生成更可靠的特征重要性度量。

既然您有一种方法可以确定每个特征对分类的重要性,您可以通过多种不同的方式使用它来选择要包含在最终模型中的特征。我将举一个递归特征消除的例子,因为它是我的最爱之一,但您可能想研究迭代特征选择或噪声扰动。

所以,要执行递归特征消除:

  1. 首先在整个特征集上训练一个模型,然后计算它的特征重要性。
  2. 丢弃重要性值最小的特征,并在剩余特征上重新训练模型
  3. 重复 2 直到拥有足够少的特征集[1]。

[1] 当您将模型应用于验证集时,足够小的特征集取决于准确度开始下降的点。请注意:在进行这种特征选择方法时,请确保您不仅有单独的训练和测试集,而且还有用于选择要保留多少特征的验证集。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-11
    • 2012-06-19
    • 2015-10-10
    • 2015-01-27
    • 2020-06-19
    • 2014-11-15
    • 1970-01-01
    • 2016-01-24
    相关资源
    最近更新 更多