我的数据设置如下:
control1 <- sample(1:75, 3947398, replace=TRUE)
control2 <- sample(1:75, 28793, replace=TRUE)
control3 <- sample(1:100, 392733, replace=TRUE)
control4 <- sample(1:75, 858383, replace=TRUE)
patient1 <- sample(1:100, 28048, replace=TRUE)
patient2 <- sample(1:50, 80400, replace=TRUE)
patient3 <- sample(1:100, 48239, replace=TRUE)
control <- list(control1, control2, control3, control4)
patient <- list(patient1, patient2, patient3)
为了将这些样本分类为对照或患者,我想要考虑100个变量中每个变量的存在的频率分布。为此,我随机抽样&#34; s&#34;来自每个样本的值并生成长度为100的频率向量。这就是我的方法:
control_s <- list()
patient_s <- list()
for (i in 1:length(control))
control_s[[i]] <- sample(control[[i]], s)
for (i in 1:length(patient))
patient_s[[i]] <- sample(patient[[i]], s)
一旦我这样做,我生成长度为100的频率向量,如下所示:
controlfreq <- list()
for (i in 1:length(control_s)){
controlfreq[[i]] <-
as.data.frame(prop.table(table(factor(
control_s[[i]], levels = 1:100
))))[,2]}
patientfreq <- list()
for (i in 1:length(patient_s)){
patientfreq[[i]] <-
as.data.frame(prop.table(table(factor(
patient_s[[i]], levels = 1:100
))))[,2]}
controlfreq <- t(as.data.frame(controlfreq))
controltrainingset <- transform(controlfreq, status = "control")
patientfreq <- t(as.data.frame(patientfreq))
patienttrainingset <- transform(patientfreq, status = "patient")
dataset <- rbind(controltrainingset, patienttrainingset)
这是分类算法中使用的最终数据帧。我这篇文章的目标是弄清楚如何识别最佳的&#34; s&#34;值,以达到最高的平衡精度。我正在使用&#34; rf&#34;从插入包中做分类。
library(caret)
fitControl <-trainControl(method = "LOOCV", classProbs = T, savePredictions = T)
model <- train(status ~ ., data = dataset, method = "rf", trControl = fitControl)
如何将其自动化以启动&#34; s&#34;在5000,将其更改为另一个值,并根据准确性的变化,不断改变&#34; s&#34;努力做到最好的&#34; s&#34;值?
谢谢!
编辑:我将准确性定义如下:
selectedIndices <- model$pred$mtry == 2
confusionmatrix <- table(model$pred$obs[selectedIndices], model$pred$pred[selectedIndices])
BalancedACC = ((confusionmatrix[1,1]/length(control))+(confusionmatrix[2,2]/length(patient)))/2
这是我希望通过改变&#34; s&#34;来最大化的价值。