Density-Based Spatial Clustering of Applications with Noise
๋ฐ๋ ๊ธฐ๋ฐ ํด๋ฌ์คํฐ๋ง
์ ๋ณดํต์ ํ๊ณผ / ๋ฐ์ฌ๊ณผ์ 4ํ๊ธฐ / ์ค์ง์ฐ
1. ์ด๋ก ์ ๋ฐฐ๊ฒฝ
1.1 ์ ์
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)โข
1996๋
์ Martin Ester์ ๊ทธ์ ๋๋ฃ๋ค์ ์ํด ์ ์๋ ๋ฐ๋ ๊ธฐ๋ฐ ๊ตฐ์งํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก,
๋ฐ์ง๋ ๋ฐ์ดํฐ ํฌ์ธํธ๋ฅผ ํด๋ฌ์คํฐ๋ก ์๋ณํ๊ณ ๋ฐ๋๊ฐ ๋ฎ์ ํฌ์ธํธ๋ ๋
ธ์ด์ฆ๋ก ๊ฐ์ฃผํจ
ํนํ DBSCAN์ ๋ถ๊ท์นํ ํํ์ ๋ฐ์ดํฐ ํด๋ฌ์คํฐ๋ฅผ ํ์ํ๋ ๋ฐ ์ ์ฉํ๋ฉฐ, ํด๋ฌ์คํฐ์ ์๋ฅผ ๋ฏธ๋ฆฌ ์ง์ ํ ํ์๊ฐ ์๋ค๋ ์ฅ์ ์ด ์์
โข
๋จธ์ ๋ฌ๋์ ์ฃผ๋ก ์ฌ์ฉ๋๋ ํด๋ฌ์คํฐ๋ง ์๊ณ ๋ฆฌ์ฆ์ผ๋ก Multi Dimension์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ ๊ธฐ๋ฐ์ผ๋ก ์๋ก ๊ฐ๊น์ด ๋ฐ์ดํฐ ํฌ์ธํธ๋ฅผ ํจ๊ป ๊ทธ๋ฃนํํ๋ ์๊ณ ๋ฆฌ์ฆ
โข
๋ฐ๋๊ฐ ๋ค์ํ๊ฑฐ๋ ๋ชจ์์ด ๋ถ๊ท์นํ ํด๋ฌ์คํฐ๊ฐ ์๋ ๋ฐ์ดํฐ์ ๊ฐ์ด ๋ชจ์์ด ์ ์ ์๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅ
1.2 ์ฃผ์ ๊ฐ๋
๋ฐ๋ ๊ธฐ๋ฐ ํด๋ฌ์คํฐ๋งโข
DBSCAN์ ๋ฐ๋๊ฐ ๋์ ์์ญ์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฐ์ง์ ํ์ฑ, ๋ฐ์ดํฐ ๋ถํฌ์ ๋ฐ๋๋ฅผ ๋ถ์ํ์ฌ ํฌ์ธํธ๋ค์ด ์ผ๋ง๋ ์๋ก ๊ฐ๊น๊ฒ ๋ชจ์ฌ ์๋์ง๋ฅผ ์ธก์ ํ๊ณ , ๋ฐ์ง๋ ์์ญ์ ํด๋ฌ์คํฐ๋ก ์ ์
โข
๋ฐ์ง ์ง์ญ: eps(๋ฐ๊ฒฝ) ๋ด์ ์ผ์ ํ ์ ์ด์์ ํฌ์ธํธ(min_samples, minPts)๊ฐ ์กด์ฌํ๋ ์ง์ญ์ ์๋ฏธ
๊ทธ๋ฆผ ์ถ์ฒ : https://bcho.tistory.com/1205
minPts = 4 ๋ผ๊ณ ํ๋ฉด, ํ๋์ P๋ฅผ ์ค์ฌ์ผ๋ก ๋ฐ๊ฒฝ epsilon ๋ด์ ์ ์ด 4๊ฐ ์ด์ ์์ผ๋ฉด ํ๋์ ๊ตฐ์ง์ผ๋ก ํ๋จํ ์ ์๋๋ฐ, ์๋ ๊ทธ๋ฆผ์ ์ ์ด 5๊ฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ ํ๋์ ๊ตฐ์ง์ผ๋ก ํ๋จ์ด ๋๊ณ , P๋ core point
ํต์ฌ ํฌ์ธํธ(Core Point), ๊ฒฝ๊ณ ํฌ์ธํธ(Border Point), ๋
ธ์ด์ฆ ํฌ์ธํธ(Noise Point)โข
ํต์ฌ ํฌ์ธํธ: ์ง์ ๋ ๋ฐ๊ฒฝ(eps) ๋ด์ ์ต์ํ์ ํฌ์ธํธ ์(min_samples)๋ฅผ ๊ฐ์ง ํฌ์ธํธ๋ก, ํด๋ฌ์คํฐ ํ์ฑ์ ์ค์ฌ ์ญํ ์ ํจ
โข
๊ฒฝ๊ณ ํฌ์ธํธ: ๋ฐ๊ฒฝ ๋ด์ min_samples์๋ ๋ฏธ์น์ง ์์ง๋ง, ํต์ฌ ํฌ์ธํธ์ ์ธ์ ํด ์์ด ํด๋ฌ์คํฐ์ ํฌํจ๋๋ ํฌ์ธํธ
โข
๋
ธ์ด์ฆ ํฌ์ธํธ: ์ด๋ ํด๋ฌ์คํฐ์๋ ํฌํจ๋์ง ์๋ ํฌ์ธํธ๋ก, ๋ฐ์ง๋์ง ์์ ์ธ๊ณฝ ์์ญ์ ํฌ์ธํธ
๊ทธ๋ฆผ ์ถ์ฒ : https://www.youtube.com/watch?v=OMO_atK0tVY
๋ฐ๋ ์ฐ๊ฒฐ ๋ฐ ๋ฐ๋ ๋๋ฌ์ฑโข
๋ฐ๋ ์ฐ๊ฒฐ(density-connected): ๋ ํฌ์ธํธ๊ฐ ์๋ก ํต์ฌ ํฌ์ธํธ๋ฅผ ํตํด ์ฐ๊ฒฐ๋์ด ํด๋ฌ์คํฐ๋ฅผ ํ์ฑํ ์ ์๋ ๊ด๊ณ๋ฅผ ์๋ฏธ
โข
๋ฐ๋ ๋๋ฌ์ฑ(density-reachable): ํต์ฌ ํฌ์ธํธ์์ ์์ํด ๋ฐ๊ฒฝ ๋ด ๋ค๋ฅธ ํฌ์ธํธ๋ก ์ด๋ํ๋ฉฐ ํด๋ฌ์คํฐ ๋ด ๋ชจ๋ ํฌ์ธํธ์ ๋๋ฌํ ์ ์์
โข
DBSCAN์ ๋ฐ๋๊ฐ ๋์ ์์ญ์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฐ์ง์ ํ์ฑํฉ๋๋ค. ๋ฐ์ดํฐ ๋ถํฌ์ ๋ฐ๋๋ฅผ ๋ถ์ํ์ฌ ํฌ์ธํธ๋ค์ด ์ผ๋ง๋ ์๋ก ๊ฐ๊น๊ฒ ๋ชจ์ฌ ์๋์ง๋ฅผ ์ธก์ ํ๊ณ , ๋ฐ์ง๋ ์์ญ์ ํด๋ฌ์คํฐ๋ก ์ ์ํฉ๋๋ค.
โข
๋ฐ์ง ์ง์ญ: eps(๋ฐ๊ฒฝ) ๋ด์ ์ผ์ ํ ์ ์ด์์ ํฌ์ธํธ(min_samples)๊ฐ ์กด์ฌํ๋ ์ง์ญ์ ์๋ฏธํฉ๋๋ค.
1.3 ์ฃผ์ ํ๋ผ๋ฏธํฐ
โข
DBSCAN์ ๋ ๊ฐ์ง ์ฃผ์ ํ๋ผ๋ฏธํฐ๋ eps์ min_samples
โข
์ด ๋ ํ๋ผ๋ฏธํฐ๋ ํด๋ฌ์คํฐ์ ํฌ๊ธฐ์ ํํ๋ฅผ ๊ฒฐ์ ํ๋ ์ค์ํ ์์
โข
์๋ฅผ ๋ค์ด, eps๊ฐ ๋๋ฌด ์์ผ๋ฉด ์์ ๊ตฐ์ง๋ง ํ์ฑ๋๊ณ , ๋๋ฌด ํฌ๋ฉด ๊ตฐ์ง์ด ๋ณํฉ๋ ์ ์์
โข
min_samples๊ฐ ํด์๋ก ๋ ๊ฐ๋ ฅํ ๊ตฐ์ง์ ํ์ฑํ์ง๋ง ๋
ธ์ด์ฆ๋ก ๋ถ๋ฅ๋๋ ํฌ์ธํธ๊ฐ ์ฆ๊ฐํ ์ ์์
eps(epsilon)โข
ํฌ์ธํธ๋ค์ด ์๋ก ๋ฐ์ง๋์ด ์๋ค๊ณ ๊ฐ์ฃผํ๊ธฐ ์ํ ๊ฑฐ๋ฆฌ, ๋ฐ๊ฒฝ eps ๋ด์ ํน์ ์ ์ด์์ ์ด์์ด ์์ด์ผ ๋ฐ์ง๋ ์์ญ์ผ๋ก ๊ฐ์ฃผ
min_samplesโข
ํ๋์ ํด๋ฌ์คํฐ๋ก ์ธ์ ํ๊ธฐ ์ํด eps ๋ด์ ์์ด์ผ ํ ์ต์ํ์ ์ด์ ํฌ์ธํธ ์
1.3 ์๊ณ ๋ฆฌ์ฆ ํ๋ฆ
DBSCAN์ ๋ฐ๋๊ฐ ๋ฎ์ ์ง์ญ์ ์ฝ๊ฒ ์ ์ธํ๊ณ , ๋ฐ๋๊ฐ ๋์ ์ง์ญ์์๋ง ํด๋ฌ์คํฐ๋ฅผ ํ์ฑํ๋ ๋ฐฉ์์ผ๋ก ๊ณ ์ ๋ ๊ฐ์๊ฐ ์๋ ํด๋ฌ์คํฐ๋ฅผ ํ์งํ ์ ์์
1.
๋ฐ์ดํฐ์
์์ ์์์ ํฌ์ธํธ๋ฅผ ์ ํ
2.
์ ํ๋ ํฌ์ธํธ๊ฐ ํต์ฌ ํฌ์ธํธ๋ผ๋ฉด, ํด๋น ํฌ์ธํธ๋ฅผ ์ค์ฌ์ผ๋ก ๋ฐ๊ฒฝ ๋ด์ ์๋ ํฌ์ธํธ๋ค๊ณผ ์ฐ๊ฒฐํ์ฌ ํด๋ฌ์คํฐ๋ฅผ ํ์ฑ
3.
๋ฐ๊ฒฝ ๋ด์ min_samples ์ดํ์ ํฌ์ธํธ๊ฐ ์์ผ๋ฉด ํด๋น ํฌ์ธํธ๋ฅผ ๋
ธ์ด์ฆ๋ก ๊ฐ์ฃผ
4.
์ฐ๊ฒฐ๋ ๋ชจ๋ ํฌ์ธํธ๊ฐ ํด๋ฌ์คํฐ๋ก ๋ฌถ์ผ ๋๊น์ง, ์ ๊ณผ์ ์ ๋ฐ๋ณต
1.4 ์ฅ๋จ์
DBSCAN์ ๊ณ ๊ฐ ์ธ๋ถํ, ์ด์์น ํ์ง, ์ด๋ฏธ์ง ๋ถ์ ๋ฑ ๋ค์ํ ๋ถ์ผ์์ ๋๋ฆฌ ํ์ฉ
์ฅ์ โข
๋ถ๊ท์นํ ๋ชจ์์ ํด๋ฌ์คํฐ: DBSCAN์ ํด๋ฌ์คํฐ๊ฐ ์ํ์ด ์๋๋๋ผ๋ ๋ฐ๋์ ๋ฐ๋ผ ๋ณต์กํ ๋ชจ์์ ํด๋ฌ์คํฐ๋ฅผ ์ฐพ๋ ๋ฐ ์ ๋ฆฌ
โข
๋
ธ์ด์ฆ ์ฒ๋ฆฌ: DBSCAN์ ๋
ธ์ด์ฆ ๋ฐ์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ฑธ๋ฌ๋ด์ด ํด๋ฌ์คํฐ ๋ด์ ์ด์์น๊ฐ ํฌํจ๋์ง ์๋๋ก ํด์ผํจ
โข
์ฌ์ ํด๋ฌ์คํฐ ์ ์ง์ ๋ถํ์: DBSCAN์ k-means์ฒ๋ผ ํด๋ฌ์คํฐ ์๋ฅผ ๋ฏธ๋ฆฌ ์ง์ ํ ํ์๊ฐ ์์
๋จ์ โข
๋ฐ๋๊ฐ ๋ค์ํ ๋ฐ์ดํฐ์ ์ฝํจ: ๋ฐ๋๊ฐ ํฌ๊ฒ ์ฐจ์ด๋๋ ๋ฐ์ดํฐ์ ๋ํด์ ์ฑ๋ฅ์ด ๋จ์ด์ง ์ ์์
โข
eps์ min_samples ์ค์ ์ด ๋ฏผ๊ฐ: ํ๋ผ๋ฏธํฐ ์ค์ ์ ๋ฐ๋ผ ํด๋ฌ์คํฐ๋ง ๊ฒฐ๊ณผ๊ฐ ํฌ๊ฒ ๋ฌ๋ผ์ง ์ ์์
2. ๋์ ์๋ฆฌ
DBSCAN์ ๋์ ์๋ฆฌ๋ ๋ฐ๋ ๊ธฐ๋ฐ ์ ๊ทผ ๋ฐฉ์์ผ๋ก, ํน์ ์ง์ญ์ ๋ฐ์ง๋๋ฅผ ๊ธฐ์ค์ผ๋ก ํด๋ฌ์คํฐ๋ฅผ ํ์ฑํ๋ ๊ฒ
2.1 ๊ธฐ๋ณธ ๊ฐ๋
DBSCAN์ ๋ฐ์ดํฐ ํฌ์ธํธ๊ฐ ๋ฐ์ง๋ ์์ญ์ ํด๋ฌ์คํฐ๋ก ์ ์ํ๋ฉฐ, ์ด ๊ณผ์ ์์ ๋ ๊ฐ์ง ์ฃผ์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉ
epsโข
๋ ํฌ์ธํธ๊ฐ ๊ฐ์ ํด๋ฌ์คํฐ์ ์ํ๋ ค๋ฉด ์ด ์ ๋ ๊ฑฐ๋ฆฌ ์ด๋ด์ ์์ด์ผ ํ๋ ์๊ณ ๋ฐ๊ฒฝ
min_samplesโข
ํ ํฌ์ธํธ๊ฐ ํต์ฌ ํฌ์ธํธ๋ก ๊ฐ์ฃผ๋๊ธฐ ์ํด eps ๋ด์ ํฌํจ๋์ด์ผ ํ ์ต์ ์ด์ ํฌ์ธํธ ์
2.2 ํฌ์ธํธ์ ์ ํ
DBSCAN์ ๊ฐ ํฌ์ธํธ๋ฅผ ๋ค์ ์ธ ๊ฐ์ง ์ ํ์ผ๋ก ๋ถ๋ฅ
ํต์ฌ ํฌ์ธํธ(Core Point)โข
eps ๋ด์ min_samples ์ด์ ์ด์์ด ์๋ ํฌ์ธํธ์
๋๋ค. ์ด ํฌ์ธํธ๋ ํด๋ฌ์คํฐ ํ์ฑ์ ์ค์ฌ์ด ๋จ
๊ฒฝ๊ณ ํฌ์ธํธ(Border Point)โข
eps ๋ด์ min_samples ๋ฏธ๋ง์ ์ด์์ด ์์ง๋ง, ๋ค๋ฅธ ํต์ฌ ํฌ์ธํธ์ ์ฐ๊ฒฐ๋์ด ์์ด ํด๋ฌ์คํฐ์ ์ํ ์ ์๋ ํฌ์ธํธ
๋
ธ์ด์ฆ ํฌ์ธํธ(Noise Point)โข
์ด๋ ํด๋ฌ์คํฐ์๋ ์ํ์ง ์๋ ํฌ์ธํธ์
๋๋ค. ๋ฐ๋๊ฐ ๋ฎ์ ์ง์ญ์ ์์นํ ํฌ์ธํธ๋ก ๊ฐ์ฃผ
2.3 ์๊ณ ๋ฆฌ์ฆ ๋จ๊ณ
1.
์์ ํฌ์ธํธ ์ ํ: ๋ฐ์ดํฐ์
์์ ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ์์์ ํฌ์ธํธ๋ฅผ ์ ํ
2.
์ด์ ํฌ์ธํธ ํ์: ์ ํ๋ ํฌ์ธํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐ๊ฒฝ eps ๋ด์ ์๋ ๋ชจ๋ ์ด์ ํฌ์ธํธ๋ฅผ ํ์ํ์ฌ, ์ด ํฌ์ธํธ๊ฐ ํต์ฌ ํฌ์ธํธ์ธ์ง ํ์ธ
โข
์ด์ ํฌ์ธํธ๊ฐ min_samples ์ด์ ์์ผ๋ฉด ํด๋น ํฌ์ธํธ๋ ํต์ฌ ํฌ์ธํธ๋ก ๊ฐ์ฃผ
โข
๋ง์ฝ ์ด์ ํฌ์ธํธ๊ฐ min_samples ๋ฏธ๋ง์ด๋ฉด ๋
ธ์ด์ฆ๋ก ๊ฐ์ฃผํ ์๋ ์์ง๋ง, ๋ค๋ฅธ ํต์ฌ ํฌ์ธํธ์ ์ฐ๊ฒฐ๋๋ฉด ๊ฒฝ๊ณ ํฌ์ธํธ๊ฐ ๋ ์ ์์
3.
ํด๋ฌ์คํฐ ํ์ฅ: ํต์ฌ ํฌ์ธํธ๊ฐ ํ์ธ๋๋ฉด, ํด๋น ํฌ์ธํธ๋ฅผ ์ค์ฌ์ผ๋ก ์ด์ ํฌ์ธํธ๋ค์ ํด๋ฌ์คํฐ์ ์ถ๊ฐ. ์ด ๊ณผ์ ์์ ์๋กญ๊ฒ ์ถ๊ฐ๋ ์ด์ ํฌ์ธํธ๊ฐ ํต์ฌ ํฌ์ธํธ์ผ ๊ฒฝ์ฐ, ์ด๋ฅผ ์ค์ฌ์ผ๋ก ์ถ๊ฐ์ ์ธ ์ด์ ํ์์ ํตํด ํด๋ฌ์คํฐ๊ฐ ๊ณ์ ํ์ฅ๋จ
4.
๋
ธ์ด์ฆ ํฌ์ธํธ ๊ตฌ๋ถ: ํด๋ฌ์คํฐ์ ์ํ์ง ์์ ํฌ์ธํธ๋ ๋
ธ์ด์ฆ๋ก ๊ฐ์ฃผ ๋
ธ์ด์ฆ ํฌ์ธํธ๋ ํด๋ฌ์คํฐ์ ํฌํจ๋์ง ์์ง๋ง, ํ์ ํด๋ฌ์คํฐ ํ์ฅ์์ ๊ฒฝ๊ณ ํฌ์ธํธ๋ก ๋ณํ ๊ฐ๋ฅ์ฑ๋ ์์
5.
๋ชจ๋ ํฌ์ธํธ๊ฐ ๋ฐฉ๋ฌธ๋ ๋๊น์ง ๋ฐ๋ณต: ์ ๊ณผ์ ์ ๋ชจ๋ ํฌ์ธํธ์ ๋ํด ๋ฐ๋ณตํ๋ฉฐ, ๋ ์ด์ ํด๋ฌ์คํฐ๋ก ํ์ฅํ ์ ์๋ ๊ฒฝ์ฐ ๋ค์ ํด๋ฌ์คํฐ ์์ฑ์ ์ํด ์๋ก์ด ๋ฏธ๋ฐฉ๋ฌธ ํฌ์ธํธ๋ฅผ ์ ํ
2.4 DBSCAN์ ๊ฐ์ ๋ฐ ํ๋ผ๋ฏธํฐ์ ์ํฅ
DBSCAN์ ํด๋ฌ์คํฐ ์๋ฅผ ๋ฏธ๋ฆฌ ์ ์ํ ํ์๊ฐ ์๊ณ , ํด๋ฌ์คํฐ๊ฐ ๋ถ๊ท์นํ ๋ชจ์์ด์ด๋ ์ ์ฐพ์๋
ํ์ง๋ง eps์ min_samples ์ค์ ์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ ํฌ๊ฒ ๋ฌ๋ผ์ง๋ฏ๋ก ์ ์ ํ ํ๋ผ๋ฏธํฐ ํ๋์ด ํ์
eps๊ฐ ์์ผ๋ฉด ์์ ํด๋ฌ์คํฐ๊ฐ ์ฌ๋ฌ ๊ฐ ์๊ธฐ๊ณ , ํฌ๋ฉด ํด๋ฌ์คํฐ๊ฐ ๊ณผ๋ํ๊ฒ ํ์ฅ๋ ์ ์์
์ด๋ฌํ ์๋ฆฌ๋ฅผ ํตํด DBSCAN์ ๊ณ ๋ฐ๋ ์์ญ์์ ํด๋ฌ์คํฐ๋ฅผ ํ์ฑํ๊ณ , ๋ฐ๋๊ฐ ๋ฎ์ ํฌ์ธํธ๋ ๋
ธ์ด์ฆ๋ก ๋ถ๋ฅํ๋ ๊ตฐ์งํ ๋ฐฉ๋ฒ3. ์ฝ๋ ๊ตฌํ ๋ฐ ๋ฐ๋ชจ
Python์ scikit-learn ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ DBSCAN์ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณต
3.1 DBSCAN ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ์ฌ ํด๋ฌ์คํฐ๋ง ๊ฒฐ๊ณผ๋ฅผ ์๊ฐํ_์ฝ๋ ๊ตฌํ ์์
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_moons
from sklearn.cluster import DBSCAN
from sklearn.preprocessing import StandardScaler
# ๋ฐ์ดํฐ์
์์ฑ
X, y = make_moons(n_samples=300, noise=0.1, random_state=0) # ๋ฐ๋ฌ ๋ชจ์์ ๋ฐ์ดํฐ์
์์ฑ
X = StandardScaler().fit_transform(X) # ๋ฐ์ดํฐ ํ์คํ
# DBSCAN ๋ชจ๋ธ ์ค์ ๋ฐ ํ์ต
dbscan = DBSCAN(eps=0.3, min_samples=5) # eps์ min_samples ์ค์
labels = dbscan.fit_predict(X) # ๋ชจ๋ธ์ ํตํด ๊ฐ ํฌ์ธํธ์ ํด๋ฌ์คํฐ ํ ๋น
# ๊ฒฐ๊ณผ ์๊ฐํ
plt.figure(figsize=(8, 6))
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis', s=50, marker='o')
plt.xlabel("X-axis")
plt.ylabel("Y-axis")
plt.title("DBSCAN Clustering ๊ฒฐ๊ณผ")
plt.colorbar(label="Cluster Label")
plt.show()
Python
๋ณต์ฌ
3.2 ์ฝ๋ ์ค๋ช
๋ฐ์ดํฐ ์์ฑโข
make_moons ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ๋ฌ ๋ชจ์์ 2D ๋ฐ์ดํฐ๋ฅผ ์์ฑ, ์ด ๋ฐ์ดํฐ๋ ๋ถ๊ท์นํ ํํ์ ํด๋ฌ์คํฐ๋ก ์ด๋ฃจ์ด์ ธ ์์ด DBSCAN์ ์ฌ์ฉํ๊ธฐ์ ์ ํฉ
โข
StandardScaler๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ํ์คํํ์ฌ ์ค์ผ์ผ ์ฐจ์ด๊ฐ ๊ฒฐ๊ณผ์ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ก ํจ
DBSCAN ๋ชจ๋ธ ์ค์ โข
DBSCAN ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , eps=0.3๊ณผ min_samples=5๋ก ์ค์
โข
eps: ๊ฐ ํฌ์ธํธ์์ ์ด์ ํฌ์ธํธ๋ฅผ ์ฐพ๋ ๋ฐ๊ฒฝ(๊ฑฐ๋ฆฌ)
โข
min_samples: ํด๋น ๋ฐ๊ฒฝ ๋ด์ ์์ด์ผ ํ๋ ์ต์ ์ด์ ํฌ์ธํธ ์
๋ชจ๋ธ ํ์ต ๋ฐ ํด๋ฌ์คํฐ ํ ๋นโข
fit_predict ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ DBSCAN ๋ชจ๋ธ์ ํ์ตํ๊ณ ๊ฐ ํฌ์ธํธ์ ๋ํด ํด๋ฌ์คํฐ ๋ ์ด๋ธ์ ํ ๋น
โข
labels ๋ณ์์๋ ๊ฐ ํฌ์ธํธ๊ฐ ์ํ๋ ํด๋ฌ์คํฐ ๋ฒํธ๊ฐ ์ ์ฅ๋๋ฉฐ, ๋
ธ์ด์ฆ ํฌ์ธํธ๋ -1๋ก ํ์
๊ฒฐ๊ณผ ์๊ฐํโข
matplotlib๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ํฌ์ธํธ์ ํด๋ฌ์คํฐ๋ฅผ ์๊ฐํ
โข
ํฌ์ธํธ ์์์ ํด๋ฌ์คํฐ ๋ ์ด๋ธ์ ๋ฐ๋ผ ๊ฒฐ์ ๋๋ฉฐ, ๋
ธ์ด์ฆ ํฌ์ธํธ๋ ๋ค๋ฅธ ์์์ผ๋ก ํ์
3.3 ํ๋ผ๋ฏธํฐ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ํด๋ฌ์คํฐ๋ง ๊ฒฐ๊ณผ_์ฝ๋ ๊ตฌํ ์์
DBSCAN์ eps์ min_samples ๊ฐ์ ์กฐ์ ํ๋ฉด ๊ฒฐ๊ณผ๊ฐ ํฌ๊ฒ ๋ฌ๋ผ์ง ์ ์์. ์๋๋ ํ๋ผ๋ฏธํฐ๋ฅผ ์กฐ์ ํ๋ฉฐ ๊ฒฐ๊ณผ๋ฅผ ๋น๊ตํ ์ ์๋ ์ฝ๋
# ํ๋ผ๋ฏธํฐ ํ๋ ์คํ ํจ์
def dbscan_experiment(eps_value, min_samples_value):
# DBSCAN ๋ชจ๋ธ ์ค์
dbscan = DBSCAN(eps=eps_value, min_samples=min_samples_value)
labels = dbscan.fit_predict(X)
# ๊ฒฐ๊ณผ ์๊ฐํ
plt.figure(figsize=(8, 6))
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='plasma', s=50, marker='o')
plt.xlabel("X-axis")
plt.ylabel("Y-axis")
plt.title(f"DBSCAN with eps={eps_value} and min_samples={min_samples_value}")
plt.colorbar(label="Cluster Label")
plt.show()
# ์คํ
dbscan_experiment(0.3, 5) # eps=0.3, min_samples=5
dbscan_experiment(0.5, 5) # eps=0.5, min_samples=5
dbscan_experiment(0.3, 10) # eps=0.3, min_samples=10
Python
๋ณต์ฌ
3.4 ๊ฒฐ๊ณผ ๋ถ์
eps ๊ฐ์ ๋ณํโข
eps๊ฐ ์์์ง๋ฉด ํด๋ฌ์คํฐ๊ฐ ์ธ๋ฐํด์ง์ง๋ง ์์ ๊ตฐ์ง์ด ์ฌ๋ฌ ๊ฐ ํ์ฑ๋๊ณ ๋
ธ์ด์ฆ๋ก ๋ถ๋ฅ๋๋ ํฌ์ธํธ๊ฐ ์ฆ๊ฐ
โข
eps๊ฐ ์ปค์ง๋ฉด ๋ ํฐ ์์ญ์ ํฌ๊ดํ๋ ํด๋ฌ์คํฐ๊ฐ ํ์ฑ๋๋ฉฐ, ์ ์ ํด๋ฌ์คํฐ ์๋ก ๋๋ ์ ์์
min_samples ๊ฐ์ ๋ณํโข
min_samples ๊ฐ์ด ์ปค์ง๋ฉด ํด๋ฌ์คํฐ์ ํฌํจ๋๊ธฐ ์ํ ์ต์ ์ด์ ์๊ฐ ์ฆ๊ฐํ๋ฏ๋ก, ๋ฐ๋๊ฐ ๋์ ๊ณณ์์๋ง ํด๋ฌ์คํฐ๊ฐ ํ์ฑ๋จ ๊ทธ ๊ฒฐ๊ณผ๋ก ๋
ธ์ด์ฆ๊ฐ ๋ง์์ง ์ ์์
โข
min_samples ๊ฐ์ด ์์์ง๋ฉด ๋ ๋ง์ ํฌ์ธํธ๊ฐ ํด๋ฌ์คํฐ๋ก ํฌํจ๋๋ฉฐ, ๋
ธ์ด์ฆ๊ฐ ์ค์ด๋ค ์ ์์
์ด์ ๊ฐ์ด ํ๋ผ๋ฏธํฐ ์ค์ ์ ๋ฐ๋ผ ํด๋ฌ์คํฐ๋ง ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง ์ ์์ผ๋ฏ๋ก, ์ค์ ๋ฐ์ดํฐ์ ๋ง๋ ์ ์ ํ ํ๋ผ๋ฏธํฐ ํ๋์ด ์ค์
3.5 ๊ฒฐ๋ก
DBSCAN์ด ๋ฐ๋๊ฐ ๋์ ์ง์ญ์์ ํด๋ฌ์คํฐ๋ฅผ ํ์ฑํ๊ณ ๋ฐ๋๊ฐ ๋ฎ์ ํฌ์ธํธ๋ ๋
ธ์ด์ฆ๋ก ๊ตฌ๋ถํ๋ ๋ฐฉ์์ผ๋ก ์๋ํ๋ค๋ ๊ฒ์ ํ์ธํ ์ ์์4. ๋ฒ์ธ
4.1 K-Means Clustering๊ณผ์ ์ฐจ์ด
๋ณดํต Clustering ๋ฌธ์ ์์ K-Means Clustering์ ์ฐ์ ๋ ์ฌ๋ฆฌ๋ฏ๋ก, K-Means Clustering๊ณผ DBSCAN์ ์ฐจ์ด ๋น
ํน์ง | DBSCAN | K-means Clustering |
Cluster์ ๋ชจ์ | ๋ฐ์ดํฐ์ Cluster ๋ชจ์์ด arbitraryํ๊ฒ ๋ฌถ์ด๋ ๊ฒฝ์ฐ ์ Clustering ๋จ | ๋ฐ์ดํฐ์ Cluster ๋ชจ์์ด Sphericalํ ๊ฒฝ์ฐ์ ์ Clustering ๋จ |
Cluster์ ๊ฐ์ | ๊ตฐ์งํ ๊ฐ์๋ฅผ ๋ฏธ๋ฆฌ ์ ํด์ฃผ์ง ์์๋ ๋จ(๋ฐ๋ ๊ธฐ๋ฐ) | ๊ตฐ์งํ ๋ ๊ฐ์๋ฅผ ๋ฏธ๋ฆฌ ์ ํด์ค์ผํจ (centroid ๊ธฐ๋ฐ) |
Outlier | Clustering์ ํฌํจ๋์ง ์๋ Outlier๋ฅผ ํน์ ํ ์ ์์ | ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ํ๋์ Cluster์ ํฌํจ๋จ |
Initial Setting | ์ด๊ธฐ Cluster ์ํ๊ฐ ์กด์ฌํ์ง ์์ | ์ด๊ธฐ Centroid ์ค์ ์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ ๋ง์ด ๋ฌ๋ผ์ง |
โข
DBSCAN๊ณผ K-means Clustering ์ฌ์ด์ ์ด๋ ๊ฒ์ด ์ข๋ค๋ ๋ค๋ฃจ๋ ๋ฐ์ดํฐ์ ๋ฐ๋ผ ๋ง์ด ๋ฌ๋ผ์ง
โข
DBSCAN์ ์ผ๋ฐ์ ์ผ๋ก K-means Clustering์ ๋นํด <๋ถ๊ท์น ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋, Noise์ Outlier๊ฐ ๋ง์ ๊ฒ์ผ๋ก ์์๋ ๋, ๋ฐ์ดํฐ์ ๋ํ ์ฌ์ ์์ธก์ด ์ด๋ ค์ธ ๋> ํ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
โข
DBSCAN์ K-means Clustering์ ๋นํด <Computational Cost๊ฐ ๋ง์ด ๋ ๋ค๋ ์ , ์์ธก๊ณผ ํด์์ด ์ด๋ ต๋ค๋ ์ >์ ๋จ์ ์ด ์๋ค.
๊ทธ๋ฆผ ์ถ์ฒ : https://www.youtube.com/watch?v=OMO_atK0tVY
์ฐธ๊ณ ์๋ฃ
DBSCAN์ ์ฐฝ์ ๋
ผ๋ฌธโข
Martin Ester, Hans-Peter Kriegel, Jรถrg Sander, Xiaowei Xu๊ฐ ๋ฐํํ "A Density-Based Algorithm for Discovering Clusters in Large Spatial Databases with Noise" ๋
ผ๋ฌธ๋ฆฌ๋ทฐ๋ฅผ ์ฐธ๊ณ ํ์ฌ ์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ๋ณธ ๊ฐ๋
๊ณผ ๋์ ์๋ฆฌ ๋ฑ์ ์ค๋ช
๊ธฐ๊ณ ํ์ต ๋ฐ ๋ฐ์ดํฐ ๋ง์ด๋ ๊ธฐ๋ณธ์โข
"Pattern Recognition and Machine Learning" (Christopher M. Bishop): ํด๋ฌ์คํฐ๋ง๊ณผ ๋ฐ๋ ๊ธฐ๋ฐ ๊ตฐ์งํ์ ๋ํ ์ด๋ก ์ ๋ฐฐ๊ฒฝ ๋ฆฌ๋ทฐ ์ฐธ๊ณ
โข
"Data Mining: Concepts and Techniques" (Jiawei Han, Micheline Kamber, Jian Pei): ํด๋ฌ์คํฐ๋ง ์๊ณ ๋ฆฌ์ฆ, ํนํ ๋ฐ๋ ๊ธฐ๋ฐ ํด๋ฌ์คํฐ๋ง์ ๋ํ ์์ธํ ๊ฐ๋
์ค๋ช
๋ฆฌ๋ทฐ ์ฐธ๊ณ
YouTube










