R 如何使用线性SVM权重进行特征选择

R 如何使用线性SVM权重进行特征选择,r,svm,feature-selection,R,Svm,Feature Selection,我使用以下代码为两种类型的类(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

我使用以下代码为两种类型的类(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)
现在,如何根据为每个特征提取的权重执行特征选择?如何建立权重矩阵


我读过一些文章,但是我还不清楚这个概念,请帮助我

我很快就给出了这个答案,所以我希望会有很多其他人可以进一步阐述的地方,但作为让你开始的东西

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

  • 对输入数据进行归一化处理,使每个特征的平均值为0,标准偏差为1
  • 训练你的模特
  • 取权重的绝对值。也就是说,如果重量为-0.57,则取0.57
  • 或者,您可以对通过随机重新采样原始训练数据而创建的不同训练数据集重复上述几次,从而生成更可靠的特征重要性度量

    现在,您已经有了确定每个特征对分类的重要性的方法,您可以通过多种不同的方式来选择要包含在最终模型中的特征。我将给出一个递归特征消除的例子,因为它是我最喜欢的方法之一,但您可能希望研究迭代特征选择或噪声扰动

    因此,要执行递归特征消除:

  • 首先在整个特征集上训练模型,并计算其特征重要性
  • 丢弃重要性值最小的特征,并在剩余特征上重新训练模型
  • 重复2次,直到您拥有足够小的功能集[1]

  • [1] 当您将模型应用于验证集时,足够小的特征集由精度开始下降的点决定。注意:在进行此类特征选择时,请确保您不仅有单独的培训和测试集,而且还有一个验证集,用于选择要保留的特征数量。

    您可以选择权重最大的特征,然后在这些特征上再次运行模型。但我不确定它将如何运作。我建议您使用相关、pca等技术。在python算法中,随机林具有属性特征重要性。我不确定在R中是否可用。是的,我同意我需要选择最大权重来构建模型,但我想知道选择最大权重来构建模型的截止点是什么。没有这样的硬引用值。您所能做的就是获取所有功能并逐个删除它们,而这些功能的重要性较低。停止你获得最大精确度的地方(或者是你的性能指标)。谢谢:但是我有一些负值和一些正面的权重,这是否意味着我应该只考虑正面的一个?
    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