작성
·
153
0
질문1.
4개의 분류문제에서는 predict값을 바로 write.csv 하셨습니다.
그럼 2개의 분류문제가 주어지고 f1스코어로 평가한다고 하면 predict값을 ifelse를 활용해 1,0으로 나누고 as.factor형으로 바꾼 뒤 write.csv를 해야하나요??
아니면 predict한 p3[ , 2]을 그대로 write.csv 해야하나요
질문2.
제4회차 2유형 문제를 작성한 코드입니다.
library(caret)
library(ModelMetrics)
df <- read.csv('C:/Users/USER/Desktop/강의자료/train.csv')
tst <- read.csv('C:/Users/USER/Desktop/강의자료/test.csv')
str(df)
summary(df)
df <- df[,-1]
df$Gender <- as.factor(df$Gender)
df$Ever_Married <- as.factor(df$Ever_Married)
df$Graduated <- as.factor(df$Graduated)
df$Profession <- as.factor(df$Profession)
df$Spending_Score <- as.factor(df$Spending_Score)
df$Var_1 <- as.factor(df$Var_1)
df$Segmentation <- as.factor(df$Segmentation)
df$Work_Experience<- ifelse(is.na(df$Work_Experience), mean(df$Work_Experience, na.rm=T), df$Work_Experience)
df$Family_Size <- ifelse(is.na(df$Family_Size), mean(df$Family_Size, na.rm=T), df$Family_Size)
inx <- createDataPartition(df$Segmentation, p=0.7, list=F)
train <- df[inx,]
test <- df[-inx,]
model1 <- train(Segmentation~., data=train, method='rpart')
model2 <- train(Segmentation~., data=train, method='lda')
p1 <- predict(model1, test)
p2 <- predict(model2, test)
library(caret)
cm1 <- confusionMatrix(test$Segmentation,p2)
이렇게 작성을 했는데
cm1의 값이 아래와 같이 뜹니다. 혹시 어떤 문제가 있을까요?
[,1] [,2]
[1,] 0 0
[2,] 0 779
답변 1
0
안녕하세요.
[질문1]
만약 2-Class 문제인데 평가지표를 F1으로 한다고하면 ifelse를 사용하실 필요없이
predict 함수에 type = 'prob' 매개변수만 제외하시면 됩니다.
그러면 알아서 0.5기준으로 Class를 나눈 결과가 반환되기 때문입니다.
그리고 그 결과를 제출하시면 됩니다.
[질문2]
마지막줄에
cm1 <- confusionMatrix(test$Segmentation,p2) 대신에
cm1 <- caret::confusionMatrix(test$Segmentation,p2)로 바꾸시면 됩니다.
confusionMatrix가 caret패키지에도 있고 ModelMetrics패키지에도 있어서
caret패키지에있는 것을 활용한다고 선언해주는겁니다.
이렇게 하시면 원하시는 결과를 얻을 수 있습니다.