在我的问题中,第一步是建立一个模型,将案例划分为真或假(显然也可以使用1或0)。一旦找到了最优模型,第二步是检索这些预测的概率,并使用这些概率计算出最优阈值(基于精度度量),以便随后对我的数据进行分类。
因此,我知道对于第二步,我需要使用分类精度度量,例如f1评分,以求出最佳阈值,然而,我正在讨论第一步的最佳方法。我最初的想法是做一个两级分类模型。我使用的模型是在R中实现的径向支持向量机( Radial )--我的问题是使用caret
,在使用classProbs=T
(完整代码)找到最优模型后,如何得到预测的分数。我不知道这是否理想,因为我在某个地方读到(现在找不到链接,对不起!),为了做到这一点,caret
实际上运行了第二个模型,这对我来说似乎不是一个好主意。有关这方面的唯一信息似乎是包文档
classProbs是逻辑的;是否应该为每个重采样中的分类模型(以及预测值)计算类概率?
我还寻找了另一种使用插入符号获取预测值的方法,但没有取得成功。
我的另一个想法是对第一步使用回归模型,使用0和1作为唯一的y值,然后可能实现一个自定义错误函数,允许0和1之外的预测值。我在这里的想法是,如果预测值高于1,实际值为1,我不一定要对模型进行惩罚。
我不知道哪种方法更好,或者如果有第三种方法我没有想到,任何帮助/建议都会很棒!我认为第一种方法可能更好,如果不使用单独的模型来计算类的概率,那么如果有人找到了关于这个设置所发生的事情的进一步文档,那也是很棒的!
svm_tests <- train(x = x_train,
y = y_train,
method = "svmRadial",
scale=F,
tuneGrid = expand.grid("C"=0.1,"sigma"= 0.05),
trControl = trainControl("repeatedcv", #Do 5 fold cv, repeated 5 times with different seeds
repeats = 5,
number = 5,
seeds = seeds,
summaryFunction = m.c.c,
classProbs=T, #Used to get probabilities when using predict
))
scores_svm <- predict(svm_tests,
x_valid,
type = "prob")
发布于 2020-05-12 15:18:52
这是一个分类问题,而不是回归问题,所以你的第一直觉是正确的。对于大多数模型,您可以很容易地得到每个预测的概率估计。如果你做了基于树的方法或线性模型,你将很容易有概率。然而,由于支持向量机的工作方式,它不会自动输出概率估计。卡雷特必须做一些额外的计算才能得到你的概率,这是有道理的。
有关细节,请参见:https://stats.stackexchange.com/questions/335527/what-are-the-predicted-probabilities-from-an-svm
https://datascience.stackexchange.com/questions/73910
复制