종속변수의 종류가 4개인 다중 클래스 분류 문제에서 민감도(Sensitivity)와 특이도(Specificity)를 계산하는 것은 이진 분류 문제보다 복잡하지만, 각 클래스에 대해 각각 민감도와 특이도를 계산할 수 있습니다. 이를 위해 각 클래스를 긍정(True) 클래스로 간주하고 나머지 클래스를 부정(False) 클래스로 간주하는 방식으로 민감도와 특이도를 구합니다. 이런 접근 방식을 "one-vs-rest" 방법이라고 합니다.
| # 필요한 패키지 설치 install.packages("caret") # 패키지 로드 library(caret) # 예시 데이터 생성 # 실제 값 (True labels) actual <- factor(c('A', 'B', 'A', 'C', 'A', 'B', 'C', 'C', 'B', 'A')) # 예측 값 (Predicted labels) predicted <- factor(c('A', 'B', 'A', 'A', 'A', 'B', 'C', 'C', 'A', 'B')) # 혼동 행렬 계산 conf_matrix <- confusionMatrix(predicted, actual) print(conf_matrix) # 각 클래스에 대한 민감도와 특이도 계산 함수 calculate_sensitivity_specificity <- function(conf_matrix) { sensitivity <- c() specificity <- c() for (class in levels(actual)) { tp <- conf_matrix$table[class, class] fn <- sum(conf_matrix$table[class, ]) - tp fp <- sum(conf_matrix$table[, class]) - tp tn <- sum(conf_matrix$table) - tp - fn - fp sensitivity[class] <- tp / (tp + fn) specificity[class] <- tn / (tn + fp) } return(list(sensitivity = sensitivity, specificity = specificity)) } # 민감도와 특이도 계산 result <- calculate_sensitivity_specificity(conf_matrix) print(result$sensitivity) print(result$specificity) |
다음검색