从随机森林的投票中创建“确定性分数”?

机器算法验证 r 机器学习 随机森林
2022-01-15 16:49:38

我正在寻找一个分类器,该分类器将通过大约 10,000 个对象的相当大的训练集来区分对象Type AType B对象,其中大约一半Type AType B. 该数据集由 100 个连续特征组成,详细描述了细胞的物理特性(大小、平均半径等)。在成对散点图和密度图中可视化数据告诉我们,在许多特征中,癌细胞和正常细胞的分布存在显着重叠。

我目前正在探索随机森林作为该数据集的分类方法,并且已经看到了一些不错的结果。使用 R,随机森林能够正确分类大约 90% 的对象。

我们想要尝试和做的一件事是创建一种“确定性分数”,它将量化我们对对象分类的信心。我们知道我们的分类器永远不会是 100% 准确的,即使实现了高精度的预测,我们也需要训练有素的技术人员来识别哪些对象是真实的Type AType B. Type A因此,我们不想提供对or的不折不扣的预测Type B,而是希望为每个对象提供一个分数,以描述一个对象是如何A或如何B的。例如,如果我们设计一个从 0 到 10 的分数,0 分可能表示一个对象与对象非常相似Type A,而 10 分表示一个对象非常相似Type B

我在想我可以使用随机森林中的投票来设计这样的分数。由于随机森林中的分类是通过生成树的森林中的多数投票来完成的,因此我假设被 100% 的树Type A投票的对象与被投票的对象不同,例如,51% 的树投票是Type A

目前,我已经尝试为一个对象必须获得的投票比例设置一个任意阈值才能被归类为Type AType B,如果没有通过该阈值,它将被归类为Uncertain例如,如果我强制要求 80% 或更多的树必须同意一个分类才能通过的决定,我发现 99% 的类预测是正确的,但大约 40% 的对象被分类为Uncertain.

那么,利用投票信息对预测的确定性进行评分是否有意义?还是我的想法走错了方向?

3个回答

这很有意义,并且我使用过的所有随机森林实现(例如 MATLAB)也提供了概率输出来做到这一点。

我没有使用 R 实现,但如果没有一种简单的方法可以从投票和硬决策中获得软输出,我会感到震惊。

编辑:只看一眼 R,predict.randomForest 也输出概率。

如果您使用 R,插入符号包将使您免于重新发明轮子。例如,以下代码使用交叉验证为随机森林模型选择调整参数,然后输出每个交叉验证折叠的准确率的均值和标准差。最后,它计算模型的类别概率。

library(caret)
library(PerformanceAnalytics)
data(iris)

#Make a yes/no dataset
Dataset <- iris
Dataset$Class <- ifelse(Dataset$Species=='versicolor','Yes','No')
Dataset$Class  <- as.factor(Dataset$Class)
Dataset$Species<- NULL
chart.Correlation(Dataset[-5], col= Dataset$Class)

#Fit an RF model
model <- train(Class~.,Dataset,
                method='rf',TuneLength=3,
                trControl=trainControl(
                    method='cv',number=10,
                    classProbs = TRUE))
model$results

#Predict class probabilities (i.e. 'certainty' scores)
pred <- predict(model,iris,"prob")
head(pred)

caret 的好处在于它可以很容易地比较不同的预测模型。例如,如果您想尝试 SVM,可以将文本替换为method='rf'ormethod='svmLinear'method='svmRadial'. 也可以通过在 trainControl 参数中添加一行来根据AUC而不是准确性来选择调整参数:summaryFunction=twoClassSummary

最后,PerformanceAnalytics 包中有一些代码,chart.Correlation(Dataset[-5], col= Dataset$Class)构建模型不需要这些代码,但可以很好地可视化您的数据集。

R 中的randomForest包是一个相当不错的包,用于深入了解您的分析。它为您提供投票(作为分数或原始计数),并提供内置的调整和交叉验证功能,甚至还可以为您提供有关您的功能的更多信息(如果您想知道 100 个中有哪些是分析中最重要的)。

如果您已经在使用该软件包,那么也许您想仔细查看一下,如果还没有,请检查一下。