0

我正在尝试编写一个函数,该函数从汇总表中不同数据集的几种分类算法中生成输出。我正在使用该caret软件包。

我将尝试浏览到目前为止我拥有的不同代码位:

library(foreign)  ## Get a concacated list of files is working directry
f<-c(dir())

##  create and view an object with file names and full paths
file<-file.path("C:/Users/Documents/Datasets",c (f))

# use a loop to read all of these files from my working directry
dlist<-lapply(file,read.table,header=TRUE,sep="\t")
lapply(d, names)

所以dlist包含我的一组训练和测试数据集。我已经拆分了我的数据;例如,文件名为pca.test, pca.train, svm.test, svm.train, rf.train, rf.test. 刚刚意识到其中的文件dlist也已经是 R 中的 data.frames,即我首先在 R 中创建它们,然后将它们保存为制表符分隔的文件(冗余!)。

对于每对数据集(例如 pca.test 和 pca.train),我想执行不同的分类和预测方法:

library(caret)
set.seed(100)

# Classification method 1, Naive baiyes
model_pca.NB = train(pca.train[,-5],pca.train[,5],'nb',   trControl=trainControl(method='cv',number=5))

pca.nb.pred<-predict(model_pca.NB, pca.test[,-5])
nb.conf<-confusionMatrix(pca.nb.pred,pca.test[,5])

# Classification method 2, LDA
set.seed(100)
ctrl <- trainControl( repeats = 5, method='cv', number = 5,
                  allowParallel = FALSE)

model.pca.LDA <- train(Species~., data= pca.train,
             method = "lda", trControl = ctrl)

pred.anova.LDA<-predict(model.pca.LDA, pca.test[,-5])
lda.conf<-confusionMatrix(pred.anova.LDA,pca.test[,5])

# Classification method 3, ANN
set.seed(100)
mlpcontrol<-trainControl(method='cv',
                       number =2, repeats=2, returnResamp = 'none')

model.pca.ann<-train(Species~., data=pca.train, method='mlp',
  tuneGrid = data.frame(.size = c(10,20,30,40,50,60,70,80,90,100)),
  allowParallel = TRUE, trControl=mlpcontrol)

pred.pca.ann<-predict(model.pca.ann, pca.test[,-5])
ann.conf<-confusionMatrix(pred.pca.ann,pca.test[,5])

对于可重现的示例,将使用iris数据集;训练和测试:

pca.train<-iris;  pca.test<-iris

通过使用 lda.conf$byClass,我可以访问表列表

> lda.conf$byClass
 Sensitivity Specificity Pos Pred Value Neg Pred Value Prevalence       Detection Rate   Detection Prevalence
Class: setosa            1.00        1.00      1.0000000       1.000000  0.3333333        0.3333333            0.3333333
Class: versicolor        0.96        0.99      0.9795918       0.980198  0.3333333      0.3200000            0.3266667
Class: virginica         0.98        0.98      0.9607843       0.989899  0.3333333      0.3266667            0.3400000

从每对数据集和每种方法中,我想在一个表中获得Sensitivity和......我想,但我不确定如何获得标签以反映分类方法和数据集用过的。所以效果如下:SpecificityPos Predcbind

pca_LDA_Sensitivity  pca_lda_Specifi   pca_lda_PosPred pca_ANN_Sensistivity svm_LDA_Sensitivity.....
      1                        1              1                      .98

然后我需要相同的(很可能是一个单独的表)通过lda.conf$overall.

为了安全起见,我可能需要lda.conf$table每种方法的每对数据集的单独混淆矩阵 ( )。

最后,我想创建一个train函数的所有结果列表。

我不确定如何继续实现执行上述操作的功能。我知道这个问题很长,但我将不胜感激任何帮助。

4

1 回答 1

1

我一直在解决类似的问题,我所做的是使用接收器将结果写入多个文件,并以不同的详细程度将图表写入 pdf 文件。我在第一个文件夹(混淆矩阵和 roc 曲线)中设置了一个文件夹结构,其中包含我的关键内容,然后在子文件夹中提供更多详细信息。所以在我的设置中,我首先用插入符号训练我的模型,然后有一段代码逐个运行模型并挑选出细节。我只是手动输入了这段代码,因为我认为尝试自动化它不值得。

于 2013-11-12T08:24:39.043 回答