如何在R中获取SVM模型的系数和p值

Cem*_*yuz 5 r svm r-caret

我想知道是否有办法从e1071包中获取 svmLinear 方法中的所有系数和 p 值。我尝试过summary(modelname),但没有成功。下面是我的 svm 模型的 10 倍交叉验证代码:

library("e1071")
library("caret")
load(df) ## my dataset
ctrl <- trainControl(method = "repeatedcv", number = 10, savePredictions = TRUE) ## 10 fold cross validation
fitsvm <- train(Attrition ~., data=df, method = "svmLinear", trControl = ctrl) ##train model

summary (fitsvm)

Length  Class   Mode 
 1      ksvm     S4 
Run Code Online (Sandbox Code Playgroud)

我可以用 glm - 逻辑回归得到它们:

fit <- train(Attrition ~., data= df, method="glm", family="binomial", trControl= tc)
summary(fit)

                          Estimate   Std. Error  z value  Pr(>|z|)    
(Intercept)               3.424e+00  1.254e+00   2.731    0.006318 ** 
Run Code Online (Sandbox Code Playgroud)

如果有人能给我指一条路,我会很高兴,非常感谢!

Dav*_*eli 2

SVM 不假设概率模型,因此不存在标准误差或 p。价值观。

不过,您可以获得系数。在e1071包中,alpha*y存储在 中fit$coefs,支持向量存储在 中fit$SV。你必须小心如何提取它们。如果您只有二元分类,则分离平面的系数b+w1*x1+w2*x2+...=0很简单:

w = t(fit$SV) %*% fit$coefs
b = -fit$rho
Run Code Online (Sandbox Code Playgroud)

如果您只有二维特征,您可以使用以下方法绘制分隔线:

abline(-b/w[2], -w[1]/w[2])
Run Code Online (Sandbox Code Playgroud)

对于多类别来说有点棘手。您可以在此处查看我的答案,了解如何从 coefs 和 SV 中提取w和 的详细说明。b