首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何利用线性支持向量机权值进行特征选择

如何利用线性支持向量机权值进行特征选择
EN

Stack Overflow用户
提问于 2018-01-08 12:53:03
回答 1查看 1.6K关注 0票数 5

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

代码语言:javascript
复制
class1.svm.model <- svm(Class ~ ., data = training,cost=1,cross=10, metric="ROC",type="C-classification",kernel="linear",na.action=na.omit,probability = TRUE)

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

代码语言:javascript
复制
#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)

我获得每个特性的权重,如下面的示例所示:

代码语言:javascript
复制
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

现在,如何根据为每个特征提取的权重来进行特征选择?我该如何建立一个权重矩阵?

我看报纸,但概念还不清楚,请帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-11 08:51:33

我很快就把这个答案删掉了,所以我希望会有很多其他人可以扩展的地方,但是作为一个开始.

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

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

或者,您可以通过在不同的培训数据集上重复上述几次,从而生成更健壮的特征重要性度量,这些数据是通过随机重新采样原始培训数据来创建的。

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

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

  1. 首先训练一个完整的特征集的模型,然后计算它的特征重要性。
  2. 丢弃重要性最小的特征,并对其余特征进行再训练。
  3. 重复2,直到你有足够小的一组features1。

1当您将模型应用到验证集时,足够小的一组特征是由精度开始下降的点决定的。注意:在进行这类特性选择方法时,请确保不仅有单独的培训和测试集,而且还有用于选择要保留多少特性的验证集。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48150707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档