2014-10-15 2 views
2

Я хочу измерить значение функции с помощью функции cforest из библиотеки вечеринок.cforest party unbalanced classes

Моего выходное переменными имеет что-то вроде 2000 образцов в классе 0 и 100 образцов в классе 1.

Я думаю, это хороший способ, чтобы избежать смещений из-за класс дисбаланс, чтобы обучить каждое дерево в лесе, используя подвыборки таких что число элементов класса 1 совпадает с числом элементов в классе 0.

Есть ли все-таки сделать это? Я имею в виду, в качестве опции, как n_samples = c(20, 20)

EDIT: Пример кода

> iris.cf <- cforest(Species ~ ., data = iris, 
    +     control = cforest_unbiased(mtry = 2)) #<--- Here I would like to train the forest using a balanced subsample of the data 

> varimp(object = iris.cf) 
    Sepal.Length Sepal.Width Petal.Length Petal.Width 
    0.048981818 0.002254545 0.305818182 0.271163636 
    > 

EDIT: Может быть, мой вопрос не достаточно ясно. Случайный лес - это набор деревьев решений. В общем случае деревья решений строятся с использованием только случайной подвыборки данных. Я хотел бы, что использовал подвыборка имеет то же число элементов в классе 1 и в классе 0.

EDIT: Функция, которую я ищу, наверняка в пакете RandomForest

sampsize  
Size(s) of sample to draw. For classification, if sampsize is a vector of the length the number of strata, then sampling is stratified by strata, and the elements of sampsize indicate the numbers to be drawn from the strata. 

Мне нужно то же самое для партийного пакета. Есть ли способ получить его?

+0

Какую функцию вы хотите передать этой опции? Какой код/​​функции вы фактически используете? – MrFlick

ответ

0

Предполагаю, что вы знаете, чего хотите достичь, но не знаете достаточно R, чтобы это сделать.

Не уверен, что функция обеспечивает балансировку данных в качестве аргумента, но вы можете сделать это вручную. Ниже приведен код, который я быстро бросил вместе. Возможно, существует более элегантное решение.

# just in case 
myData <- iris 
# replicate everything *10* times. Replicate is just a "loop 10 times". 
replicate(10, 
    { 
     # split dataset by class and add separate classes to list 
     splitList <- split(myData, myData$Species) 
     # sample *20* random rows from each matrix in a list 
     sampledList <- lapply(splitList, function(dat) { dat[sample(20),] }) 
     # combine sampled rows to a data.frame 
     sampledData <- do.call(rbind, sampledList) 

     # your code below 
     res.cf <- cforest(Species ~ ., data = sampledData, 
          control = cforest_unbiased(mtry = 2) 
         ) 
     varimp(object = res.cf) 
    } 
) 

Надеюсь, вы можете взять его отсюда.

Смежные вопросы