如何使用 LOOCV 找到比 R 中的完整集分类更好的子集

Posted

技术标签:

【中文标题】如何使用 LOOCV 找到比 R 中的完整集分类更好的子集【英文标题】:How to use LOOCV to find a subset that classifies better than full set in R 【发布时间】:2020-06-26 22:23:49 【问题描述】:

我正在处理 faraway 包中的 wbca 数据。采样恶性肿瘤的先验概率为 π0 = 1/3,采样良性肿瘤的先验概率为 π1 = 2/3。

我正在尝试将朴素贝叶斯分类器与多项式一起使用,以查看 9 个特征中是否有一个很好的子集,其分类效果优于使用 LOOCV 的完整集。

我什至不确定从哪里开始,所以任何 Rcode 帮助都会很棒。谢谢!

【问题讨论】:

【参考方案1】:

您可以尝试以下方法,您的预测变量的内核估计可能不是最准确的,但您可以从它开始:

library(faraway)
library(naivebayes)
library(caret)

x = wbca[,!grepl("Class",colnames(wbca))]
y = factor(wbca$Class)

ctrl <- rfeControl(functions = nbFuncs,
                   method = "LOOCV")

bayesProfile <- rfe(x, y,
                 sizes = subsets,
                 rfeControl = ctrl)

bayesProfile

Recursive feature selection

Outer resampling method: Leave-One-Out Cross-Validation 

Resampling performance over subset size:

 Variables Accuracy  Kappa Selected
         2   0.9501 0.8891         
         3   0.9648 0.9225         
         4   0.9648 0.9223         
         5   0.9677 0.9290         
         6   0.9750 0.9454        *
         7   0.9692 0.9322         
         8   0.9750 0.9455         
         9   0.9662 0.9255         

The top 5 variables (out of 6):
   USize, UShap, BNucl, Chrom, Epith

可以得到最优变量:

bayesProfile$optVariables
[1] "USize" "UShap" "BNucl" "Chrom" "Epith" "Thick"

【讨论】:

以上是关于如何使用 LOOCV 找到比 R 中的完整集分类更好的子集的主要内容,如果未能解决你的问题,请参考以下文章

如何生成混淆矩阵并找到朴素贝叶斯分类器的错误分类率?

如何使用 R 中经过训练的分类器预测新数据集?

R中的内存高效分类器,用于极宽且不太长的训练集

不平衡数据集的 Knn 分类器

如何按组进行汇总并使用R中的dplyr获取总体数据集的摘要

如何定义多类文本数据集(fastai)的日志计数比?