Разделение обучающих данных на несколько переменных с использованием R

Вопрос или проблема

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

Ошибка в eval(predvars, data, env): объект ‘1.band1’ не найден

которая возникает из этих строк:

for(i in 1:length(data_split)){ assign(paste("fit.lda",i, sep = ""), train(class~., data=data_split[i], method="lda", metric=metric, trControl=control))}

это что-то, что я сделал неправильно, или это можно исправить с помощью другой методологии

ИЗМЕНЕНИЕ:
Мой набор данных представляет собой фрейм данных, который был создан следующими строками

validation_index <- createDataPartition(valuetable$class, p=0.80, list=FALSE)
dataset <- valuetable[validation_index,]

где valuetable является датафреймом, который содержит значения нескольких растров.

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

Дайте знать, если вам нужно больше разъяснений.

Вы не объяснили, какими являются ваши данные и их переменные, поэтому я привожу общий пример.

Допустим, в вашем наборе данных есть переменная под названием SET, содержимое которого — TRN для обучения и TST для тестирования. Чтобы создать набор данных, содержащий только обучающий набор, вам нужно использовать следующий код:

trn.ds<- ds[ds$SET == 'TRN',]

Если вам нужен тестовый набор данных, просто адаптируйте код:

tst.ds<- ds[ds$SET == 'TST']

PS: Это не я проголосовал против вашего вопроса, не понимаю, почему люди ставят минусы почти к каждому вопросу здесь.

Ответ или решение

Деление обучающих данных на несколько переменных с помощью R

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

1. Основа: Разделение данных на обучение и тестирование

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

validation_index <- createDataPartition(valuetable$class, p=0.80, list=FALSE)
dataset <- valuetable[validation_index,]

Этот код создает обучающую выборку (80% данных). Мы можем дополнительно создать тестовую выборку, одновременно сохранив 20% данных:

test_index <- setdiff(1:nrow(valuetable), validation_index)
test_dataset <- valuetable[test_index,]

Теперь у нас есть dataset для обучения и test_dataset для тестирования.

2. Подготовка обучающих данных к тренировке LDA

На следующем этапе вы хотите разделить ваш обучающий набор на несколько меньших наборов для повышения скорости обработки:

# Предположим, у вас уже есть созданный набор данных data_split
for(i in 1:length(data_split)) {
    assign(paste("fit.lda", i, sep = ""), 
           train(class ~ ., data = data_split[[i]], 
                 method = "lda", 
                 metric = metric, 
                 trControl = control))
}

Тем не менее, вы столкнулись с ошибкой Error in eval(predvars, data, env): object '1.band1' not found. Это может происходить по ряду причин:

  1. Неверное обращение через индекс: Убедитесь, что data_split[i] ссылается на правильный набор данных. В R единственное значение возвращается как дата-фрейм, поэтому необходимо использовать двойные квадратные скобки [[i]], чтобы правильно выбрать подмножество.

  2. Структура дата-фрейма: Убедитесь, что названия переменных (например, class и предполагаемые band1) на самом деле присутствуют в выбранном подмножестве данных. Возможно, стоит просмотреть структуру каждого подмножества с помощью str(data_split[[i]]), чтобы удостовериться, что все необходимые колонки доступны.

  3. Проблемы с переменными в формуле: Если в ваших данных имеются пропуски или неверные наименования переменных, это также может вызывать подобные ошибки. Убедитесь, что все необходимые переменные правильно названы и не содержат пропусков.

3. Пример кода для более простой обработки

Избегая ошибок, можете использовать следующий адаптированный код:

for(i in 1:length(data_split)) {
    fit_model_name <- paste("fit.lda", i, sep = "")
    model <- train(class ~ ., data = data_split[[i]], 
                   method = "lda", 
                   metric = metric, 
                   trControl = control)
    assign(fit_model_name, model)
}

4. Заключение

Таким образом, корректное разделение ваших данных на обучающие и тестовые наборы, а также правильная работа с подмножествами может минимизировать возможность возникновения ошибок. Убедитесь, что используете верные индексы и проверяете структуру данных, чтобы избежать таких проблем, как object not found. Если у вас возникнут дополнительные вопросы, пожалуйста, уточните информацию о структуре вашего набора данных для более детального анализа.

Оцените материал
Добавить комментарий

Капча загружается...