R语言调整支持向量机

说明

除了选择不同的特征集和核函数,还可以借助参数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时,算法最优。
当得到最佳参数值后,可以用他们在训练一个新的支持向量机,并基于模型的分类预测结果的样例集的实际类别生成分类表以及混淆矩阵。从混淆矩阵的输出结果可以得到新旧两个模型的正确差异。

你可能感兴趣的:(R语言调整支持向量机)