안녕하세요

모두를 위한 R 데이터 분석 입문 연습문제 12장 본문

Study_exam/모두를 위한 R 데이터 분석 입문 연습문제

모두를 위한 R 데이터 분석 입문 연습문제 12장

godxxy1229 2023. 6. 15. 06:40

01 R에서 제공하는 state.x77 데이터셋에 대해 K-평균 군집화를 실시하고 결과를 그래프로 출력하시오.

• 군집의 수는 5로 한다.
• state.x77은 각 변수(열) 값들에 대해 단위의 차이가 많이 나기 때문에 0~1 표준화를 실시한 후 군집화를 실행한다.

 

std <- function(x){
  return( (x-min(x)) / (max(x) - min(x)))
}
myds <- apply(data.frame(state.x77), 2, std)
fit <- kmeans(x = myds, centers = 5)
library(cluster)
clusplot(myds, fit$cluster, color = TRUE, shade = TRUE, labels = 2, lines = 0)


02 mlbench 패키지에서 제공하는 Sonar 데이터셋에 대해 K-평균 군집화를 실시하고 결과를 그래프로 출력하시오.

 

library(mlbench)
data("Sonar")    #데이터셋 불러오기
• 군집의 수는 2로 한다.
• Sonar 데이터셋에서 마지막에 있는 Class 열은 제외하고 군집화를 실행한다.

 

library(mlbench)
data("Sonar")
myds <- Sonar[, -ncol(Sonar)]
fit <- kmeans(x = myds, centers = 2)
clusplot(myds, fit$cluster, color = TRUE, shade = TRUE, labels = 2, lines = 0)


03 R에서 제공하는 swiss 데이터셋에 대해 K-평균 군집화를 실시하고 결과를 그래프로 출력하시오.

• 군집의 수는 3으로 한다.

 

myds <- swiss
fit <- kmeans(x = myds, centers = 3)
clusplot(myds, fit$cluster, color = TRUE, shade = TRUE, labels = 2, lines = 0)

 


04 R에서 제공하는 rock 데이터셋에 대해 K-평균 군집화를 실시하고 결과를 그래프로 출력하시오.

• 군집의 수는 3으로 한다.

 

myds <- rock
fit <- kmeans(x = myds, centers = 3)
clusplot(myds, fit$cluster, color = TRUE, shade = TRUE, labels = 2, lines = 0)

 

05 mlbench 패키지에서 제공하는 Sonar 데이터셋에 대해 K-최근접 이웃 알고리즘을 이용하여 모델을 만들고 예측 정확도를 측정하시오.

• Sonar 데이터셋에서 마지막에 있는 Class 열이 그룹 정보이다.
• Sonar 데이터셋에서 홀수 번째 데이터(관측값)를 훈련용 데이터로 하고, 짝수 번째 데이터(관측값)를 테스트용 데이터로 한다.
• K-최근 이웃에서 k를 3.5.7로 다르게 하여 예측 정확도를 비교한다.

 

train <- Sonar[seq(1, nrow(Sonar), 2), -ncol(Sonar)]
test <- Sonar[seq(2, nrow(Sonar), 2), -ncol(Sonar)]
library(class)
cl.train <- Sonar[seq(1, nrow(Sonar), 2), ncol(Sonar)]
cl.test <- Sonar[seq(2, nrow(Sonar), 2), ncol(Sonar)]

pred <- knn(train, test, cl.train, k = 3, prob = TRUE)
acc.3 <- mean(pred == cl.test)
pred <- knn(train, test, cl.train, k = 5, prob = TRUE)
acc.5 <- mean(pred == cl.test)
pred <- knn(train, test, cl.train, k = 7, prob = TRUE)
acc.7 <- mean(pred == cl.test)
cat("k == 3 :",acc.3,"\nk == 5 :", acc.5, "\nk == 7 :", acc.7, "\n")


06 mlbench 패키지에서 제공하는 Sonar 데이터셋에 대해 K-최근접 이웃 알고리즘을 이용하여 모델 을 만들고 예측 정확도를 측정하시오.

• Sonar 데이터셋에서 마지막에 있는 Class 열이 그룹 정보이다.
• k-최근접 이웃에서 K는 3으로 한다.
• 5-fold 교차 검증 방법으로 예측 정확도를 측정한다.

 

