Вопрос или проблема
Итак, сейчас я пытаюсь создать несколько переменных с обучающими данными, и в процессе я столкнулся с ошибкой
Ошибка в 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
. Это может происходить по ряду причин:
-
Неверное обращение через индекс: Убедитесь, что
data_split[i]
ссылается на правильный набор данных. В R единственное значение возвращается как дата-фрейм, поэтому необходимо использовать двойные квадратные скобки[[i]]
, чтобы правильно выбрать подмножество. -
Структура дата-фрейма: Убедитесь, что названия переменных (например,
class
и предполагаемыеband1
) на самом деле присутствуют в выбранном подмножестве данных. Возможно, стоит просмотреть структуру каждого подмножества с помощьюstr(data_split[[i]])
, чтобы удостовериться, что все необходимые колонки доступны. -
Проблемы с переменными в формуле: Если в ваших данных имеются пропуски или неверные наименования переменных, это также может вызывать подобные ошибки. Убедитесь, что все необходимые переменные правильно названы и не содержат пропусков.
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
. Если у вас возникнут дополнительные вопросы, пожалуйста, уточните информацию о структуре вашего набора данных для более детального анализа.