wisc_bc_data.csv
0.12MB

 

 

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# 유방암 데이터 로드
bc <- read.csv('c:/data/wisc_bc_data.csv',header=T,stringsAsFactors = T)
 
# shuffle
set.seed(1)
bc_shuffle <- bc[sample(nrow(bc)),]
bc2 <- bc_shuffle[-1# 환자번호 제거
 
# 정규화
normalize <- function(x) {
  return ((x-min(x))/(max(x)-min(x)))
}
 
ncol(bc2)
bc_n <- as.data.frame(lapply(bc2[2:31],normalize))
 
# train(90%) / test(10%)
train_num <- round(0.9*nrow(bc_n),0)
 
bc_train <- bc_n[1:train_num,]
bc_test <- bc_n[(train_num+1):nrow(bc_n),]
 
bc_train_label <- bc2[1:train_num,1]
bc_test_label <- bc2[(train_num+1):nrow(bc_n),1]
 
# kmeans 사용
library(stats)
bc_test
 
# test 데이터를 2개로 군집화
result2 <- kmeans(bc_test,2)
 
# 라벨링된 것이 악성인지 양성인지에 대해서는 라벨과 비교해서 내가 알아내야함
result2$cluster # 라벨링이 1, 2로 됨
bc_test_label
# 보면 느낌적으로 B를 1로, M을 2로 클러스터링한 것을 알 수 있음
 
# 시각화
library(factoextra)
fviz_cluster(result2,data=bc_test,stand=T)
 
# test_label도 숫자로 바꿔줌
bc_test_label
label_check <- ifelse(bc_test_label=='M',2,1)
label_check
 
# 군집화의 정확도 확인
real <- length(label_check)
predict <- sum(label_check==result2$cluster)
predict/real*100 # 89.47368
cs

 

1 : B(음성) / 2 : M(양성)

 

 

 

 

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
bc <- read.csv('c:/data/wisc_bc_data.csv',header=T,stringsAsFactors = T)
 
# shuffle
set.seed(1)
bc_shuffle <- bc[sample(nrow(bc)),]
bc2 <- bc_shuffle[-1# 환자번호 제거
 
ncol(bc2)
bc_n <- bc2[2:31]
 
# train(90%) / test(10%)
train_num <- round(0.9*nrow(bc_n),0)
 
bc_train <- bc_n[1:train_num,]
bc_test <- bc_n[(train_num+1):nrow(bc_n),]
 
bc_train_label <- bc2[1:train_num,1]
bc_test_label <- bc2[(train_num+1):nrow(bc_n),1]
 
# kmeans 사용
library(stats)
bc_test
 
# test 데이터를 2개로 군집화
result2 <- kmeans(bc_test,2)
 
# 라벨링된 것이 악성인지 양성인지에 대해서는 라벨과 비교해서 내가 알아내야함
result2$cluster # 라벨링이 1, 2로 됨
bc_test_label
# 보면 느낌적으로 B를 2로, M을 1로 클러스터링한 것을 알 수 있음
 
# 시각화
library(factoextra)
fviz_cluster(result2,data=bc_test,stand=T)
 
# test_label도 숫자로 바꿔줌
bc_test_label
label_check <- ifelse(bc_test_label=='M',1,2)
 
# 군집화의 정확도 확인
real <- length(label_check)
real
 
predict <- sum(label_check==result2$cluster)
predict
 
# 정확도
predict/real*100 # 91.22807
cs

 

1 : M(양성) / 2 : B(음성)

 

 

나는 이 예제를 클러스터링(정답 X)을 하면, 클러스터링된 것을 라벨(정답)과 비교해서 어떻게 클러스터링 했는지를 확인해야 한다는 것을 보여주기 위해 실행해보았다. 하지만 이것보다 더 중요한 사실도 이 예제에 담겨져 있다. 첫번째 실습은 정규화를 수행했고, 두번째 실습은 정규화를 수행하지 않았다. 그 결과 정규화를 하지 않은 데이터가 예측률이 더 높았다. 왜 그런걸까?

 

정규화를 하는 경우는 종속변수와 독립변수의 영향도를 확인하고 싶을 때이고, 실제로 예측을 하는 경우에는 정규화를 하지 않아야한다.

 

 

+ Recent posts