Download Document

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
군집분석 (Clustering)
군집 분석 (Clustering)
설명모델 (description model)
2
실습 데이터
 Iris Data
 datasets 패키지
 Wine Data
 Hdclassif 패키지
 AdultUCI Data
 arules 패키지
setosa
virginica
Iris Data
versicolor
Iris Data

꽃받침
4가지 속성
1. Sepal.Length
2. Sepal.Width
3. Petal.Length
4. Petal.Width
꽃잎
Clustering 결과 평가
3개 class 존재
=> 3개 cluster를 생성하게 함
clustering
...
각 cluster가 원래 class에 속한 데이터를
복원할 수 있는지를 측정
군집분석 알고리즘의 유형
 거리함수(distance function) 기반
 계층형

Hierarchical clustering





Complete-linkage
Single-linkage
Centroid-linkage
Average-linkage
Ward’s method
 평면형
 Partitional clustering
 k-means
 k-medoids
 밀도(density) 기반

DBScan
평면형 Clustering:
i 단계
k-means
: centroid
(i+1) 단계
Data Mining Lab., Univ. of Seoul, Copyright ® 2008 8
Iris 데이터의 군집분석
 K-means 알고리즘의 활용
data(iris)
library(stats)
myiris <-iris
myiris$Species <-NULL # Species 컬럼 제거
myiris.kmeans <- kmeans(myiris, centers=3)
myiris.kmeans <- kmeans(myiris, 3) # 위와 동일한 표현
3개의 cluster를
생성
Iris 데이터의 군집분석
 K-means 알고리즘의 평가: 기존 class분류결과와 비교
table(iris$Species, myiris.kmeans$cluster)
conf.mat <- table(iris$Species, myiris.kmeans$cluster)
(accuracy <- sum(diag(conf.mat))/sum(conf.mat) * 100)
new.mat <- data.frame("c1"=conf.mat[,1], "c3"=conf.mat[,3], "c2"=conf.mat[,2])
new.mat <- as.matrix(new.mat)
(accuracy <- sum(diag(new.mat))/sum(new.mat) * 100)
as.OOO 형태
의
함수
Cluster 배치 변경
# 사실은, 아래와 같이 간단하게
> new.mat <- conf.mat[, c(1,3,2)]
Iris 데이터의 군집분석
 클러스터링은 “설명모델 (description model)”을 생성
 클러스터링 결과를 담은 객체변수를 출력
Iris 데이터의 군집분석
 K-means 모델의 시각화
클러스터 번호를 col속성에 할당
데이터 항목별로 color값을 할당
plot(myiris[c("Sepal.Length",
table(iris$Species,
myiris.kmeans$cluster)
"Sepal.Width")], col=myiris.kmeans$cluster)
conf.mat <- table(iris$Species, myiris.kmeans$cluster)
points(myiris.kmeans$centers[,c("Sepal.Length","Sepal.Width")],
col=1:3,
pch=“*”, cex=5)
Iris 데이터의 군집분석
 K-means 모델의 해석
myiris.kmeans$centers # 각 cluster의 중심값을 출력
ave <- 0
for(i in 1:ncol(myiris)) ave[i]<- sum(myiris.kmeans$centers[,i])/nrow(myiris.kmeans$centers)
ave # 출력
Iris 데이터의 군집분석
 K-medoids 알고리즘의 활용
library(cluster)
myiris.pam <- pam(myiris,3)
table (myiris.pam$clustering, iris$Species)
VS.
K-means 모델
K-medoids 모델
outlier에 강함
outlier에 약함
계층형 clustering
0step
a
1step
2step
3step
Bottom-up
(agglomerative)
ab
b
abcde
c
cde
e
de
d
4step
4step
3step
2step
1step
0step
Top-down
(divisive)
Data Mining Lab., Univ. of Seoul, Copyright ® 2008 15
Hierarchical Agglomerative Clustering
 5가지 유형
 Simple linkage
 Complete linkage
 Average linkage
 Centroid linkage
 Ward’s method
Ward’s
method
Sum of Square Error
(SSE) 계산
거리함수
 Euclidean 거리함수
 Manhattan 거리함수
 Minkowski 거리함수
 Canberra 거리함수
Iris 데이터의 군집분석
 HAC 알고리즘의 활용: single linkage
table(iris$Species,
cls$cluster)
sim_eu <- dist(myiris,
method="euclidean")
conf.mat <- table(iris$Species, cls$cluster)
dendrogram <-hclust(sim_eu^2, method=“single”)
plot(dendrogram)
cluster <- cutree(dendrogram, k=3)
table(iris$Species, cluster)
sim_eu <- dist(myiris, method="euclidean")
"euclidean","manhattan",
"canberra", "minkowski"
dendrogram <-hclust(sim_eu^2, method=“single”)
"ward.D2",
"single", "complete",
"average" , "median“, "centroid"
Iris 데이터의 군집분석
 HAC 모델의 시각화: dendrogram
Cutting line에 따라 cluster 개수가 결정
Iris 데이터의 군집분석
 small iris 데이터의 군집분석
