Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 그래프 생성 문법
- 데이터분석가
- Intersect
- 순위출력
- 단순회귀 분석
- 정보획득량
- 회귀분석
- Dense_Rank
- count
- if문 작성법
- 그래프시각화
- sql
- 총과 카드만들기
- max
- 회귀분석 알고리즘
- 빅데이터
- 불순도제거
- 막대그래프
- merge
- 빅데이터분석
- sqld
- 데이터분석
- 히스토그램 그리기
- 팀스파르타
- difftime
- 상관관계
- loop 문
- 여러 데이터 검색
- %in%
- Sum
Archives
- Today
- Total
ch0nny_log
[빅데이터분석] R _ 53. 이원 교차표의 거짓 긍정과 거짓부정 해석 본문
■ 유방암 데이터 코드 이원 교차표
# 필요한 패키지 설치 및 로드
if (!require("readr")) install.packages("readr")
if (!require("dplyr")) install.packages("dplyr")
if (!require("caret")) install.packages("caret")
if (!require("class")) install.packages("class")
if (!require("plotly")) install.packages("plotly")
library(readr)
library(dplyr)
library(caret)
library(class)
library(plotly)
# 1단계: 데이터 수집
wbcd <- read.csv("c:\\data\\wisc_bc_data.csv", stringsAsFactors = TRUE)
nrow(wbcd) # 569
ncol(wbcd) # 32
# 2단계: 데이터 탐색
# 1. 결측치 확인
colSums(is.na(wbcd))
# 2. 종속변수의 데이터 비율
table(wbcd$diagnosis)
prop.table(table(wbcd$diagnosis))
# 3. 데이터 스케일링 (최대최소 정규화)
wbcd2 <- wbcd[, c(-1, -2)] # 환자번호(id)와 정답컬럼(diagnosis)를 제외
normalize <- function(x) { return((x - min(x)) / (max(x) - min(x))) }
wbcd_n <- as.data.frame(lapply(wbcd2, normalize))
summary(wbcd_n)
# 3단계: 모델 훈련
# 훈련 데이터와 테스트 데이터를 분리합니다. 90% 학습, 10% 시험
set.seed(10)
train_indx <- createDataPartition(wbcd$diagnosis, p = 0.9, list = FALSE)
# 기계를 학습 시킬 훈련 데이터와 테스트 데이터 생성
wbcd_train <- wbcd_n[train_indx, ]
wbcd_test <- wbcd_n[-train_indx, ]
nrow(wbcd_train) # 513
nrow(wbcd_test) # 56
# 기계를 학습 시킬 훈련 데이터의 정답과 테스트 데이터의 정답 생성
wbcd_train_label <- wbcd$diagnosis[train_indx]
wbcd_test_label <- wbcd$diagnosis[-train_indx]
length(wbcd_train_label) # 513
length(wbcd_test_label) # 56
# 4단계: 모델 성능 평가
accuracies <- data.frame(k = integer(), accuracy = numeric())
set.seed(10)
for (i in seq(1, 57, 2)) {
result1 <- knn(train = wbcd_train, test = wbcd_test, cl = wbcd_train_label, k = i)
accuracy <- sum(result1 == wbcd_test_label) / length(wbcd_test_label) * 100
accuracies <- rbind(accuracies, data.frame(k = i, accuracy = accuracy))
print(paste(i, '개 일때 정확도 ', accuracy))
}
# 정확도 데이터 프레임 확인
accuracies
설명: 위의 결과를 보면 k=7인 경우가 암환자와 정상환자를 다 맞췄으니 제일 좋은 하이퍼 파라미터임 (100% 가 나오기는 쉽지 않음.)
※ 정확도 100% 이하일 경우 이원교차표를 활용해야함. (100% 이하인 경우)
설명: 56명의 환자중에 2명 틀리고 다 맞춤
※ 위 출력값 해석 및 설명 | ||
1. TP (True Positive) | 실제 값이 악성(M)이고모델이 악성(M)으로 예측한 경우 | 19 |
2. TN (True Negative) | 실제 값이 양성(B)이고 모델이 양성 (B) 으로 예측한 경우 | 35 |
3. FP (False Positive) | 실제 값이 양성(B)인데 모델이 악성 (M) 으로 예측한 경우 | 0 |
4. FN (False Negative) | 실제 값이 악성(M)이고 모델이 양성(B)으로 예측한 경우 | 2 |
-> 의료쪽에서는 FN 값은 꼭 0 으로 나타나야됨
-> Positive = 관심범주 (암)
설명: 데이터 분석가는 위와 같은 데이터를 제공해야하고 최종 선택 모델은 사용하는 사람이 결정하면됨.
( 정확도만 가지고 결정할 수 있는 다른 성능 지표도 같이 제공해줘야됨)
문제1. 유리의 종류를 분류하는 knn모델의 이원 교차표를 출력하시오.
# 필요한 패키지 설치 및 로드 if (!require("readr")) install.packages("readr") if (!require("dplyr")) install.packages("dplyr") if (!require("caret")) install.packages("caret") if (!require("class")) install.packages("class") if (!require("plotly")) install.packages("plotly") if (!require("mlbench")) install.packages("mlbench") library(readr) library(dplyr) library(caret) library(class) library(plotly) library(mlbench) # Digits 데이터셋 로드 data("Glass", package = "mlbench") # 데이터셋의 특성 출력 str(Glass) # 데이터셋의 행과 열의 수 출력 print(dim(Glass)) # 행과 열의 수 출력 print(summary(Glass)) # 데이터셋 요약 정보 출력 head(Glass) nrow(Glass) unique(Glass$Type) # 2단계: 데이터 탐색 # 1. 결측치 확인 colSums(is.na(Glass)) # 2. 종속변수의 데이터 비율 table(Glass$Type) prop.table(table(Glass$Type)) # 3. 데이터 스케일링 (최대최소 정규화) Glass2 <- Glass[, c(-10)] # 정답컬럼를 제외 normalize <- function(x) { return((x - min(x)) / (max(x) - min(x))) } Glass_n <- as.data.frame(lapply(Glass2, normalize)) summary(Glass_n) # 3단계: 모델 훈련 # 훈련 데이터와 테스트 데이터를 분리합니다. 90% 학습, 10% 시험 set.seed(10) train_indx <- createDataPartition(Glass$Type, p = 0.9, list = FALSE) # 기계를 학습 시킬 훈련 데이터와 테스트 데이터 생성 Glass_train <- Glass_n[train_indx, ] Glass_test <- Glass_n[-train_indx, ] nrow(Glass_train) # 196 nrow(Glass_test) # 18 # 기계를 학습 시킬 훈련 데이터의 정답과 테스트 데이터의 정답 생성 Glass_train_label <- Glass$Type [train_indx] Glass_test_label <- Glass$Type[-train_indx] length(Glass_train_label) # 196 length(Glass_test_label) # 18 # 4단계: 모델 성능 평가 accuracies <- data.frame(k = integer(), accuracy = numeric()) set.seed(10) for (i in seq(1, 57, 2)) { result1 <- knn(train = wbcd_train, test = wbcd_test, cl = wbcd_train_label, k = i) accuracy <- sum(result1 == wbcd_test_label) / length(wbcd_test_label) * 100 accuracies <- rbind(accuracies, data.frame(k = i, accuracy = accuracy)) print(paste(i, '개 일때 정확도 ', accuracy)) } # 정확도 데이터 프레임 확인 accuracies final_result<-knn(train=Glass_train, test=Glass_test, cl=Glass_train_label, k=7) library(gmodels) confusionMatrix(final_result,Glass_test_label)
'빅데이터 분석(with 아이티윌) > R' 카테고리의 다른 글
[빅데이터분석] R _ 55. 하이퍼 파라미터 (1) | 2024.07.12 |
---|---|
[빅데이터분석] R _ 54. 나이브 베이즈 확율 (1) | 2024.07.11 |
[빅데이터분석] R _ 52. 주성분 분석 (0) | 2024.07.11 |
[빅데이터분석] R _ 51. KNN의 원리 (0) | 2024.07.09 |
[빅데이터분석] R _ 50. 이원 교차표 분석하기 (0) | 2024.07.09 |