sp2*_*sp2 5 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)
Run Code Online (Sandbox Code Playgroud)
我使用以下代码提取训练集的权重:
#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)
Run Code Online (Sandbox Code Playgroud)
我得到每个功能的权重,如下例所示:
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
Run Code Online (Sandbox Code Playgroud)
现在,如何根据为每个要素提取的权重执行要素选择?我该如何建立一个权重矩阵?
我读过论文,但这个概念对我来说还不清楚,请帮忙!
我很快就放弃了这个答案,所以我预计其他人可以扩展很多要点,但作为让您开始的东西......
有很多方法可以做到这一点,但首先要解决的是将线性权重转换为每个特征对分类的重要性的度量。这是一个相对简单的三步过程:
或者,您可以通过对通过随机重新采样原始训练数据创建的不同训练数据集重复上述多次来生成更稳健的特征重要性度量。
现在您已经有了一种方法来确定每个特征对分类的重要性,您可以通过多种不同的方式使用它来选择要包含在最终模型中的特征。我将给出递归特征消除的示例,因为它是我最喜欢的示例之一,但您可能想研究迭代特征选择或噪声扰动。
因此,要执行递归特征消除:
[1] 其中足够小的特征集是由将模型应用于验证集时准确性开始受到影响的点确定的。注意:在执行这种特征选择方法时,请确保您不仅有单独的训练和测试集,还有一个验证集,用于选择要保留的特征数量。