iris.num <- dim(iris)[1] # nrow(iris) 와 동일
idx <-sample(1:iris.num, 50)
smalliris <- iris[idx,]
smalliris$Species <-NULL
sim <- dist(smalliris)
den <- hclust(sim^2, method="single")
plot(den, hang= -1)
plot(den, hang= -1, labels=iris$Species[idx])
Iris 데이터의 군집분석
 HAC 모델의 시각화: dendrogram
plot(den, hang= -1)
plot(den, hang= -1, labels=iris$Species[idx])
Iris 데이터의 군집분석
 HAC 알고리즘의 활용: average linkage
sim_eu <- dist(myiris, method="euclidean")
dendrogram <-hclust(sim_eu^2, method=“average”)
plot(dendrogram)
cluster <- cutree(dendrogram, k=3)
conf.mat <- table(iris$Species, cluster)
 HAC 알고리즘의 활용: complete linkage * 100)
(accuracy <- sum(diag(conf.mat))/sum(conf.mat)
Iris 데이터의 군집분석
 HAC 알고리즘의 활용: complete linkage
sim_eu <- dist(myiris,
table(iris$Species,
cls$cluster)
method="euclidean")
conf.mat <- table(iris$Species,
dendrogram
<-hclust(sim_eu^2,
cls$cluster)
method=“complete”)
plot(dendrogram)
cluster <- cutree(dendrogram, k=3)
conf.mat <- table(iris$Species, cluster)
(accuracy <- sum(diag(conf.mat))/sum(conf.mat) * 100)
 HAC 알고리즘의 활용: complete linkage
new.mat <- data.frame("c1"=conf.mat[,1], "c3"=conf.mat[,3], "c2"=conf.mat[,2])
new.mat <- as.matrix(new.mat)
(accuracy <- sum(diag(new.mat))/sum(new.mat) * 100)
Cluster 배치 변경
Iris 데이터의 군집분석
 HAC 알고리즘의 활용: Ward’s method
sim_eu <- dist(myiris, method="euclidean")
dendrogram <-hclust(sim_eu^2, method=“ward.D”)
plot(dendrogram)
cluster <- cutree(dendrogram, k=3)
conf.mat <- table(iris$Species, cluster)
 HAC 알고리즘의 활용: complete linkage * 100)
(accuracy <- sum(diag(conf.mat))/sum(conf.mat)
Iris 데이터의 군집분석
 HAC 알고리즘의 활용: centroid linkage
sim_eu <- dist(myiris, method="euclidean")
dendrogram <-hclust(sim_eu^2, method=“centroid”)
plot(dendrogram)
cluster <- cutree(dendrogram, k=3)
conf.mat <- table(iris$Species, cluster)
 HAC 알고리즘의 활용: complete linkage * 100)
(accuracy <- sum(diag(conf.mat))/sum(conf.mat)
Iris 데이터의 군집분석
 HAC 알고리즘의 활용: centroid linkage
거리함수 변경
sim_mi <- dist(myiris, method="minkowski")
dendrogram <-hclust(sim_mi^2, method=“centroid”)
plot(dendrogram)
 HAC 알고리즘의 k=3)
