R语言调整支持向量机

xiaoxiao2021-02-27  144

说明

除了选择不同的特征集和核函数,还可以借助参数gamma以及惩罚因子来调整支持向量机的性能,可以写一个for函数来实现。SVM提供了tune.svm函数简化了这个过程。

操作

准备好训练数据集trainset 使用tune.svm调整支持向量机

tuned = tune.svm(churn ~ .,data = trainset,gamma = 10^(-6:-1),cost = 10^(1:2)) summary(tuned) Parameter tuning of ‘svm’: - sampling method: 10-fold cross validation - best parameters: gamma cost 0.01 100 - best performance: 0.08334453 - Detailed performance results: gamma cost error dispersion 1 1e-06 10 0.14771421 0.02166249 2 1e-05 10 0.14771421 0.02166249 3 1e-04 10 0.14771421 0.02166249 4 1e-03 10 0.14771421 0.02166249 5 1e-02 10 0.09328258 0.02145332 6 1e-01 10 0.09327885 0.01886539 7 1e-06 100 0.14771421 0.02166249 8 1e-05 100 0.14771421 0.02166249 9 1e-04 100 0.14771421 0.02166249 10 1e-03 100 0.11660882 0.02216171 11 1e-02 100 0.08334453 0.01773662 12 1e-01 100 0.12221787 0.03089361

使用turning函数得到最佳参数设置支持向量机

model.tuned = svm(churn ~ .,data = trainset,gamma = tuned$best.parameters$gamma,cost = tuned$best.parameters$cost) > summary(model.tuned) Call: svm(formula = churn ~ ., data = trainset, gamma = tuned$best.parameters$gamma, cost = tuned$best.parameters$cost) Parameters: SVM-Type: C-classification SVM-Kernel: radial cost: 100 gamma: 0.01 Number of Support Vectors: 547 ( 304 243 ) Number of Classes: 2 Levels: yes no

调用predict函数基于刚配置好的SVM模型进行类标号的预测:

svm.tuned.pred = predict(model.tuned,testset[,!names(testset) %in% c("churn")]) svm.tuned.table = table(svm.tuned.pred,testset$churn) svm.tuned.table svm.tuned.pred yes no yes 95 24 no 46 853

调用classAgreement函数得到相关系数完成算法性能评测:

classAgreement(svm.tuned.table) $diag [1] 0.9312377 $kappa [1] 0.691678 $rand [1] 0.871806 $crand [1] 0.6303615

最后,调用confusionMatrix评价系统模型

confusionMatrix(svm.tuned.table) Confusion Matrix and Statistics svm.tuned.pred yes no yes 95 24 no 46 853 Accuracy : 0.9312 95% CI : (0.9139, 0.946) No Information Rate : 0.8615 P-Value [Acc > NIR] : 1.56e-12 Kappa : 0.6917 Mcnemar's Test P-Value : 0.01207 Sensitivity : 0.67376 Specificity : 0.97263 Pos Pred Value : 0.79832 Neg Pred Value : 0.94883 Prevalence : 0.13851 Detection Rate : 0.09332 Detection Prevalence : 0.11690 Balanced Accuracy : 0.82320 'Positive' Class : yes

原理

调整支持向量机可以采用试错法来寻找最佳的gamma和惩罚因子,用户需要采用不同的参数组合以训练出不同的支持向量机。svm.tune函数使用了12组不同的参数组合,函数采用10遍交叉检验的方法获得每次组合的错误偏差,最后选择误差最低的最优参数组合,从summary表可以知道,gamma等于0.01和惩罚因子的100时,算法最优。 当得到最佳参数值后,可以用他们在训练一个新的支持向量机,并基于模型的分类预测结果的样例集的实际类别生成分类表以及混淆矩阵。从混淆矩阵的输出结果可以得到新旧两个模型的正确差异。

转载请注明原文地址: https://www.6miu.com/read-12739.html

最新回复(0)