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
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 |
나는 이 예제를 클러스터링(정답 X)을 하면, 클러스터링된 것을 라벨(정답)과 비교해서 어떻게 클러스터링 했는지를 확인해야 한다는 것을 보여주기 위해 실행해보았다. 하지만 이것보다 더 중요한 사실도 이 예제에 담겨져 있다. 첫번째 실습은 정규화를 수행했고, 두번째 실습은 정규화를 수행하지 않았다. 그 결과 정규화를 하지 않은 데이터가 예측률이 더 높았다. 왜 그런걸까?
정규화를 하는 경우는 종속변수와 독립변수의 영향도를 확인하고 싶을 때이고, 실제로 예측을 하는 경우에는 정규화를 하지 않아야한다.
'인공지능 > 실습예제' 카테고리의 다른 글
(Python) 딥러닝 구현하기 (0) | 2020.08.20 |
---|---|
(R) k-means 활용하기 2 - 성적으로 학생 군집화 (0) | 2020.07.03 |
(R) k-means 활용하기 1 - R로 k-means 시각화 / 패키지 사용 (0) | 2020.07.03 |
(R) 연관규칙(Apriori) 활용하기 3 - 3D 네트워크 시각화 (0) | 2020.07.02 |
(R) 연관규칙(Apriori) 활용하기 2 - 독서시간과 사람을 만난 횟수의 연관성 (0) | 2020.07.02 |