활용: complete linkage
cluster <- cutree(dendrogram,
conf.mat <- table(iris$Species, cluster)
(accuracy <- sum(diag(conf.mat))/sum(conf.mat) * 100)
밀도기반 Clustering
 DBSCAN: Cluster를 “density-connected set”으로 정의
 density: 정해진 반경()내에 데이터의 개수
Data Mining Lab., Univ. of Seoul, Copyright ® 2008
Iris 데이터의 군집분석
 Density-based clustering 알고리즘의 활용
library(fpc)
myiris <- iris[-5]
myiris.ds <- dbscan(myiris, eps=0.42, MinPts=5)
table(myiris.ds$cluster, iris$Species)
Iris 데이터의 군집분석
 Density-based clustering 모델의 평가
plot(myiris.ds, myiris)
Iris 데이터의 군집분석
 Density-based clustering 모델의 평가
plot(myiris.ds, myiris[c(1,4)])
Iris 데이터의 군집분석
 Density-based clustering 모델의 평가
plotcluster(myiris, myiris.ds$cluster) # projection
화학성분
함유량
Red Wine
White Wine
RoséWine
Wine Data
Wine Data

13가지 속성: 화학성분 함유량
1. Alcohol
2. Malic acid
3. Ash
4. Alcalinity of ash
5. Magnesium
6. Total phenols
7. Flavanoids
8. Nonflavanoid phenols
9. Proanthocyanins
10.Color intensity
11. Hue
12.OD280/OD315 of diluted wines
13.Proline
Wine 데이터의 군집분석
 데이터 준비 및 전처리
library(HDclassif)
data(wine)
head(wine)
mywine <- wine[,-1] # 1번째 컬럼 삭제 , mywine$class <- NULL
mywine <-scale(mywine)
Wine 데이터의 군집분석
 K-means 알고리즘의 활용
km <- kmeans(mywine, centers=3)
ss <-km$withinss
각 cluster 내부의
각 구성원 간 거리의
제곱의 합(sum of squares)
거리
 값이 작을 수록 품질의 좋다고 평가
거리
...
Wine 데이터의 군집분석
 K-means 모델의 평가
conf.mat <- table(wine$class, km$cluster)
(accuracy <- sum(diag(conf.mat))/sum(conf.mat) * 100)
Cluster
Class
Wine 데이터의 군집분석
 K-means 알고리즘의 활용: 시각화
plot(mywine[c("V1","V2")], col=km$cluster)
points(km$centers[ , c("V1","V2")], col=1:3, pch=8, cex=2)
Wine 데이터의 군집분석
 K-means 알고리즘의 활용: cluster 품질평가
ss <-0
for(i in 1:15) ss[i] <- sum(kmeans(mywine, centers=i)$withinss)
plot(1:15, ss, type="b", xlab="클러스터 개수", ylab="각 클러스터 SS의 합")
Wine 데이터의 군집분석
 K-means 알고리즘의 활용: cluster 품질평가
ss <-0
for(i in 1:15) ss[i] <- sum(kmeans(mywine, centers=i)$withinss)
plot(1:15, ss, type="b", xlab="클러스터 개수", ylab="각 클러스터 SS의 합")
Wine 데이터의 군집분석
 HAC 알고리즘의 활용
sim_eu <- dist(mywine, method="euclidean")
dendrogram <-hclust(sim_eu^2, method="ward.D2")
cluster <- cutree(dendrogram, k=3)
conf.mat <- table(wine$class, cluster)
(accuracy <- sum(diag(conf.mat))/sum(conf.mat) * 100)
Cluster
VS.
K-means 모델
HAC 모델
Wine 데이터의 군집분석
 특징 선택 (feature selection)
 데이터 차별화를 높여주는 특징을 선별
mywine <- wine
subfeatures <- cfs(class~., wine)
subfeatures # 선택된 feature를 확인
mywine <- wine[subfeatures]
 선택된 특징만을 사용하여 다시 클러스터링
km <-kmeans(mywine,3)
conf.mat <- table(wine$class, km$cluster)
(accuracy <- sum(diag(conf.mat))/sum(conf.mat) * 100)
Cluster
K-means 모델
Cluster
K-means 모델
Wine 데이터의 군집분석
 특징 선택 (feature selection)
 데이터 차별화를 높여주는 특징을 선별
mywine <- wine
subfeatures <- consistency(class~., wine)
subfeatures # 선택된 feature를 확인
mywine <- wine[c(-1,-4)]
 선택된 특징만을 사용하여 다시 클러스터링
km <-kmeans(mywine,3)
conf.mat <- table(wine$class, km$cluster)
(accuracy <- sum(diag(conf.mat))/sum(conf.mat) * 100)
Cluster
K-means 모델
Cluster
K-means 모델
Feature Selection
 범주형 데이터에 대한 feature selection
 weights <- chi.squared(Class~., HouseVotes84)
 weights <- information.gain(Species~., iris)
 weights <- gain.ratio(Species~., iris)
 weights <- symmetrical.uncertainty(Species~., iris)


subset <- cutoff.k.percent(weights, 0.75)
subset <- cutoff.biggest.diff(weights)
 범주형, 연속형 데이터에 대한 feature selection
 subset <- cfs(Species~., iris)
 weights <- relief(Species~., iris, neighbours.count = 5, sample.size = 20)

weights <- random.forest.importance(Class~., HouseVotes84, importance.type = 1)
 연속형 데이터에 대한 feature selection
 weights <- linear.correlation(medv~., d)
 weights <- rank.correlation(medv~., d)
poor
rich
Adult Data
Adult Data
 14가지 속성: 인구학적 정보
1. age:
2. workclass
3. fnlwgt
4. education
5. education-num.
6. marital-status
7. occupation
8. relationship
9. race
10. sex
11. capital-gain
12. capital-loss
13. hours-per-week
14. native-country
AdultUCI 데이터의 군집분석
 K-means 알고리즘의 활용
library(arules)
data(AdultUCI, package=“arules”)
idx <-sample(nrow(AdultUCI[complete.cases(AdultUCI),]), 1000)
#cc <- complete.cases(AdultUCI) # 누락된 값이 없는 행만을 선택
complete.Adult <-AdultUCI[idx,]
adult.km <-kmeans(complete.Adult[,c(1,3,5,11,12,13)],2) # 숫자 타입 컬럼
table(adult.km$cluster, complete.Adult[,"income"])
K-means 모델
AdultUCI 데이터의 군집분석
 K-medoids 알고리즘의 활용
library(arules)
data(AdultUCI, package=“arules”)
idx <-sample(nrow(AdultUCI[complete.cases(AdultUCI),]), 1000)
#cc <- complete.cases(AdultUCI) # 누락된 값이 없는 행만을 선택
complete.Adult <-AdultUCI[idx,]
adult.pam <-pam(complete.Adult[,c(1,3,5,11:13)],2)
table(adult.pam$clustering, AdultUCI[idx, "income"])
VS.
K-medoids 모델
K-means 모델
Related documents