0

QDA (Quadratic Discriminant Analysis)에서 트레이닝 및 테스트 데이터의 길이를 정확히 유지해야합니까? 그렇지 않다면, 혼돈 매트릭스을 어떻게 찾을 수 있습니까?QDA | 훈련 및 시험 데이터 세트의 길이 | 교육 및 테스트 데이터에서 데이터를 분리하는 방법은 무엇입니까?

여기에 psuedo data입니다.

다른 길이의 교육 데이터 및 테스트 데이터 세트를 유지하면 오류가 발생합니다 (R Studio 사용). "테이블의 오류 (pred, true) : 모든 인수의 길이가 동일해야합니다".

na와 omit()를 사용하여 NAs를 제거하려고했으나 pred와 true는 물론 두 데이터 세트에서 모두 제거되었습니다. qda()에 대해 na.action = na.exclude를 사용했지만 작동하지 않았습니다.

정확히 절반으로 데이터 세트를 나눈 후; 훈련의 절반과 시험의 절반; 그것은 na.omit() 후 에 pred와 true에 완벽하게 작동했습니다.

다음 두 가지 방법 중 하나에 사용되는 코드는 다음과 같습니다. 접근 방식 2에서 데이터를 반으로 나누면 완벽하게 작동합니다.

#Approach 1: divide data age-wise 

train <- vif_data$Age < 30 
# there are around 400 values passing (TRUE) above condition and around 50 failing (FALSE) 

train_vif <- vif_data[train,] 
test_vif <- vif_data[!train,] 

#taking QDA 
zone_qda <- qda(train_vif$Awareness~train_vif$Zone, na.action = na.exclude) 
#compare QDA against test data 
zone_pred <- predict(zone_qda, test_vif) 
#omitting nulls 
pred <- na.omit(zone_pred$class) 
true <- na.omit(test_vif$Awareness) 
length(pred) # result: 399 
length(true) # result: 47 

#that's where it throws error: "Error in table(zone_pred$class, train_vif) : all arguments must have the same length" 
zone_aware <- table(zone_pred$class, train_vif) 
# OR 
zone_aware <- table(pred, true) 
accur <- mean(zone_pred$class==test_vif$Awareness) 


############################### 

#Approach 2: divide data into random halves 
train <- splitSample(dataset = vif_data, div = 2, path = "./", type = "csv") 
train_data <- read.csv("splitSample_s1.csv") 
test_data <- read.csv("splitSample_s2.csv") 

#taking QDA 
zone_qda <- qda(train_vif$Awareness~train_vif$Zone, na.action = na.exclude) 
#compare QDA against test data 
zone_pred <- predict(zone_qda, test_vif) 
#omitting nulls 
pred <- na.omit(zone_pred$class) 
true <- na.omit(test_vif$Awareness) 
length(train_vif) 

# this works fine 
zone_aware <- table(zone_pred$class, train_vif) 
# OR 
zone_aware <- table(pred, true) 
accur <- mean(zone_pred$class==test_vif$Awareness) 

우리가 불평등 교육 및 테스트 데이터 집합으로 나누어 데이터 세트와 혼동 행렬을 가질 수있는 어떤 방법이 있는지 알고 싶습니다.

감사합니다.

답변

0

예측을 위해 테스트 세트 입력 데이터 대신 교육 입력을 연결합니까? 이 같은 오류 메시지를 산출 방법주의 : 그때는 아마 잘못 예측하고, 올바른 길이 아니다

table(c(1,2),c(1,2,3)) 

pred합니다. 지금은 코드를 공유하지 않았으므로 더 말할 수는 없습니다. 그러나 학습 데이터와 다른 크기의 테스트 데이터를 사용하여 혼란 매트릭스를 얻을 수 없어야하는 이유는 없습니다.

+0

감사합니다. Taylor. 테스트 데이터가 플러그인되어 있습니다(). "pred가 올바른 길이가 아님"이 무슨 뜻인지 말해 줄 수 있습니까? –

+0

또한 도움이 될 수 있다면 위의 코드를 질문에 추가했습니다. –

+0

훈련 데이터는 이와 같이 분할되지 않아야합니다. 그것은 무작위로 이루어져야합니다. 또한 당신이 어떤 데이터를 사용하고 있는지 알고 있다면 도움이 될 것입니다. – Taylor

관련 문제