线性 SVM 的设置 C

Setting C for Linear SVM

这是我的问题:

我有一个关于液压系统状况的中型数据集。

数据集由68个变量加上系统条件(绿色,黄色,红色)表示

我必须使用多个分类器来预测系统的行为,所以我将我的数据集分为训练集和测试集,如下所示:

(说说条件,颜色代表:红色-警告,黄色-注意,绿色-良好)

这是我写的

Tab$Condition=factor(Tab$Condition, labels=c("Yellow","Green","Red")) 

set.seed(32343)

reg_Control = trainControl("repeatedcv", number = 5, repeats=5, verboseIter = T, classProbs =T)

inTrain = createDataPartition(y=Tab$Condition,p=0.75, list=FALSE)

training = Tab[inTrain,]

testing = Tab[-inTrain,]

我正在使用 SVM 线性分类器来预测系统的行为。

我开始使用 C 的随机值来查看我应该得到什么样的结果。



svmLinear = train(Condition ~.,data=training, method="svmLinear", trControl=reg_Control,tuneGrid=data.frame(C=seq(0.1,1,0.1))) 

svmLPredictions = predict(svmLinear,newdata=training)


confusionMatrix(svmLPredictions,training$Condition) 



#misclassification of 129/1655 accuracy of 92.21%


svmLPred = predict(svmLinear,newdata=testing) 


confusionMatrix(svmLPred,testing$Condition)


#misclassification of 41/550 accuracy of 92.55%


我使用 SVM 线性分类器来预测系统的行为。

正如我在开始使用 C 的随机值之前所说的那样

然后我如何决定用于分析的最佳值?

抱歉,如果问题很老套,但我是初学者!

回答会很有帮助!

谢谢

Caret 调用其他包以 运行 实际建模过程。在这方面,Caret 本身只是一个(非常强大的)便利包。但是,它会自动执行此操作,因此除非抛出错误,否则用户可能不会轻易意识到这一点 不管怎样,我已经拼凑了一个例子来解释这个过程。

library(caret)
data("iris")

set.seed(1024)

tr <- createDataPartition(iris$Species,  list = FALSE)
training <- iris[ tr,]
testing  <- iris[-tr,]

#head(training)
fitControl <- trainControl(##smaller values for quick run
  method = "repeatedcv",
  number = 5,
  repeats = 4)

set.seed(1024)

tunegrid=data.frame(C=c(0.25, 0.5, 1,5,8,12,100))
tunegrid

svmfit <- train(Species ~ ., data = training, 
                method = "svmLinear", 
                trControl = fitControl,
                tuneGrid= tunegrid) 

#print this, it will give model's  accuracy (on train data) given various 
# parameter values
svmfit

#C       Accuracy   Kappa
#0.25    0.9533333  0.930
#0.50    0.9666667  0.950
#1.00    0.9766667  0.965
#5.00    0.9800000  0.970
#8.00    0.9833333  0.975
#12.00   0.9833333  0.975
#100.00  0.9400000  0.910 
#The final value used for the model was C = 8.  

# it has already chosen the best model (as per train Accuracy )
# how well does it work on test data?
preds <-predict(svmfit, testing)
cmSVM <-confusionMatrix(preds, testing$Species)
print(cmSVM)