0

Я пытаюсь запустить RF с использованием функции в качестве переменной ответа. У меня возникла проблема с передачей строки через переменную, которая будет использоваться в качестве ответа в РФ. Сначала я пытаюсь запустить RF на строке, прошедшей через переменную в качестве ответа, и получаю «длина вектора отличается от ошибки». После этого я пытаюсь просто ввести фактическую строку (функцию) в качестве ответа, и она отлично работает. Можете ли вы пролить свет на то, почему переменная длина отличается? Благодарю.случайные длины переменных леса отличаются

> colnames(Data[1]) 
[1] "feature1" 
> rf.file = randomForest(formula =colnames(Data[1])~ ., data = Data, proximity = T,  importance = T, ntree = 500, nodesize = 3) 
Error in model.frame.default(formula = colnames(Data[1]) ~ ., : 
    variable lengths differ (found for 'feature1') 

Enter a frame number, or 0 to exit 

1: randomForest(formula = colnames(Data[1]) ~ ., data = Data, proximity = T, importance = T, ntree = 500, nodesize = 3) 
2: randomForest.formula(formula = colnames(Data[1]) ~ ., data = brainDataTrim, proximity = T, importance = T, ntree = 500, nodesize = 3) 
3: eval(m, parent.frame()) 
4: eval(expr, envir, enclos) 
5: model.frame(formula = colnames(Data[1]) ~ ., data = Data, na.action = function (object, ...) 
6: model.frame.default(formula = colnames(Data[1]) ~ ., data = Data, na.action = function (object, ...) 

Selection: 0 



> rf.file = randomForest(formula =feature1~ ., data = Data, proximity = T,  importance = T, ntree = 500, nodesize = 3) 
> rf.file 

Call: 
randomForest(formula = feature1 ~ ., data = Data,  proximity = T, importance = T, ntree = 500, nodesize = 3) 
       Type of random forest: regression 
        Number of trees: 500 
No. of variables tried at each split: 3 

      Mean of squared residuals: 0.1536834 
        % Var explained: 34.21 
> 

ответ

3

Вы просто не понимаете, как работают формулы. В основном, ваша первая попытка не предположительно для работы.

Формулы должны состоять из имен переменных, возможно, простых функций из них. например

var1 ~ var2 
var1 ~ log(var2) 

Обратите внимание на недостаток кавычек. Если вы не процитировали это, это не строка, ее символ.

Итак, избегайте необработанных строк, странных требований к оценке (например, Data[1] или любого использования $) в ваших формулах. К построить конструкцию формулой из строк, вставить ее вместе, а затем вызвать as.formula на результирующей строке.

Имейте в виду, что вся точка формулы заключается в том, что вы предоставили символическое представление модели, а R затем посмотрим на конкретные столбцы, которые вы назвали в предоставленном фрейме данных.

Я думаю, что некоторые функции будут выполнять принуждение строкового представления формулы для вас (например, "var1 ~ var2"), но я бы не рассчитывал и не ожидал этого.

+0

Спасибо за ответ! Я вижу, что паста может быть использована для построения строк для использования в формулах и таким образом фактически разработана. Другой способ, которым я нашел это, - использовать формулу (x, y) и вызвать координаты в таблице фактических данных, которые будут использоваться в качестве координат x, y: randomForest (данные [, -1], данные [, 1] , близость = T) –

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