线性 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)
这是我的问题:
我有一个关于液压系统状况的中型数据集。
数据集由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)