【发布时间】:2019-12-05 11:05:26
【问题描述】:
这是我的问题:
我有一个关于液压系统状况的中等大小的数据集。
数据集由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 线性分类器来预测系统的行为。
正如我在开始使用 RANDOM VALUE FOR C 之前所说的那样。
我如何决定用于分析的最佳价值?
对不起,如果问题是平庸的,但我是初学者!
答案会很有帮助!
谢谢
【问题讨论】:
-
您使用的是哪个软件包?如果您查看实现文档,它将为您提供使用的默认值。我认为大多数实现中的默认成本值是 1。您可以将所有其他参数固定使用 C 的小于和大于 1 的值,看看哪个方向可以改善结果。基本上这是 gridSearch 的本质
-
我正在使用插入符号!因此,您建议尝试为 C.. 尝试使用小于 1 的值,看看在准确性和错误分类方面我得到了什么样的差异/改进......??另一个重要的问题是……我应该每次都从“view()”和“confusionMatrix()”检查 C 的结果吗?谢谢
-
其实训练好的模型会告诉你各种参数的准确度分数。只需在控制台上输入
svmLinear。第一部分,使用tunegrid=data.frame(C=c(0.5, 1,1.5))。 -
我保持 tuneGrid=data.frame(C=seq(0.1,1,0.1) 作为建议的暗示计算中的一些错误(我刚刚尝试过!)。如果我输入svmLinear 在控制台上我可以看到结果,最好的一个是 C = 0.2 和 Accuracy = 0.91。我是否应该检查结果以使用混淆矩阵进行训练和测试,或者控制台上的 svmLinear 输入是否详尽......?一旦我已经这样做了,我可以试试 tuneGrid=data.frame(C=seq(1,10,1) 你觉得怎么样?
-
不,你不必用混淆矩阵来分析它。所有这些都已通过由
tuneControlparameters 管理的 k 折交叉验证过程完成。实际上,我们根本不需要testing部分,除非我们想创建许多其他模型(如svmRadialWeights)并将这些模型的性能相互比较。