노이즈 가 있는 애플리케이션 의 밀도 기반 공간 클러스터링 .
DBSCAN은 클러스터링 알고리즘입니다. 값 컬렉션을 제공하면 알고리즘은 이를 가까운 값 그룹으로 구성합니다.
우리 중 많은 사람들이 클러스터링 알고리즘에 조금이라도 익숙하다면 k -평균 클러스터링에 대해 알고 있을 것입니다. 그러나 k -평균의 문제점 중 하나는 이를 사용하려면 클러스터 수(" k ")를 지정해야 한다는 것입니다. 대부분의 경우 합리적인 k 값이 사전 에 무엇인지 알 수 없습니다. (사실 우리가 가장 먼저 알고 싶은 것은 바로 이 부분입니다!)
DBSCAN의 좋은 점은 이를 사용하기 위해 클러스터 수를 지정할 필요가 없다는 것입니다. 필요한 것은 값 사이의 거리를 계산하는 기능과 "가까운" 것으로 간주되는 거리의 양에 대한 지침뿐입니다. 또한 DBSCAN은 다양한 분포에 걸쳐 k -평균보다 더 합리적인 결과를 생성합니다.
import DBSCAN
import simd
let input : [ SIMD3 < Double > ] = [ [ 0 , 10 , 20 ] ,
[ 0 , 11 , 21 ] ,
[ 0 , 12 , 20 ] ,
[ 20 , 33 , 59 ] ,
[ 21 , 32 , 56 ] ,
[ 59 , 77 , 101 ] ,
[ 58 , 79 , 100 ] ,
[ 58 , 76 , 102 ] ,
[ 300 , 70 , 20 ] ,
[ 500 , 300 , 202 ] ,
[ 500 , 302 , 204 ] ]
let dbscan = DBSCAN ( input )
#if swift(>=5.2)
let ( clusters , outliers ) = dbscan ( epsilon : 10 ,
minimumNumberOfPoints : 1 ,
distanceFunction : simd . distance )
#else // Swift <5.2 requires explicit `callAsFunction` method name
let ( clusters , outliers ) = dbscan . callAsFunction ( epsilon : 10 ,
minimumNumberOfPoints : 1 ,
distanceFunction : simd . distance )
#endif
print ( clusters )
// [ [0, 10, 20], [0, 11, 21], [0, 12, 20] ]
// [ [20, 33, 59], [21, 32, 56] ],
// [ [58, 79, 100], [58, 76, 102], [59, 77, 101] ],
// [ [500, 300, 202], [500, 302, 204] ],
print ( outliers )
// [ [ 300, 70, 20 ] ]
Package.swift
의 대상 종속성에 DBSCAN 패키지를 추가하세요.
import PackageDescription
let package = Package (
name : " YourProject " ,
dependencies : [
. package (
url : " https://github.com/NSHipster/DBSCAN " ,
from : " 0.0.1 "
) ,
]
)
그런 다음 swift build
명령을 실행하여 프로젝트를 빌드하십시오.
MIT
매트(@mattt)