๋น์ง๋ํ์ต(unSupervised Learning) ์ ์ฐจ
๋ฐ์ดํฐ์ > ์๊ณ ๋ฆฌ์ฆ ์ ์ฉ > ํจํด๋ถ์ > ๊ท์น๋ฐ๊ฒฌ > ๋ชจ๋ธ ์์ฑ > ํ๊ฐ > YES : ๋ฏธ๋์์ธก / NO : ์ฒ์๋ถํฐ ๋ค์
01. ๊ตฐ์ง ๋ถ์ ๊ฐ์
๊ตฐ์ง ๋ถ์?
๋์ ๊ฐ์ฒด๋ฅผ ์ ์ฌํ๊ฑฐ๋ ์๋ก ๊ด๋ จ ์๋ ํญ๋ชฉ ๋ผ๋ฆฌ ๋ฌถ์ด์ ๋ช ๊ฐ์ ์ง๋จ์ผ๋ก ๊ทธ๋ฃนํํ๋ ๊ฒ
* ๋ถ๋ฅ๋ถ์๊ณผ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ : ์ ๋ต์ด ์๋ ๊ฒ๋ค์ ์ต๋ํ ๋น์ทํ ๊ฒ ๋ผ๋ฆฌ ๋ฌถ์ด์ค๋ค. (๋ฐ์ดํฐ ์์ ์ ๋ต์ด ์์ผ๋ฉด ๋ฌถ์ด์ฃผ๋ ๊ฒ์ด ๋ถ๋ฅ๋ถ์)
๊ตฐ์ง๋ถ์ ํน์ง
์ ์ฒด์ ์ธ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ํ์ ํ๋๋ฐ ์ด์ฉ
์ข ์๋ณ์(y๋ณ์)๊ฐ ์๋ ๋น์ง๋ํ์ต(๋ฐ์ดํฐ ๋ง์ด๋) ๊ธฐ๋ฒ
๊ด์ธก๋์ ๊ฐ ์ ์ฌ์ฑ์ ๊ธฐ์ด๋ก ๋น์ทํ ๊ฒ ๋ผ๋ฆฌ ๊ทธ๋ฃนํ(Clustering)
์ ์ฌ์ฑ = ์ ํด๋ฆฌ๋ ๊ฑฐ๋ฆฌ์ ์ด์ฉ
์๊ฒฐ๊ณผ์ ๋ํ ๊ฐ์ค ๊ฒ์ ์์ (ํ๋น์ฑ ๊ฒ์ฆ ๋ฐฉ๋ฒ ์์)
์ฒ๋ : ๋ฑ๊ฐ, ๋น์จ์ฒ๋(์ฐ์์ ์ธ ์)
๊ณ์ธต์ ๊ตฐ์ง๋ถ์(ํ์์ ) / ๋น๊ณ์ธต์ ๊ตฐ์ง๋ถ์(ํ์ธ์ )
์ฃผ์ ์๊ณ ๋ฆฌ์ฆ : hierarchical, k-means
์ ํด๋ฆฌ๋ ๊ฑฐ๋ฆฌ๊ณ์ฐ์
๊ด์ธก๋์ ๊ฐ ์ ์ฌ์ฑ์ ๊ธฐ์ด๋ก ๋น์ทํ ๊ฒ ๋ผ๋ฆฌ ๊ทธ๋ฃนํ(Clustering)
์ ์ฌ์ฑ = ์ ํด๋ฆฌ๋ ๊ฑฐ๋ฆฌ ์ด์ฉ
* ๊ด์ธก๋์ p์ q์ ๊ฐ์ ์ฐจ๊ฐ ์์ผ๋ฉด, ๋ ๊ด์ธก ๋์์ ์ ์ฌํ๋ค๊ณ ์ ์ํ๋ ์
๊ณ์ธต์ ๊ตฐ์ง๋ถ์ ๊ตฐ์งํ ๋ฐฉ๋ฒ
* ๋ฐ์ดํฐ๋ถ์ ์ํ๋ฌธ์ ์ ์์ฃผ ์ถ์
์ต๋จ์ฐ๊ฒฐ๋ฒ | ๋ ๊ตฐ์ง ๊ฐ์ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ด์ธก์น ๊ฐ ์ฐ๊ฒฐ |
์ต์ฅ์ฐ๊ฒฐ๋ฒ | ๋ ๊ตฐ์ง ๊ฐ์ ๊ฐ์ฅ ๋จผ ๊ฑฐ๋ฆฌ์ ๊ด์ธก์น ๊ฐ ์ฐ๊ฒฐ |
ํ๊ท ์ฐ๊ฒฐ๋ฒ | ๋ ๊ตฐ์ง ๊ฐ์ ๊ฐ๋ฅํ ๋ชจ๋ ๊ฑฐ๋ฆฌ์ ํ๊ท ๊ธฐ์ค ์ฐ๊ฒฐ |
์ค์ฌ์ฐ๊ฒฐ๋ฒ | ๊ฐ ๊ตฐ์ง์ ์ค์ฌ(centroid) ๊ฐ ๊ฑฐ๋ฆฌ ๊ธฐ์ค ์ฐ๊ฒฐ |
์๋์ฐ๊ฒฐ๋ฒ | ๋ ๊ตฐ์ง์ด ํฉ์ณ์ง ๋ ์ค์ฐจ์ ๊ณฑํฉ(ESS)์ ์ฆ๋ถ์ผ๋ก ์ฐ๊ฒฐ * ESS์ ์ฆ๋ถ์ ๋ฐ๋ผ์ ๋ ๊ตฐ์ง์ ๊ฑฐ๋ฆฌ ์ธก์ ์ผ๋ก ์ฐ๊ฒฐ, ์ค์ฌ์ฐ๊ฒฐ๋ฒ๊ณผ ์ ์ฌํจ |
* ์ ํด๋ฆฌ๋ ๊ฑฐ๋ฆฌ๊ณ์ฐ์ ์ด์ฉ : ์ต๋จ,์ต์ฅ,ํ๊ท ,์ค์ฌ ์ฐ๊ฒฐ๋ฒ
์ต๋จ์ฐ๊ฒฐ๋ฒ (๋จ์ผ๊ธฐ์ค๊ฒฐํฉ๋ฐฉ์)
๊ฐ ๊ตฐ์ง์์ ์ค์ฌ์ผ๋ก๋ถํฐ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ๊น์ด ๊ฒ(2,3,6) 1๊ฐ์ฉ ๋น๊ตํ์ฌ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฒ ๋ผ๋ฆฌ ๊ตฐ์งํ
์ต์ฅ์ฐ๊ฒฐ๋ฒ (์์ ๊ธฐ์ค๊ฒฐํฉ๋ฐฉ์) : ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉ. ๊ฐ ๊ตฐ์ง์์ ์ค์ฌ์ผ๋ก๋ถํฐ ๊ฐ์ฅ ๋จผ ๋์(1,4,5) ๋ผ๋ฆฌ ๋น๊ตํ์ฌ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฒ ๋ผ๋ฆฌ ๊ตฐ์งํ
ํ๊ท ์ฐ๊ฒฐ๋ฒ (ํ๊ท ๊ธฐ์ค๊ฒฐํฉ๋ฐฉ์) : ํ ๊ตฐ์ง ์์ ์ํด ์๋ ๋ชจ๋ ๋์๊ณผ ๋ค๋ฅธ ๊ตฐ์ง์ ์ํด์๋ ๋ชจ๋ ๋์์ ์ ์งํฉ์ ๋ํ ๊ฑฐ๋ฆฌ๋ฅผ ํ๊ท ๊ณ์ฐํ์ฌ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฒ ๋ผ๋ฆฌ ๊ตฐ์งํ (1 -> 5,6 ํ๊ท , 2 -> 5, 6 ํ๊ท )
[์ค์ต] ๊ทธ๋ฃนํ๋ฅผ ํตํ ์์ธก(๊ทธ๋ฃน ํน์ฑ ์ฐจ์ด ๋ถ์-๊ณ ๊ฐ์ง๋จ ์ดํด)
1. ์ ํด๋ฆฌ๋ ๊ฑฐ๋ฆฌ (p-q)^2
์ ํด๋ฆฌ๋ ๊ฑฐ๋ฆฌ(Euclidean distance)๋ ๋ ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ๋
๋ฐฉ๋ฒ์ผ๋ก ์ด ๊ฑฐ๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ ์ ํด๋ฆฌ๋ ๊ณต๊ฐ์ ์ ์ํ๋ค.
(1) matrix ์์ฑ
x <- matrix(1:9, nrow=3, by=T)
x
[,1] [,2] [,3]
[1,] 1 2 3 -> p
[2,] 4 5 6 -> q
[3,] 7 8 9
3 3 3 -> p+p+p = 27 -> √27
sqrt(27) #1,2๋ฒ ํ์ ๋ํ ๊ฑฐ๋ฆฌ : 5.196152
sqrt(36+36+36) #1,3๋ฒ ํ์ ๋ํ ๊ฑฐ๋ฆฌ : 10.3923
(2) matrix ๋์ ์ ํด๋ฆฌ๋ ๊ฑฐ๋ฆฌ ์์ฑ ํจ์
ํ์) dist(x, method="euclidean") -> x : numeric matrix, data frame
dist <- dist(x, method="euclidean") #xํ๋ ฌ/๋งคํธ๋ฆญ์ค๋ฅผ ๋์์ผ๋ก ์ ํด๋ฆฌ๋ ๊ฑฐ๋ฆฌ ๊ณ์ฐ. (method ์๋ต๊ฐ๋ฅ)
dist
1 2
2 5.196152
3 10.392305 5.196152
1ํ(p) vs 2ํ(q)
sqrt(sum((x[1, ] - x[2,])^2)) #5.196152
1ํ(p) vs 3ํ(q)
sqrt(sum((x[1, ] - x[3,])^2)) #10.3923 (ํต์์ ์ผ๋ก 2๋ฐฐ ์ฐจ์ด)
* ์ ํด๋ฆฌ๋ ๊ฑฐ๋ฆฌ ๊ณ์ฐ์ ํ์ฉ๋ถ์ผ
1. ๋ถ๋ฅ๋ชจ๋ธ : kNN
2. ๊ตฐ์ง๋ชจ๋ธ : ๊ณ์ธต์ / ๋น๊ณ์ธต์
3. ์ถ์ฒ๋ชจ๋ธ : ์ ์ฌ๋ ๊ณ์ฐ
4. ์ขํ ๊ฑฐ๋ฆฌ๊ณ์ฐ : ์๋์ ๊ฒฝ๋
2. ๊ณ์ธต์ ๊ตฐ์ง๋ถ์(ํ์์ ๋ถ์)
๊ณ์ธต์ ๊ตฐ์ง๋ถ์(Hierarchical Clustering) ํธ๋ฆฌ ๊ตฌ์กฐ์์ ์ฌ์ฉ๋๋ ๋ํ ๋ฐฉ๋ฒ ex.ํ์ฌ ์กฐ์ง๋
๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ๊ฐ๊น์ด ๋์๋ถํฐ ๊ฒฐํฉํ์ฌ ๋๋ฌด๋ชจ์์ ๊ณ์ธต๊ตฌ์กฐ๋ฅผ ์ํฅ์(Bottom-up)์ผ๋ก ๋ง๋ค์ด๊ฐ๋ฉด์ ๊ตฐ์ง์ ํ์ฑ
(1) ๊ตฐ์ง๋ถ์(Clustering)๋ถ์์ ์ํ ํจํค์ง ์ค์น
install.packages("cluster") #hclust() : ๊ณ์ธต์ ํด๋ฌ์คํฐ ํจ์ ์ ๊ณต
library(cluster) #์ผ๋ฐ์ ์ผ๋ก 3~10๊ฐ ๊ทธ๋ฃนํ์ด ์ ์
(2) ๋ฐ์ดํฐ ์
์์ฑ
r <- runif(15, min = 1, max = 50) #1์ด์ 50์ดํ์ ๋์ 15๊ฐ ์์ฑ์ฑ
x <- matrix(r, nrow=5, by=T) #[5,3]
x
(3) matrix ๋์ ์ ํด๋ฆฌ๋ ๊ฑฐ๋ฆฌ ์์ฑ ํจ์
dist <- dist(x, method="euclidean") # method ์๋ต๊ฐ๋ฅ
dist
1 2 3 4
2 4.114234
3 35.401012 31.626887
4 37.947768 34.295621 18.655243
5 25.066933 27.803212 49.155692 56.803235
* 5๊ฐ์ ๊ด์ธก์น ์ค 1,2๊ฐ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ๊ฐ๊น๋ค (=์ ์ฌ์ฑ์ด ๋๋ค)
* ์ ๋ง์ผ๊น?
[,1] [,2] [,3]
[1,] 34.185929 17.089664 35.37096
[2,] 30.240518 18.241765 35.55348 -> 1,2ํ์ ๊ฐ๋ค์ด ์๋ก ์ ์ฌํจ์ ๋ฐ๊ฒฌํ ์ ์๋ค
[3,] 1.831156 25.291404 23.57555
[4,] 5.630017 41.771791 31.44851
[5,] 45.757080 4.141226 17.29342
(4) ์ ํด๋ฆฌ๋ ๊ฑฐ๋ฆฌ matrix๋ฅผ ์ด์ฉํ ํด๋ฌ์คํฐ๋ง
hc = hclust(dist, method="complete") #์์ ๊ฒฐํฉ๊ธฐ์ค
๊ตฐ์ง ๋ฐฉ๋ฒ(Cluster method)
method = "complete" : ์์ ๊ฒฐํฉ๊ธฐ์ค(์ต๋๊ฑฐ๋ฆฌ ์ด์ฉ) <- default(์๋ต ์)
method = "single" : ๋จ์๊ฒฐํฉ๊ธฐ์ค(์ต์๊ฑฐ๋ฆฌ ์ด์ฉ)
method = "average" : ํ๊ท ๊ฒฐํฉ๊ธฐ์ค(ํ๊ท ๊ฑฐ๋ฆฌ ์ด์ฉ)
help(hclust)
plot(hc) # ํด๋ฌ์คํฐ ํ๋กํ
(Dendrogram) -> 1๊ณผ2 ๊ตฐ์ง(ํด๋ฌ์คํฐ) ํ์ฑ
[์ค์ต] ์ค1ํ๋
์ ์ฒด๊ฒ์ฌ ๊ฒฐ๊ณผ ๊ตฐ์ง๋ถ์
๋จ๊ณ1 : ๋ฐ์ดํฐ์
๊ฐ์ ธ์ค๊ธฐ
body <- read.csv("c:/ITWILL/2_Rwork/data/bodycheck.csv")
names(body)
๋จ๊ณ2 : ๊ฑฐ๋ฆฌ๊ณ์ฐ
idist <- dist(body)
idist
๋จ๊ณ3 : ๊ณ์ธต์ ๊ตฐ์ง๋ถ์
hc <- hclust(idist)
plot(hc, hang=-1) # ์์๊ฐ ์ ์ธ
3๊ฐ ๊ทธ๋ฃน ์ ์ , ์ ์ ์ง์
rect.hclust(hc, k=3, border="red") # 3๊ฐ ๊ทธ๋ฃน ์ ์ , ์ ์ ์ง์
๋จ๊ณ4 : ๊ฐ ๊ทธ๋ฃน๋ณ ์๋ธ์
๋ง๋ค๊ธฐ (์๋์ ๋ฐ์ดํฐ)
g1<- body[c(10,4,8,1,15), ]
g2<- body[c(11,3,5,6,14), ]
g3<- body[c(2,9,13,7,12), ]
๋จ๊ณ5 : ๊ตฐ์ง๋ณ ํน์ฑ๋ถ์
summary(g1)
๋ฒํธ ์
๋ ฅ ์ ์ฅ ์ฒด์ค ์๊ฒฝ์ ๋ฌด
Mean : 7.6 Mean :25.6 Mean :149.8 Mean :36.6 Mean :1
[ํด์] ์์ํ ์ง๋จ
summary(g2)
Mean : 7.8 Mean :33.8 Mean :161.2 Mean :48.8 Mean :1.4
[ํด์] ์ค๊ฐ ์ ๋์ ์ง๋จ
summary(g3)
Mean : 8.6 Mean :40.6 Mean :158.8 Mean :56.8 Mean :2
[ํด์] ๋ชธ์ง์ด ํฐ ์ง๋จ
cutree()ํจ์
๋๋ dataset ๊ทธ๋ฃน๋ณ ์๋ธ์
์์ฑ
ํ์) cutree(object, k=๊ตฐ์ง์)
g_num = cutree(hc, k=3) #1~3์ผ๋ก ๊ฐ๊ฐ์ ๊ด์ธก์น๋ฅผ ๋ฐํ
g_num # 1 2 3 1 3 3 2 1 2 1 3 2 2 3 1
์นผ๋ผ์ถ๊ฐ
body$cluster = g_num
head(body)
๋ฒํธ ์
๋ ฅ ์ ์ฅ ์ฒด์ค ์๊ฒฝ์ ๋ฌด cluster
1 1 28 146 34 1 1 -> 1๋ฒ ๊ตฐ์ง์ ์ํ๋ค
2 2 46 169 57 2 2
3 3 39 160 48 2 3
4 4 25 156 38 1 1
5 5 34 161 47 1 3
6 6 29 168 50 1 3
g1 = subset(body, cluster==1)
g1$'๋ฒํธ'
g2 = subset(body, cluster==2)
g2$'๋ฒํธ'
g3 = subset(body, cluster==3)
g3$'๋ฒํธ'
summary(g1) #g1==g1
summary(g2) #g2==g2
summary(g3) #g3==g3 ์ด์ ์ ๋จ๊ณ 4๋ฒ๊ณผ ๊ฐ์ ๊ฐ ์ถ๋ ฅ
'๋ฐ์ดํฐ๋ถ์๊ฐ ๊ณผ์ > R' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DAY27. R ์ฐ๊ด๋ถ์ (0) | 2021.10.22 |
---|---|
DAY26. R ๊ตฐ์ง๋ถ์(2) (0) | 2021.10.21 |
DAY24. R ๋ถ๋ฅ๋ถ์ (0) | 2021.10.19 |
DAY23. R ๋ก์ง์คํฑํ๊ท๋ถ์ (0) | 2021.10.18 |
DAY22. R ๊ธฐ๊ณํ์ต์ด๋ก , ์ ํํ๊ท๋ถ์ (0) | 2021.10.15 |