|
⇤ ← 2018-11-25 17:06:14에 수정된 1번째 판
크기: 6799
설명:
|
크기: 6832
설명:
|
| 지워진 줄은 이렇게 표시됩니다. | 추가된 줄은 이렇게 표시됩니다. |
| 줄 1: | 줄 1: |
| #acl +All:read | ##acl +All:read |
| 줄 35: | 줄 35: |
| {{{#!highlight rout | {{{#!highlight rout numbers=disable |
| 줄 67: | 줄 67: |
| {{{#!highlight rout | {{{#!highlight rout numbers=disable |
Clustering
Classification vs. Clustering
분류 |
Learning 기법 |
요약 |
Classification |
Supervised |
기분류된 데이타로 회귀 모델을 만들어 분류 |
Clustering |
Un-supervised |
데이타 모양(거리)로 unbiased 분류 시도 |
Classification
- Linear Regression을 응용한 logistic regression, naive bayes, support vector machines, artificial neural networks, random forests 등을 이용
- 기존 데이타(training dataset)으로 학습한 후 그 regression 함수로 새로운 데이타(test dataset)을 분류
Clustering
- training dataset이 없거나 구하기가 어려운 경우, 데이타 자체로 분류
- 한줄 요약: 거리가 가까운 데이터끼리 같은 그룹으로 분류한다.
거리 = sqrt(x12 + x22 + x32 + ... + xn2)
k-means Clustering
- 데이타를 k개로 분류하고자 한다면
- k개의 random point를 정하고 시작한다.
- 모든 데이타 점을 조사하여 k개의 point중 어느 것과 제일 가까운지 결정하여, 첫번째 분류를 완료한다.
- k개의 첫번째 분류에서 각 분류의 평균점을 구한다. 이 평균점을 새로운 k개의 point로 간주하고 위 과정을 반복한다.
- 더 이상 분류가 바뀌지 않으면 분류를 종료한다.
> str(fit)
List of 9
$ cluster : int [1:n] 5 2 1 5 4 5 5 3 1 1 ... (k개의 cluster)
$ centers : num [1:5, 1:2] 51.5 20.4 79.7 65.2 39.8 ... (각 cluster center의 x,y 좌표)
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:5] "1" "2" "3" "4" ...
.. ..$ : NULL
$ totss : num 21631
$ withinss : num [1:5] 51.6 429.1 221.6 174.7 209.9
$ tot.withinss: num 1087
$ betweenss : num 20544
$ size : int [1:5] 11 7 12 12 16
$ iter : int 2
$ ifault : int 0
Density-Based Spatial Clustering and Application with Noise (DBSCAN)
- 같은 그룹으로 묶고 싶은 최대 거리 ε과 같은 그룹을 형성할 수 있는 점의 최소 갯수 minPts를 정한다.
- 어떤 점 p의 거리 ε사이에 minPts개의 점이 있으면 일단 한 그룹을 만든다.
- 그 그룹의 모든 점의 ε 거리에 다른 점이 있으면 역시 같은 그룹으로 묶는다. (친구의 친구는 친구)
- 더 이상 확장이 안 될때까지 확장한다.
- 계산이 끝난 후에 아무 그룹에도 속하지 않은 점은 outlier(아싸) 처리한다.
> str(fit)
List of 3
$ cluster: int [1:n] 1 2 3 1 3 1 1 3 3 3 ... (적절한 수의 cluster)
$ eps : num 우리가 입력한 값 저장됨 (참고용)
$ minPts : num 우리가 입력한 값 저장됨 (참고용)
- attr(*, "class")= chr [1:2] "dbscan_fast" "dbscan"
R 실습
data 읽어오기
ggplot2
Clustering 결과를 눈으로 확인하려면 그래프가 쉬움
- r 기본 그래픽 함수대신 편리한 ggplot2를 사용해보자.
형식: ggplot(data, aes(x열, y열, color=z열)) + 다양한그림함수()
1 # 설치가 안 되어 있다면 한번만 실행
2 # install.packages('ggplot2')
3 library(ggplot2)
4
5 ggplot(grade, aes(class, midterm, color=class)) + geom_boxplot() # boxplot
6 ggplot(grade, aes(class, midterm, color=class)) + geom_violin() # violin plot
7 ggplot(grade, aes(class, midterm, color=class)) + geom_violin() + geom_jitter() # geom함수 두개 중첩
8
9 ggplot(grade, aes(midterm, attend)) + geom_point() # scatter plot (단색)
10 ggplot(grade, aes(midterm, attend, color=class)) + geom_point(alpha=.7) + xlim(0,100) + ylim(0,11)
11 # grade의 midterm과 attend로 x,y plot을 찍되, 색은 class 별로 다르게 해달라. 투명도는 70% 이고, x,y range는 저렇다.
12 ggplot(grade, aes(midterm, attend, color=hw8)) + geom_point(alpha=.7) + xlim(0,100) + ylim(0,11)
13 ggplot(grade, aes(midterm, hw8, color=attend)) + geom_point(alpha=.7) + xlim(0,100) + ylim(0,20)
k-means clustering
1 fit <- kmeans(grade[,c(3,5)], 5) # grade의 3열 5열 두개를 이용하여 5개로 k-means clustering 하라
2 fit <- kmeans(cbind(grade$midterm, grade$attend), 5)
3 # grade$midterm 와 grade$attend 를 두개의 컬럼으로 붙힌(cbind) 후, 5개로 k-means clustering 하라
4 str(fit)
5 ggplot(grade, aes(midterm, attend, color = fit$cluster)) + geom_point() + xlim(0,100) + ylim(0,11)
6 # grade의 midterm과 attend로 x,y plot을 찍되, 색은 fit$cluster 별로 다르게 해달라.
- fit$cluster가 숫자 데이타로 인식되어 continuous coloring이 되어 버렸다.
- 이 값을 분류(factor) 데이타로 바꾼후 재시도하자.
dbscan clustering
1 # 설치가 안 되어 있다면 한번만 실행
2 # install.packages("dbscan")
3 library("dbscan")
4
5 fit <- dbscan(grade[,c(3,5)], eps = 3.2, minPts = 2)
6 str(fit)
7 grade$cluster <- factor(fit$cluster)
8 ggplot(grade, aes(midterm, attend, color = cluster)) + geom_point() + xlim(0,100) + ylim(0,12)
9
10 ggsave('grade_dbscan.png', width=20, height=5, units = "cm") # w/h 단위는 cm
- cluster 0은 outlier다.
| /CentralLimitTheorem /ChiSquared /Clustering /InstallR /InstallRStudio /Lies /NormalDistribution /RBasic /RBasic1 /RBasic2 /RBasic3 /RCloud /RIntro /RKorean /T-Test |
