для lda, вы должны указать формулу, поэтому нижеприведенное действие сработает, если вы предоставите фрейм данных:
lda_train<-lda(class ~ .,data=data_train,prior = c(1,1,1)/3,CV=TRUE)
В противном случае, если вы не предоставите формулу, выполните:
lda(grouping=data_train$class,x=data_train[,-1],prior = c(1,1,1)/3, CV=TRUE)
Когда вы используете CV = TRUE, он использует перекрестную проверку с пропуском, чтобы дать вам задний план, но, к сожалению, он не может сохранить модель, и вы можете видеть это:
class(lda_train)
[1] "list"
Чтобы предсказать, вам нужно тренироваться с CV = FALSE. Вы предоставляете data.frame или матрицу, которая имеет тот же столбец, который использовался для обучения, и в вашем случае это будет:
lda_train<-lda(class ~ .,data=data_train,prior = c(1,1,1)/3)
data_test=data.frame(Var1=rnorm(10),Var2=rnorm(10),
Var3=rnorm(10),Var4=rnorm(10))
predict(lda_train,data_test)
Для lda
из MASS
, нет гиперпараметр, который будет получен во время обучения, так что, может быть, вы хотите уточнить, зачем вам нужна перекрестная проверка?
Если вы хотите изучить ее, вот как вы можете запустить перекрестную проверку для lda ( обратите внимание, используя lda2):
data_train$class =factor(data$class)
lda_train = train(class ~ .,data=data_train,method="lda2",
trControl = trainControl(method = "cv"))
predict(lda_train,data_test)