library(cvTools)
k = 5
folds <- cvFolds(nrow(Sonar), K = k)
acc <- c()
for(i in 1:k){
  ts.idx <- folds$which == i
  ds.tr <- Sonar[-ts.idx, -ncol(Sonar)]
  ds.ts <- Sonar[ts.idx, -ncol(Sonar)]
  cl.tr <- factor(Sonar[-ts.idx, ncol(Sonar)])
  cl.ts <- factor(Sonar[ts.idx, ncol(Sonar)])  
  pred <- knn(train = ds.tr, test = ds.ts, cl = cl.tr, k = 3)
  acc[i] <- mean(cl.ts == pred)
}
mean(acc)


07 mlbench 패키지에서 제공하는 Breast Cancer 데이터셋에 대해 K-최근접 이웃 알고리즘을 이용 하여 모델을 만들고 예측 정확도를 측정하시오.

 

library(mlbench)
data("Breast Cancer")    #데이터셋 불러오기
• Breast Cancer 데이터셋에서 마지막에 있는 Class 열이 그룹 정보이다.
• k-최근접 이웃에서 K는 5로 한다.
• 10-fold 교차 검증 방법으로 예측 정확도를 측정한다.

 

library(mlbench)
data("BreastCancer")
myds <- BreastCancer[complete.cases(BreastCancer), ]
k = 10
folds <- cvFolds(nrow(myds), K = k)
acc <- c()
for(i in 1:k){
  ts.idx <- folds$which == i
  ds.tr <- myds[-ts.idx, -ncol(myds)]
  ds.ts <- myds[ts.idx, -ncol(myds)]
  cl.tr <- factor(myds[-ts.idx, ncol(myds)])
  cl.ts <- factor(myds[ts.idx, ncol(myds)])  
  pred <- knn(train = ds.tr, test = ds.ts, cl = cl.tr, k = 5)
  acc[i] <- mean(cl.ts == pred)
}
mean(acc)

 

 

08

library(mlbench)
data("PimaIndiansDiabetes")
myds <- PimaIndiansDiabetes
k = 10
folds <- cvFolds(nrow(myds), K = k)
acc <- c()
for(i in 1:k){
  ts.idx <- folds$which == i
  ds.tr <- myds[-ts.idx, -ncol(myds)]
  ds.ts <- myds[ts.idx, -ncol(myds)]
  cl.tr <- factor(myds[-ts.idx, ncol(myds)])
  cl.ts <- factor(myds[ts.idx, ncol(myds)])  
  pred <- knn(train = ds.tr, test = ds.ts, cl = cl.tr, k = 5)
  acc[i] <- mean(cl.ts == pred)
}
mean(acc)

 

 

 

09

library(mlbench)
data("Vehicle")
myds <- Vehicle
k = 10
folds <- cvFolds(nrow(myds), K = k)
acc <- c()
for(i in 1:k){
  ts.idx <- folds$which == i
  ds.tr <- myds[-ts.idx, -ncol(myds)]
  ds.ts <- myds[ts.idx, -ncol(myds)]
  cl.tr <- factor(myds[-ts.idx, ncol(myds)])
  cl.ts <- factor(myds[ts.idx, ncol(myds)])
  
  pred <- knn(train = ds.tr, test = ds.ts, cl = cl.tr, k = 3)
  acc[i] <- mean(cl.ts == pred)
}
mean(acc)

 

 

 

10

library(mlbench)
data("Vowel")
myds <- Vehicle
k = 10
folds <- cvFolds(nrow(myds), K = k)
acc <- c()
for(i in 1:k){
  ts.idx <- folds$which == i
  ds.tr <- myds[-ts.idx, -ncol(myds)]
  ds.ts <- myds[ts.idx, -ncol(myds)]
  cl.tr <- factor(myds[-ts.idx, ncol(myds)])
  cl.ts <- factor(myds[ts.idx, ncol(myds)])
  
  pred <- knn(train = ds.tr, test = ds.ts, cl = cl.tr, k = 5)
  acc[i] <- mean(cl.ts == pred)
}
mean(acc)