强化学习 - 找到随机抽样的最佳数值,以优化随机森林分类

时间:2017-11-23 02:19:54

标签: r optimization reinforcement-learning

我的数据设置如下:

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;来最大化的价值。

0 个答案:

没有答案