我使用以下代码为两类类(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现在,如何根据为每个特征提取的权重来进行特征选择?我该如何建立一个权重矩阵?
我看报纸,但概念还不清楚,请帮助!
发布于 2018-01-11 08:51:33
我很快就把这个答案删掉了,所以我希望会有很多其他人可以扩展的地方,但是作为一个开始.
有很多方法可以做到这一点,但是首先要解决的是将线性权重转换成每一个特征对分类有多重要的度量。这是一个相对简单的三步过程:
或者,您可以通过在不同的培训数据集上重复上述几次,从而生成更健壮的特征重要性度量,这些数据是通过随机重新采样原始培训数据来创建的。
现在您已经有了一种方法来确定每个特性对分类的重要性,您可以通过多种不同的方式使用这些方法来选择在最终模型中包含哪些特性。我将给出一个递归特征消除的例子,因为它是我的最爱之一,但您可能想研究迭代特征选择,或噪声扰动。
因此,要执行递归特性消除:
1当您将模型应用到验证集时,足够小的一组特征是由精度开始下降的点决定的。注意:在进行这类特性选择方法时,请确保不仅有单独的培训和测试集,而且还有用于选择要保留多少特性的验证集。
https://stackoverflow.com/questions/48150707
复制相似问题