我有一个分类问题(预测一个序列是否属于某个类别),为了帮助过滤掉假阳性,我决定使用多种分类方法。
(这个问题属于生物信息学领域 – 将蛋白质序列分类为神经肽前体序列。如果有人感兴趣,这是原始文章,以及用于生成特征和训练单一预测器的代码)。
现在,这些分类器在性能指标上大致相似(在训练集上进行10折交叉验证时,准确率/精确率等为83-94%),所以我的“简单”方法是使用多个分类器(随机森林、ExtraTrees、SVM(线性核)、SVM(RBF核)和GRB),并采用简单多数投票的方式。
我的问题是:如何获取不同分类器及其投票预测的性能指标?也就是说,我想看看使用多个分类器是否能提高我的性能,或者哪种组合效果更好。
我的直觉是可能使用ROC分数,但我不知道如何“组合”结果并从多个分类器的组合中获取它。(也就是说,查看每个分类器单独的ROC曲线[已知],然后查看使用分类器组合的训练数据的ROC曲线或AUC)。
(我目前使用随机森林和ExtraTrees方法的“预测概率”来过滤预测,然后任意过滤预测分数低于‘0.85’的结果。额外的过滤层是“有多少分类器同意这个蛋白质的阳性分类”。)
非常感谢!!
(使用多个分类器的网站实现 – http://neuropid.cs.huji.ac.il/)
整个系统是使用SciKit learn和Python实现的,包括引用等!)
回答:
要评估集成的性能,只需按照你通常的做法进行即可。然而,你需要先获取10折数据集划分,对于每一折,在同一折上训练你所有的集成,测量准确率,然后用其他折重复这一过程,最后计算集成的准确率。所以关键的区别是,在评估集成时,不要使用k折交叉验证来训练各个算法。重要的是不要让集成直接看到测试数据,或者让它的某个算法看到测试数据。
还要注意,随机森林和Extra Trees本身就是集成算法。
另一种方法(同样确保使用集成方法)是获取你的分类器输出的概率和/或标签,并将它们输入到另一个分类器中(比如决策树、随机森林、SVM或其他),该分类器通过结合这些其他分类器的最佳猜测来产生预测。这被称为“堆叠”